前面我们了解了测试组织的测试套件,已经批量查找用例并生成套件的加载器。
而在 unittest 的加载器中还提供了一个更加便捷的用例加载方法 discover()。
discover() 是 TestLoader 中用于指定测试目录,并查找该目录及子目录下所有符合查找规则的所有测试用例并构建测试套件。
- 指定查找的测试目录
- 子目录中的必须包含
__init__.py
(空文件即可),也就是子目录必须是一个包 - 指定查找规则,以
*
作为通配符 - 用例文件中的用例必须以
test
开头
还是以前面的案例为例,这里只是新建了一个子目录 sub_test,并把 test_b 放了进去:
+ test_demo 测试目录
- add.py 待测函数 add() 所在的文件
- test_a.py 测试类 TestAddOne 所在的文件,测试整数与字符串相加
+ sub_test 测试子目录
- test_b.py 测试类 TestAddTwo 所在的文件,测试列表与元组相加
- __init__.py 标识这是一个包目录
- run.py 测试套件
如果不清楚每个文件中的代码的话请查看上一节内容
使用 discover 查找 test_demo 目录下的所有测试用例,我们把 discover() 写在 run.py 文件中。注意 run.py 在 test_demo 目录下,与 sub_test 平级。
run.py
import unittest
tests = unittest.defaultTestLoader.discover(
start_dir='.', # => 指定查找的目录
pattern='test*.py' # => 指定查找规则
)
runner = unittest.TextTestRunner()
runner.run(tests)
使用 discover() 函数,需要指定两个参数:
-
start_dir:指定查找的起始目录,这里写的是相对路径
.
,当前文件所在的目录 -
pattern:指定查找规则,默认就是
test*.py
,这里*
作为通配符使用,可以表示任意个数的任意字符。-
test*.py
表示查找文件名以 test 开头的所有文件 -
*test*.py
表示查找文件名包含 test 的所有文件 -
test*.py
表示查找文件名以 test 结尾的所有文件
-
运行效果是会找到 test_demo 下的所有文件名符合条件的测试文件中的所有测试用例。
在实际使用时,可以在测试文件命名上制定一些规则,比如需要用于冒烟测试的用例中全部加上 smoke 字样,在运行冒烟测试时就可以匹配
*smoke*.py
运行。
网友评论