设想一个情景,左边自动化测试运行,右边动态刷新相应的一些日志,比如 “18:20:35 正在运行测试用例 2” 之类的。这种情景是否可以实现呢?
我现在最多只能生成一个 html 报告,而且必须所有测试结束后才可以看到测试结果,在测试用例很多,测试时间很长的情况下,感觉存在一些不够实用的地方,所以想问一下如何实现以上情境呢?
日志监听:
python logging 模块提供的 handler 说明:https://docs.python.org/zh-tw/3/howto/logging.html#useful-handlers
测试结果监听:
unittest 可以基于 TestRunner 里面的 TestResult 来做,可以参考 https://github.com/SeldomQA/HTMLTestRunner/blob/master/HTMLTestRunner.py 里面 class _TestResult(TestResult):
这个部分的实现
可以的,你在执行的时候保存下 log,然后写个页面每次去获取这个 log,解析一下包装成你想要的数据就行了。
可以做到动态刷新,脚本中插入打印日志语句即可。
1、在开发环境运行时可以直接在 IDE 的控制台里查看日志
2、在非开发环境以本地方式运行,可以使用日志工具写日志文件,再做个桌面应用读取刷新
3、如果是以远程方式运行。写个 web 页面来获取服务端 log
技术上都可以,实际怎么做方便就看你想要达到什么样的效果了。
可以直接在日志框架和测试框架加新的自定义 handler ,每条日志以及每个用例执行结果都记录到数据库,网页做定时刷新,定时去拉数据库数据。
如果不想搞太多额外的开发,其实直接日志打印到控制台,jenkins 用 console output 看也基本是实时的。唯一缺点是没有最终报告格式那么好看,和 idea 控制台差不多效果。
另外,也建议考虑清楚这个需求的使用场景。大部分自动化测试的执行期间,是无人值守的,基本上都是跑完了一段时间,才有有空人看下报告,甚至跑失败告警了才有人去看报告。不一定有太多跑的过程中时不时去看一眼进展的场景。如果想知道进度百分比,jenkins 根据历史执行时间预估出来的进度条也可以作为一个不错的参考。
日志监听:
python logging 模块提供的 handler 说明:https://docs.python.org/zh-tw/3/howto/logging.html#useful-handlers
测试结果监听:
unittest 可以基于 TestRunner 里面的 TestResult 来做,可以参考 https://github.com/SeldomQA/HTMLTestRunner/blob/master/HTMLTestRunner.py 里面 class _TestResult(TestResult):
这个部分的实现
这个涉及到 websocket;日志实时刷新
傻一点就远程连接服务器;在执行下 tail -f
楼主如果用 python-django 框架的话;去看下 channels 和 celery
pytest 框架会在执行代码过程中自动生成日志哦