一、收集规则
我们先来看一下官方文档(感觉应该是官方文档=.=)是怎么描述收集多个测试用例的:
pytest will run all files of the form test_*.py or *_test.py in the current directory and its subdirectories. More generally, it follows standard test discovery rules.
用蹩脚英语大致翻译一下:pytest,将会把当前目录和子目录下类似于“test_*.py”或者“*_test.py”这样以‘test_’开头或者‘_test’结尾的python文件,当作用例来运行。就一般而言,它遵循python测试用例设计(收集)规范。
这里的收集约定(规范)大致如下:
- 如果没有特别指定参数,优先从配置 testpaths 指定的目录或者当前目录开始;
- 依次向上递归寻找目录,除非使用正则类似的指定除外(这里好像就是指定某些特定的跳过,不收集);
- 在上面找到的目录中,寻找里面以‘test_’开头或者‘_test’结尾的python文件;
- 从这些python文件中,收集需要执行的测试项目:
1)类外以 test 为前缀的函数或方法;
2)以Test为前缀类(没有__init__方法)中,以 test 为前缀的函数或方法; - 在python中,pytest同样兼容unittest的相关的收集规定;
二、运行收集到的测试用例
上面我们已经收集到了需要执行的测试用例,现在我们想要让 pytest 去执行我们收集到的测试用例;
首先,我们先了解下 cmd 执行 pytest 用例的命令有哪些,一般来说有以下三种方法,如下:
pytest XX用例
py.test XX用例
python -m pytest XX用例
这里我们一般使用上面提到的第一个方法;
举个例子:我们这里写一个文件 test_sample.py 里面,放上一个待测的函数 func1(x),和一个测试用例 test_answer()。
# @File: test_sample.py
def func1(x):
return x + 1
def test_answer1():
assert func1(3) == 5
def test_answer2():
assert func1(4) == 5
1)运行单个 py 文件:
我们运行 test_sample.py 这个文件里所有的用例,我们可以用如下命令:
pytest test_sample.py
2)运行一个文件夹中的测试用例:
我们运行 cases1 这个文件夹下面的测试用例,有两个py文件,我们来一起运行一下,在当前目录下执行下面的命令:
这里我们发现,提示没有发现测试用例,经过检查我们发现,上面的收集规则中,两个py文件并不是以 ‘test_’ 开头的文件;
经过修改文件名,我们再进行尝试:
可以看到,我们成功地运行了一个文件夹下面的两个文件;