如何使用Selenium在Zephyr测试执行中添加堆栈跟踪信息
需求可行性结论
该需求完全可实现,改造成本极低,不需要调整现有Selenium自动化框架的核心执行逻辑,只要在已有的Zephyr状态更新逻辑上补充评论提交步骤即可。
核心实现逻辑
你现有框架已经可以自动同步Zephyr测试执行状态,说明已经完成了Zephyr接口鉴权、测试执行记录唯一标识(executionId)获取的前置工作,剩下的操作只需要补两个环节:
- 在测试用例的异常捕获逻辑中,提取执行失败时的完整stacktrace文本,对特殊字符、换行做基础转义,避免接口提交时报格式错误
- 调用Zephyr对应版本的「添加执行记录评论」接口,传入当前用例对应的executionId、转义后的stacktrace内容即可,接口返回2xx状态码即代表提交成功
不同版本Zephyr(Squad/Scale)的接口路径有细微差异,不需要找第三方实现文档,直接在你当前框架对接的同版本Zephyr官方API目录里检索
execution comment关键词,就能找到对应的接口参数定义。
最简参考实现(Python版本)
import traceback import requests # 以下配置为现有框架已有的通用配置,无需重复开发 ZEPHYR_API_ROOT = "自身部署的Zephyr实例API根路径" REQ_HEADER = { "Authorization": "框架现有使用的鉴权凭证", "Content-Type": "application/json" } def sync_zephyr_result(exec_id, case_status, err_stack=None): # 原有更新执行状态的逻辑,保持不变 status_resp = requests.put( url=f"{ZEPHYR_API_ROOT}/executions/{exec_id}", headers=REQ_HEADER, json={"status": {"name": case_status}} ) status_resp.raise_for_status() # 新增:执行失败时提交堆栈为评论 if case_status == "FAIL" and err_stack: comment_resp = requests.post( url=f"{ZEPHYR_API_ROOT}/executions/{exec_id}/comments", headers=REQ_HEADER, json={"body": f"自动化执行失败堆栈:\n```\n{err_stack}\n```"} ) comment_resp.raise_for_status() # 测试用例执行侧调用逻辑 if __name__ == "__main__": try: # 原有Selenium用例执行逻辑 run_selenium_test_flow() sync_zephyr_result(exec_id=current_case_exec_id, case_status="PASS") except Exception: # 捕获完整异常堆栈 full_stack = traceback.format_exc() sync_zephyr_result(exec_id=current_case_exec_id, case_status="FAIL", err_stack=full_stack)
落地注意事项
- 提交stacktrace时建议用Markdown代码块包裹内容,在Zephyr页端展示时格式不会错乱,方便排查问题
- 提前确认框架当前使用的Zephyr鉴权账号拥有执行记录的评论权限,避免接口返回403权限错误
- 不需要额外引入第三方Zephyr SDK,直接复用现有框架里已经封装好的Zephyr请求方法即可,单接口开发耗时基本在半小时以内
内容的提问来源于stack exchange,提问作者D. Barnett
相关产品推荐
相关产品推荐

