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


看一下,当前路径下生成了一个报告文件,见下图

31、Selenium + Python 实现 UI 自动化测试-正片3

打开看一下内容:

31、Selenium + Python 实现 UI 自动化测试-正片3


还不错,之前我们觉得代码放在一个文件中,代码数量太多,不好维护,所以拆分成了一条条case来报存代码逻辑,随着用例越来越多,这个目录下又有报告及运行用例的文件,整个目录显的没有条理,感觉应该建立文件夹分别存储不同用途的文件了。

31、Selenium + Python 实现 UI 自动化测试-正片3

如上图,我们新建了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)


 运行成功,在report目录下生成报告。

相信你在运行测试脚本的时候发现,每次生成的报告由于名字一样,会把之前的报告覆盖掉。所以我们稍微改进一下,给每个报告加个时间戳。

修改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目录下生成了带时间戳的报告。

31、Selenium + Python 实现 UI 自动化测试-正片3


好,简单总结一下本节内容:

1、为了更清晰的查看测试结果,我们引入了 HTML 报告;

2、为了使文件有条理,我们新建了不同的目录用来存储各种用途的文件;

3、为了不覆盖掉报告,我们给报告名字加了时间戳;