31、Selenium + Python 实现 UI 自动化测试-正片3
要是能自动生成一个报告就好了,可以清晰的看到每条用例的执行结果。
今天我们引入HTMLReport。将HTMLTestRunner.py文件放到当前目录,然后修改run.py文件如下:
import unittest from HTMLTestRunner import HTMLTestRunner if __name__ == '__main__': testdir = "./" discover = unittest.defaultTestLoader.discover(start_dir=testdir,pattern='test*.py') # runner = unittest.TextTestRunner() # runner.run(discover) with open('HTMLReport.html','wb+') as f: runner = HTMLTestRunner(stream=f, title='redmine测试报告名称', description='redmine 测试描述信息', verbosity=2) runner.run(discover)
运行结果如下:
C:\Python36\python.exe E:/python/test1/first/run.py
ok test_login (test_login.TestLogin)
ok test_new_pj (test_new_pj.TestNewProject)
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
Time Elapsed: 0:00:28.555280
Process finished with exit code 0
看一下,当前路径下生成了一个报告文件,见下图
打开看一下内容:
还不错,之前我们觉得代码放在一个文件中,代码数量太多,不好维护,所以拆分成了一条条case来报存代码逻辑,随着用例越来越多,这个目录下又有报告及运行用例的文件,整个目录显的没有条理,感觉应该建立文件夹分别存储不同用途的文件了。
如上图,我们新建了3个文件夹,cases用来存储所有的测试用例,report用来保存测试报告,utils用来存储工具类,把执行测试的run.py文件放在外面。
由于目录变更,调整一下run.py代码,如下:
import unittest from first.utils.HTMLTestRunner import HTMLTestRunner if __name__ == '__main__': testdir = "./cases" discover = unittest.defaultTestLoader.discover(start_dir=testdir,pattern='test*.py') # runner = unittest.TextTestRunner() # runner.run(discover) with open('./report/HTMLReport.html','wb+') as f: runner = HTMLTestRunner(stream=f, title='redmine测试报告名称', description='redmine 测试描述信息', verbosity=2) runner.run(discover)
相信你在运行测试脚本的时候发现,每次生成的报告由于名字一样,会把之前的报告覆盖掉。所以我们稍微改进一下,给每个报告加个时间戳。
修改run.py文件,如下
import unittest import time from first.utils.HTMLTestRunner import HTMLTestRunner if __name__ == '__main__': testdir = "./cases" cur_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) reportname = "HTMLReport_" + cur_time + ".html" reportdir = "./report/{}".format(reportname) discover = unittest.defaultTestLoader.discover(start_dir=testdir,pattern='test*.py') with open(reportdir,'wb+') as f: runner = HTMLTestRunner(stream=f, title='redmine测试报告名称', description='redmine 测试描述信息', verbosity=2) runner.run(discover)运行后,report目录下生成了带时间戳的报告。
好,简单总结一下本节内容:
1、为了更清晰的查看测试结果,我们引入了 HTML 报告;
2、为了使文件有条理,我们新建了不同的目录用来存储各种用途的文件;
3、为了不覆盖掉报告,我们给报告名字加了时间戳;