问答 如何让 unittest 的报告中错误输出有日志输出?(关于 stdout 重定向)

醋精测试媛 · 2020年11月24日 · 最后由 Thirty-Thirty 回复于 2020年12月21日 · 3149 次阅读

使用 logger 封装 logging,设置输出流为 sys.stdout.
当运行 unittest suite 并生成 report 时,logger 产生的日志会输出在下面的 console 中,但是并不输出在 report 中。

首先声明需求,因为公司希望我在报告中错误信息简化为一些其他人能看懂业务就能知道的文字,而不是 traceback

我的想法是两份报告,一份给开发,输出的报告中的错误信息是业务相关的错误
一份给测开,是含有 traceback 的错误

测开的不用改
但是如何将报告中输出的错误翻译成业务相关呢?


👆其他人很难看懂

因此,我需要将 logger.error 中的信息输出在报告中,但是不管是 sys.stdout 还是 sys.stderr.都是在控制台输出,而 report 中的输出流其实是 io.StringIO,如何让 report 也能输出部分日志呢?


这是报告中关于输出流的代码

请教一下怎么改,如果需要详细的其他信息,请于评论处问我

共收到 12 条回复 时间 点赞

其实 也是在想能不能优化 html 报告,将里面的错误信息改一改,加错误截图之类的。有没有方法呢?想了两天了,也看了很久的代码,但是没什么思路

13楼 已删除

可以使用 pytest+allure ,在 allure 报告里面会将 assert 失败得 msg 进行显示
pytest 可以兼容 unittest 不需要进行重构

Ma-KaiQiang 回复

暂时不打算用 pytest

仅楼主可见
Jackyang 回复

谢谢,我尝试一下!

https://www.cnblogs.com/yhleng/p/9295328.html 截图的话可以参考下这个文章,我也不是很懂。

然后可以分享下你最近的技能点给我不? 感觉你是我目前可以接近的目标,又这么好学~

自娱自乐 回复

谢谢,我看看
1.优化 po 框架:basepage。basecase。页面元素和页面功能分开,页面数据和代码分开(实现数据驱动)
2.可以看一下 unittestreport 项目的源代码(在 github 上开源)可以学到很多东西,里面包括但不限于输出流,traceback,前端 js,装饰器
3.python logging(包括回滚日志)装饰器(优雅的写代码)

1、你这个东西可以看看 logger 的 handler ,这个机制就是用于日志多处打印且可能每一处都有不同要求的。但是估计要你自己写个自定义的 handler 实现,对接到你这个自定义的报告模块
2、错误信息加错误截图,可以把图片信息以 base64 形式 +html image 标签 存到你输出到 html 报告的日志里,这样 html 报告就能展示图片,且不用额外搞别的图床。缺点是 html 文件会因此变大,因为内嵌了图片,建议做下图片压缩。

比较好奇你这个是啥报告框架,竟然要用到 io.StringIO 来写入

陈恒捷 回复

1.已经设置了 logger 的 handler。原因是报告使用io.StringIO 并进行了 stdout 和 stderr 的重定向,所以我必须也在项目中重定向到报告中的重定向的 stdout 和 stderr,这样的话涉及到改了一部分报告源代码。
2.关于报告,使用的是unitestreport ,这应该是比较常见的操作。

如果只是业务的自动化测试,有个简单的方法解决交互问题,将 testcase 名规范化让开发看的懂是哪个业务有问题,开发打开报告就能看到需求用例名,并不需要关注具体的报错

参考下这篇文吧,python3 BeautifulReport 测试报告 及 报告中增加日志输出:
https://www.cnblogs.com/fcc-123/p/11382429.html

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