简介
我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了。加载用例后,用 unittest 里面的 TextTestRunner 这里类的 run 方法去一次执行多个脚
本的用例。那么前边介绍那么多都是半道开始,半道出家,这篇就带大家从头到尾,一步一步给小伙伴们详细介绍一下。
新建测试项目
1、pycharm 左上角 File>New Projetc>Pure Python,在 location 位置命名一个测试工程的名称:honggetest
2、然后点击“Create”
3、选中刚才新建的工程右键>New>Python Package>新建一个 case 文件夹
4、重复第 3 步的操作,新建一个 case 的文件夹,在里面添加一个 baidu 和一个 blog 的文件夹,里面分别有两个用例的脚本,如下图所示。test_01,test_02,test_03,test_04 是我们写用例的脚本
5、test_01创建完后,打开脚本,写入用例,其他的可以复制即可
6、参考代码
1# coding:utf-8 2import unittest 3import time 4 5class Test(unittest.TestCase): 6 def setUp(self): 7print ("start!") 8 def tearDown(self): 9time.sleep(1)10print ("end!")11 def test01(self):12print ("执行测试用例 01")13 def test02(self):14print ("执行测试用例 02")15 def test03(self):16print ("执行测试用例 03")1718if__name__ =="__main__":19unittest.main()
7、在 honggetest 这个项目下面创建一个脚本 run_all_case.py,接下来用这个脚本去批量执行所有的用例。
discover 加载测试用例
1、discover 方法里面有三个参数:
-case_dir:这个是待执行用例的目录。
-pattern:这个是匹配脚本名称的规则,test*.py 意思是匹配 test 开头的所有脚本。
-top_level_dir:这个是顶层目录的名称,一般默认等于 None 就行了。
2、discover 加载到的用例是一个 list 集合,需要重新写入到一个 list 对象 testcase 里,这样就可以用 unittest 里面的 TextTestRunner 这里类的 run 方法去执行。
3、运行后结果入下,就是加载到的所有测试用例了:
参考代码
1# coding=utf-8 2#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行 3 4#2.注释:包括记录创建时间,创建人,项目名称。 5''' 6Created on2019-4-29 7@author: 北京-宏哥 8Project:学习和使用discover批量执行测试用例 9'''10#3.导入unittest模块11import unittest12#4.编写测试用例和断言13def all_case():14 # 待执行用例的目录15case_dir ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"16testcase = unittest.TestSuite()17discover = unittest.defaultTestLoader.discover(case_dir,18pattern="test*.py",19top_level_dir=None)20 #discover方法筛选出用例,循环添加到测试套件中21fortest_suitin discover:22fortest_casein test_suit:23 #添加用力到testcase24 testcase.addTests(test_case)25 print(testcase)26return testcase27if__name__ =="__main__":28 # 返回实例29runner = unittest.TextTestRunner()30 # run 所有用例31runner.run(all_case())
run 测试用例
1、为了更方便的理解,可以把上面 discover 加载用例的方法封装下,写成一个函数
2、先返回 TextTestRunner()类的实例
3、调用 run 方法去执行 all_case()这个函数
参考代码
# coding=utf-8#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
#2.注释:包括记录创建时间,创建人,项目名称。'''Created on2019-4-29@author: 北京-宏哥
Project:学习和使用discover批量执行测试用例'''#3.导入unittest模块
import unittest
#4.编写测试用例和断言
def all_case():
# 待执行用例的目录
case_dir ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\case" testcase = unittest.TestSuite()
discover = unittest.defaultTestLoader.discover(case_dir,
pattern="test*.py",
top_level_dir=None)
testcase.addTests(discover) # 直接加载 discover 可以兼容python2和3
print(testcase)
return testcaseif__name__ =="__main__":
# 返回实例
runner = unittest.TextTestRunner()
# run 所有用例
runner.run(all_case())
小结
1、unittest模块中的TestLoader类有一个discover方法(Python2.7之后)discover(start_dir,pattern='test*.py',top_level_dir=None)递归查找指定目录(start_dir)及其子目录下的全部测试模块,将这些测试模块放入一个TestSuite 对象并返
回。只有匹配pattern的测试文件才会被加载到TestSuite中。如果一个测试文件的名称符合pattern,将检查该文件是否包含 load_tests() 函数,如果 load_tests() 函数存在,则由该函数负责加载本文件中的测试用例。如果不存在,就会执行
loadTestsFromModule(),查找该文件中派生自TestCase 的类包含的 test 开头的方法。
2、用例路径另一种写法
1case_dir = os.path.join(os.getcwd(),"case")