前面的文章中我向大家介绍了单个脚本中执行用例生成HTML报告的方法。但在实际测试工作中我们往往需要同时批量的执行测试脚本并将所有测试用例执行结果显示在同一HTML报告中。这样改如何实现呢?下面请看博主一一讲解。
这里呢博主就偷一下懒啊,还是继续沿用以前写的登录QQ脚本,这里将原本的QQ邮箱的脚本重新复制一份,方便看效果。目录结构如下。run_all_case文件为执行用例的入口,批量执行脚本的地方。也是本次讲解的核心所在。
- TestLoader类中的discover()方法:
该类负责根据各种标准加载测试用例,并将它返回给测试套件,正常情况下,不需要创建这个类的实例,unittest提供了可共享的defaultTestLoader类,可以使其子类和方法创建实例,discover()方法就是其中之一。
discover(start_dir,pattern='test*.py',top_level_dir = None)
- start_dir:要测试的模块名或测试用例的目录
- pattern = 'test*.py'表示用例文件的匹配原则,此处匹配文件名以‘test’开头的‘py’类型文件其中星号*表示可以匹配任意多的字符。
- top_level_dir=None:测试用例的顶层目录,如果没有用None代替。
下面再结合博主的脚本看起来就会感觉豁然开朗了。哈哈哈。下面请看run_all_case文件内容
import unittest
import time
def all_case():
case_dir ='D:\\selenuim自动化\\qq' #存放测试用例文件的目录
testcase = unittest.TestSuite() #构造测试集
discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None) #使用discover方法筛选出测试用例
for test_suit in discover: #循环添加到测试套件中
for test_case in test_suit:
testcase.addTest(test_case)
print(testcase)
return testcase
下面生成HTML报告及run所有的测试用例。
if __name__ == '__main__':
from HTMLTestRunner import HTMLTestRunner #导包,关于如何生成HTML报告方法前面已经讲过这里不在赘述,有兴趣的小伙伴可以看博主前面写的博客
now = time.strftime("%Y-%m-%d %H_%M_%S")
uli = 'D:\\selenuim自动化\\qq\\' + now + 'QQ.html'
fp = open(uli, 'wb')
runner = HTMLTestRunner(stream=fp, title=u'这是我的自动化测试报告', description=u'测试用例执行情况:')
runner.run(all_case()) #run所有测试用例
fp.close()
好的下面博主分享一下源码。嘻嘻嘻。
import unittest
import time
def all_case():
case_dir ='D:\\selenuim自动化\\qq' #存放测试用例文件的目录
testcase = unittest.TestSuite() #构造测试集
discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None) #使用discover方法筛选出测试用例
for test_suit in discover: #循环添加到测试套件中
for test_case in test_suit:
testcase.addTest(test_case)
print(testcase)
return testcase
if __name__ == '__main__':
from HTMLTestRunner import HTMLTestRunner #导包,关于如何生成HTML报告方法前面已经讲过这里不在赘述,有兴趣的小伙伴可以看博主前面写的博客
now = time.strftime("%Y-%m-%d %H_%M_%S")
uli = 'D:\\selenuim自动化\\qq\\' + now + 'QQ.html'
fp = open(uli, 'wb')
runner = HTMLTestRunner(stream=fp, title=u'这是我的自动化测试报告', description=u'测试用例执行情况:')
runner.run(all_case()) #run所有测试用例
fp.close()
执行完毕的脚本如下所示两文件一个文件各一条用例。