思考: 测试用例执行后, 如何生成一个直观漂亮的测试报告呢?
分析: 1.unittest 单元测试框架本身带有一个 textTestRunner 类, 可以生成 txt 文本格式的测试报告, 但是页面不够直观
2. 我们可以导入第三方库, 比如常用的 htmlTestRunner 类, 可以生成 HTML 格式测试报告
3. 首先去下载 HTMLTestRunner_PY3.py 脚本 (我这里采用 Python3.7), 然后放置在 Python3.7 路径下的 Lib 目录下, 使用时需要导入 (即 import HTMLTestRunner_PY3)
代码示例如下:
- if __name__ == "__main__":
- #实例化测试套件
- suite = unittest.TestSuite()
- #加载测试用例
- suite.addTest(TestCase("test_login"))
- #生成测试报告
- # 选择指定时间格式
- timestr = time.strftime('%Y-%m-%d%H%M%S', time.localtime(time.time()))
- # 定义测试报告存放路径和报告名称
- Report = os.path.join(
- PATH('E://testing_code/code/SmartSiteTestScript/report/test_report_') +
- timestr +
- '.html')
- with open(Report, 'wb') as f:
- runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=f,
- verbosity=2,
- title='XXXX 自动化测试报告',
- description='执行人: 丹姐')
- runner.run(suite)
- # 关闭测试报告
- f.close()
解析:
1. 在测试报告名中显示时间:(引入 time 包) timestr=time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
time.time(): 获取当前时间戳
time.ctime(): 获取当前时间的字符串
time.localtime(): 当前时间的 struct_time 形式
time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime()): 获取特定格式的时间, 通常用这个
2.TestSuite 是个容器, 往里面用 addTest() 添加测试用例
3.Report 定义报告保存的路径以及文件名
open() 函数用于打开一个文件, 创建一个 file 对象, 相关的方法才可以调用它进行读写
语法: open(name[,mode[,buffering]])
name : 一个包含了你要访问的文件名称的字符串值
mode : mode 决定了打开文件的模式: 只读, 写入, 追加等. 所有可取值见如下的完全列表. 这个参数是非强制的, 默认文件访问模式为只读 (r)
buffering : 如果 buffering 的值被设为 0, 就不会有寄存. 如果 buffering 的值取 1, 访问文件时会寄存行. 如果将 buffering 的值设为大于 1 的整数, 表明了这就是的寄存区的缓冲大小. 如果取负值, 寄存区的缓冲大小则为系统默认
这里常用的为 open(Report,'wb'): 以二进制形式打开文件 Report
4.runner 定义测试报告格式, stream 定义报告写入的二进制文件, title 为报告的标题, description 为报告的说明, runner.run() 用来运行测试 case, 注意最后用 f.close() 将文件关闭!
verbosity 表示测试结果的信息复杂度, 有三个值
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共 100 个 失败 20 成功 80
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个 "." 每个失败的用例前面有个 "F"
2 (详细模式): 测试结果会显示每个测试用例的所有相关的信息
测试报告效果图如下所示:
来源: https://www.cnblogs.com/ZoeLiang/p/10217601.html