安装
pip install pytest
编写测试用例
文件名必须以”test_”开头或”_test”结尾
类的命名要以”Test”开头,T 必须大写
方法名必须要”test_”开头
pytest 兼容 unittest,以 unittest 的用例编写规范写的用例,pytest 都能够识别出来
def test_s1(): a = 3 b = 4 # 断言 assert a == b
pytest执行过程
- 查询当前目录下的 conftest.py 文件
- 查询当前目录下的 pytest.ini 文件
- 查询用例目录下的 conftest.py 文件
- 查询py文件是否有 初始化,销毁机制代码
- 查找用例并执行
断言
允许使用标准的 Python语法 用于验证测试中的 期望值 和 实际值(关键字:assert)
def test_s1(): a = 3 b = 4 # 断言 assert a == b def f(): return 3 def test_function(): assert f() == 4 def test_s1(): try: a = 0 b = [0, 1, 2] # 断言 assert a in b except Exception: # 抛出异常 raise
执行用例
参数
通过 终端 执行测试
不带参数
pytest:会自动读取 当前目录 和 子目录 的所有test_开头的.py文件,运行test_方法或者类
自动查找 yy 目录及子目录 下的测试文件
-
- -v:显示测试的详细参数信息
-
-
- pytest -v
-
-
- -s:显示测试执行的输出信息
-
-
- pytest -s
-
-
- -n:多线程运行 (前提安装了 pytest-xdist 插件)
-
-
- pytest -vs -n=几个线程
-
-
- -k:运行测试用例名称中包含某个字符串的测试用例
-
-
- pytest -k="用例名称包含的字符串1 or 用例名称包含的字符串2"
-
在代码中通过pytest.main()方法来执行测试
-
- pytest.main():不带参数 会自动查找 当前目录 和 子目录 的所有test_开头的.py文件,运行test_方法或者类
- 注意:一般在 项目 根目录 新建一个py文件来执行
可以传入不同的参数,让运行更加定制化,把参数放在列表中,每个参数就是列表中的一个元素
pytest.main(['../']) # 运行../目录和子目录下 所有(test_*.py 和 *_test.py) pytest.main (['../subpath1']) # 运行../subpath1 目录及子目录下用例 pytest.main (['../subpath1/test_module1.py']) # 运行指定文件 pytest.main (['../subpath1/test_module1.py::test_m1_1']) # 运行文件中的指定用例 pytest.main (['../subpath2/test_module2.py::TestM2::test_m2_02']) # 运行类中的指定用例 pytest.main (['-k','pp']) # 匹配包含pp的用例(匹配目录名、文件名、类名、用例名) pytest.main(['-k','spec','../subpath1/test_module1.py']) # 匹配test_module1.py文件下包含spec的用例 pytest.main(['-k','pp','../subpath2/test_module2.py::TestM2']) # 匹配TestM2类中包含pp的用例 pytest.main(['-vs']) # 显示测试的详细参数信息和执行的输出信息 pytest.main(['-vs', '-n=几个线程']) # 多线程运行,如 1,2,3。。。 pytest.main(['../','-vs','-k=用例名称包含的字符串1 or 用例名称包含的字符串2']) # 运行测试用例名称中包含某个字符串的测试用例
测试结果符号
符合 |
含义 |
. |