Unittest 测试报告生成

应用背景

自动化测试执行完成之后,我们需要生成测试报告来查看测试结果,使用HTMLTestRunner模块可以直接生产Html格式的报告。

报告模块下载地址:
http://tungwaiyip.info/software/HTMLTestRunner.html

下载后的修改:

  • 94行引入的名称要改,从 import StringIO 改成import io。

  • 539行 self.outputBuffer = StringIO.StringIO() 要改成self.outputBuffer = io.BytesIO()

  • 642行,if not rmap.has_key(cls): 需要换成 if not cls in rmap:

  • 766行的uo = o.decode(‘latin-1’),改成 uo=o

  • 772行,把 ue = e.decode(‘latin-1’) 直接改成 ue = e

存放路径

将修改完成的模块存放在Python路径下Lib目录里面即可

操作实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import unittest
from HTMLTestRunner import HTMLTestRunner
import time
#定义测试用例路径
test_dir='./test_case'
discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")

if __name__ == '__main__':
#存放报告的文件夹
report_dir='./test_report'
#报告命名时间格式化
now=time.strftime("%Y-%m-%d %H_%M_%S")
#报告文件完整路径
report_name=report_dir+'/'+now+'result.html'

#打开文件在报告文件写入测试结果
with open(report_name,'wb')as f:
runer=HTMLTestRunner(stream=f,title="Test Report",description='Test case result')
runer.run(discover)
f.close()

测试报告美化

下载地址:
https://github.com/easonhan007/HTMLTestRunner

注意:

下载后也需要和前面的内容一样进行修改,然后放置在Python安装路径的Lib文件夹里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import unittest
from BSTestRunner import BSTestRunner
import time
test_dir='./test_case'

discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")

if __name__ == '__main__':

report_dir='./test_report'
now=time.strftime("%Y-%m-%d %H_%M_%S")
report_name=report_dir+'/'+now+'result.html'

with open(report_name,'wb')as f:
runer=BSTestRunner(stream=f,title="Test Report",description='Test case result')
runer.STYLESHEET_TMPL = '<link rel="stylesheet" href="my_stylesheet.css" type="text/css">'
runer.run(discover)
f.close()

查看文件夹最新报告

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
report_dir='E:\\Desktop\\python_code_2016\\unittestpro\\Report\\'

#获取报告文件夹下面的所有报告文件
lists=os.listdir(report_dir)

#按时间对文件夹下面的文件进行排序
lists.sort(key=lambda fn:os.path.getmtime(report_dir+'\\'+fn))

#获取最新文件
file=os.path.join(report_dir,lists[-1])
print("最新报告为:")
pritt(file)