在pytest框架中,编写测试用例有如下约束:
- 所有的测试用例文件名都需要满足test_*.py格式或*_test.py格式。
- 在测试用例文件中,测试类以Test开头,并且不能带有__init__方法,否则pytest不会执行该class。
- 在测用例的class中,可以包含一个或多个test_开头的方法。
在满足上面约束后,有两种方式来执行测试用例:
- 主函数方式
- 命令行方式
主函数方式
执行所有用例
使用pytest.main()方式执行用例,如果不加参数,会自动从当前目录及子目录中寻找符合上述约束的测试用例来执行。
import pytest
class TestPractice:
def test_01(self):
print("执行用例1")
def test_02(self):
print("执行用例2")
if __name__ == '__main__':
pytest.main()
执行结果
从上面的结果中,可以看到,print()打印的信息未显示,可以使用-s参数显示打印信息
...(省略)
if __name__ == '__main__':
pytest.main(["-s"])
注意参数格式是列表
上面的pytest.main()是写在用例文件中的,我们可以将其独立出来,结构如下
执行指定用例集
每个测试用例都有一个唯一的nodeid,节点ID格式为 “相对于执行文件的用例文件路径::类名::用例名”。可以使用-v参数,查看执行的详细信息,详细信息包含了用例的节点ID。
在知道了用例的节点ID后,只需要将用例的节点ID以参数的形式传入,就可以执行指定用例了。
执行指定用例
执行指定用例类
执行指定用例文件或指定路径
命令行方式
命令行方式与主函数相差不大,区别是主函数是以列表添加参数,命令行是以空格添加参数。
配置文件修改约束条件
文章开头强调了测试用例的约束条件,这些约束条件是可以通过pytest.ini来修改的,下面是常用的配置字段:
[pytest]
# 命令行参数,用空格分隔
addopts = -v -s
# 读取测试用例的起始文件夹
testpaths = ./testcase
# 配置搜索的模块文件名称
python_files = test*.py
# 配置搜索的测试类名
python_classes = Test
# 配置搜索的测试方法名
python_functions = test
复制上面信息,在项目根目录创建pytest.ini,将复制的信息粘贴进去,然后执行用例。
注意:此时会报错:UnicodeDecodeError: 'gbk' codec can't decode
原因是我们在配置文件中使用了中文,解决方法有两种:
- 删除文件中的中文
- 修改iniconfig中的代码
点击倒数第二行的报错,在其前面一行代码的open()函数中增加 encoding='utf-8' 就能解决问题
解决报错问题后,就可以通过修改配置文件执行我们想要执行的用例了,比如,执行类名以A开头用例以b开头的用例