简介
我们在写用例的时候, 单个脚本的用例好执行, 那么多个脚本的时候, 如何批量执行呢? 这时候就需要用到 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, 参考代码
- # coding:utf-8
- import unittest
- import time
- class Test(unittest.TestCase):
- def setUp(self):
- print ("start!")
- def tearDown(self):
- time.sleep(1)
- print ("end!")
- def test01(self):
- print ("执行测试用例 01")
- def test02(self):
- print ("执行测试用例 02")
- def test03(self):
- print ("执行测试用例 03")
- if __name__ == "__main__":
- unittest.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, 运行后结果入下, 就是加载到的所有测试用例了:
参考代码
- # coding=utf-8
- #1. 先设置编码, utf-8 可支持中英文, 如上, 一般放在第一行
- #2. 注释: 包括记录创建时间, 创建人, 项目名称.
- '''
- Created on 2019-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)
- #discover 方法筛选出用例, 循环添加到测试套件中
- for test_suit in discover:
- for test_case in test_suit:
- #添加用力到 testcase
- testcase.addTests(test_case)
- print(testcase)
- return testcase
- if __name__ == "__main__":
- # 返回实例
- runner = unittest.TextTestRunner()
- # run 所有用例
- runner.run(all_case())
run 测试用例
1, 为了更方便的理解, 可以把上面 discover 加载用例的方法封装下, 写成一个函数
2, 先返回 TextTestRunner()类的实例
3, 调用 run 方法去执行 all_case()这个函数
参考代码
- # coding=utf-8
- #1. 先设置编码, utf-8 可支持中英文, 如上, 一般放在第一行
- #2. 注释: 包括记录创建时间, 创建人, 项目名称.
- '''
- Created on 2019-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 testcase
- if __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, 用例路径另一种写法
1 case_dir = os.path.join(os.getcwd(), "case")
来源: https://www.cnblogs.com/du-hong/p/10782655.html