自动化工具 HtmlTestRunner_cn 1.1,支持截图,失败重试,兼容 py2&py3

守望@天空~ · 2018年04月02日 · 最后由 SimpsonH 回复于 2020年12月10日 · 4154 次阅读
本帖已被设为精华帖!

HTMLTestRunner 汉化版

半年前 发了一个改版HtmlTestRunner 汉化版,最近因为任务需要,又重新用了一下,期间发现还有不少 bug,还有些部分内容可以继续优化,这次又加了些东东

  • 20170925
    • 测试报告完全汉化,包括错误日志的中文处理
    • 针对 selenium UI 测试增加失败自动截图功能
    • 增加失败自动重试功能
    • 增加饼图统计
    • 同时兼容 python2.x 和 3.x
  • 20180402
    • 表格样式优化
    • 修复部分 bug
    • 增加截图组,可展示多张截图,首次打开自动播放
    • 可以多次失败重试时仅展示最后一次运行结果,每个测试用例结果只有一个

报告汉化

selenium 截图

截图功能根据测试结果,当结果为 fail 或 error 时自动截图
截图方法在_TestResult 的测试结果收集中,可以根据自己使用的框架不同自行调整,selenium 使用的是 get_screenshot_as_base64 获取页面截图的 base64 编码,避免了图片文件附件存储的问题

因此要提取用例中的 driver 变量获取 webdriver 对象,所以要实现截图功能必须定义在用例中定义 webdriver 为 driver

def setUp(self):
    self.imgs=[]  # (可选)初始化截图列表
    self.driver = webdriver.Chrome()

也可以在测试过程中某一步骤自定义添加截图,比如

生成报告后会统一进行展示
截图播放效果

用例失败重试

根据 unittest 的运行机制,在 stopTest 中判断测试结果,如果失败或出错 status 为 1,判断是否需要重试;

在实例化 HTMLTestRunner 对象时追加参数,retry,指定重试次数,如果 save_last_try 为 True ,一个用例仅显示最后一次测试的结果。

HTMLTestRunner(title="带截图的测试报告", description="小试牛刀", stream=open("sample_test_report.html", "wb"), verbosity=2, retry=2, save_last_try=True)


如果 save_last_try 为 False,则显示所有重试的结果。

HTMLTestRunner(title="带截图的测试报告", description="小试牛刀", stream=open("sample_test_report.html", "wb"), verbosity=2, retry=2, save_last_try=False)


运行中输出效果如下

Github 地址:https://github.com/GoverSky/HTMLTestRunner_cn

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 48 条回复 时间 点赞

这个好

思寒_seveniruby 将本帖设为了精华贴 04月03日 23:35

厉害厉害,可惜下一秒就是我的了,报告的配色不太和谐,我需要改装一下😼

jasonsum 回复

谢谢支持😀配色基本部分都在这里了~

楼主,我将 retry=1,失败重试时报如下错,什么原因啊:
runner=HTMLTestRunner(title="后台 Web 自动化测试报告", description="", stream=fp, verbosity=2, retry=1, save_last_try=False)

徐文兵 回复

失败的用例长啥样?,截图看不出来

楼主,弱弱问下,我用 py3,把你的 demo 直接改成 setUp(self):tearDown(self):模式,用例失败后截图报错,是不支持这样子运行?具体如下:


很不错,一直在找报告优化的模版,谢谢。

RookieWu 回复

哦,这是个 bug😅 谢谢反馈

RookieWu 回复

刚瞄了验 3.x unittest 的源码,3.x 的运行机制不支持 setUp(self):tearDown(self) 模式的失败截图,因为 3.x 版中 tearDown 在调用 addFailure 之前执行,导致 driver 的 session 已经结束,无法截图😂

守望@天空~ 回复

😂 😂 略无奈呀

截图和用例要怎么实现对应关系

@luusky 发现第一列 pass 不能查看详情,第一列点击 detail 后也不能收起。。

faith 回复

用的不是我的这个吧...哪有 pass ,detail,我的都汉化了...你的问题也重现不了

  • [1] 要有输出详情,测试用例中要 print 输出的内容

  • [2] 详情的问题没重现,去 github 重现下个最新版试试

@luusky 好的 感谢~

支持 appium python3 吗? 我试了下 没有截图呢?

拉宝 回复

试了下,是可以的,就是样式得改一下

再见理想 回复

支持~

每个 case 的注释没有输出,如果输出就更好了

case 注释用的 unittest.TestCase 的 shortDescription 方法,此方法只取注释的第一行 ,把 shortDescription() 改成._testMethodDoc or '' 就全显示了~

守望@天空~ 回复

我也是 python3.6 没有截成功,支持在 webview 中截图吗

推荐使用 pytest + allure

Tesla Lau 回复

嗯嗯,好的,调研一下,谢谢

守望@天空~ 回复

Python3,用的 po 模式,test 里面都是调用函数,这要怎么用截图

nic 回复

我是在封装时候直接加了一个截图函数

守望@天空~ 回复

试过不可以,是在 page 中直接调用,只有业务的操作,不是在 unittest 下

仅楼主可见
23楼 已删除

跳过的用例的怎么会统计成成功啊

ahhuang1 回复

跳过的用例不会执行的,没计入统计啊


运行时候报错,提示无法调用呢

陈请请 回复

好好看一下 demo😅 你打开方式不对啊

守望@天空~ 回复

解决了,多谢哈

@ 再见理想


我有两个网站跑同一套 case,从报告中我怎么区分是哪家网站跑的?

仅楼主可见
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08

整合了 github 上面的 utx 项目,挺好用

近涛 回复

😃 谢谢支持

你好,我的咋没有截图呢 python3 apppium
self.driver.get_screenshot_as_file() 加了保存截图的方法

lushuishasha 回复

我这个默认都是用 base64 存储的哦,不存文件。。详细可以看 demo 的

jasonsum 回复

大佬,配色改装了吗?

大神 跳过的用例也执行了错误重跑,怎么的啊?

标记标记



大佬们,我这个报这个错是怎么回事?

薇大帅 回复

这个不算报错,不影响使用的,因为在前面的步骤已经有赋值了,算是 IDE 的问题吧

@ 守望 @ 天空~ 但是我截图貌似没有起作用,没有展示,我是搞的 appium,方便加个联系方式讨论请教一下吗,我的 QQ:6927656

大佬,我参考了你的代码,为设置失败重跑的时候,但是我的用例失败一直没有重跑,

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册