安装
前提:本地已配置完成python环境
pip install pytest
命名规则
测试文件名:test_*或者*_test
测试类名:Test*
测试方法名:test_*
测试类中不加__init__构造函数
pytest解释器命令行运行方式
pytest 文件名.py::类名/函数名::方法名
pytest test_a.py::TestA::Test_a
命令行运行参数
--help:查看帮助
-x:运行中遇到失败(fail/error)用例停止运行
--maxfail=num:失败num个用例时停止运行
-m:运行指定的标记用例。
可使用not等逻辑运算符匹配,是完全匹配,输入的标签名要和被测标签名完全一致。
pytest test_a.py -m 标签名
pytest test_a.py -m=标签名
pytest test_a.py -m "not 标签名"
-k:运行包含某个关键字的用例。
可使用not等逻辑运算符匹配,是部分匹配,输入的字符包含在被测用例名中即可。
pytest test_a.py -k 用例名
pytest test_a.py -k=用例名
pytest test_a.py -k "not 用例名"
-v:打印详细日志
-s:打印输出日志(通常-vs一起使用)
--collect-only:收集测试用例但不运行
--lf:只运行上次失败的用例
--lf:先运行上次失败的用例,再运行其他用例
python解释器命令行运行
python -m pytest 文件名.py::类名/函数名::方法名
python -m pytest test_a.py::TestA::Test_a
测试代码中添加main函数,python 文件名.py。
python test_a.py
if __name__ == '__main__':
# 运行当前目录下所有用例
pytest.main()
# 运行test_a.py下的TestA
pytest.main(['test_a.py::TestA', '-vs'])
# 运行test_a.py下标签为a的测试用例
pytest.main(['test_a.py', '-vs', '-m', 'a'])
setup和teardown用法
setup:测试前用来初始化,teardown:测试后还原测试环境。
setup、teardown 方法级
setup_method、teardown_methond 方法级
setup_class、teardown_class 类级
setup_function、teardown_function 函数级
setup_module、teardown_module 模块级
setup和teardown可以单独使用,不一定需要成对使用。
def setup_function():
print("开始测试")
class TestA:
def teardown(self):
print("结束测试")
pytest的配置文件
pytest的相关配置可以使用pytest.ini文件。在测试目录下创建pytest.ini文件。
windows系统,pytest.ini文件中不可以添加任何中文及中文符号,包括注释。
1.修改用例命名规则
需要把默认的test命名规则也添加上,否则test相关的命名无法识别。
[pytest]
python_files = check_* test_*
python_classes = Check* Test*
python_functions = check_* test_*
2.添加默认参数
可以把常用的命令直接添加到pytest.ini文件中,直接运行
[pytest]
addopts = -vs
3.添加自定义标签,可以防止warning错误
[pytest]
markers = str
int
float
4.指定/忽略执行目录
测试项目较大文件较多时,可以指定部分用例执行或者忽略部分用例不执行
[pytest]
testpaths = test_a
norecursedirs = test_b
3.配置日志格式
windows系统不可以加注释。
[pytest]
;日志开关 true false
log_cli = true
;日志级别
log_cli_level = info
;打印详细日志,相当于命令行加 -vs
addopts = --capture=no
;日志格式
log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
;日志时间格式
log_cli_date_format = %Y-%m-%d %H:%M:%S
;日志文件位置
log_file = ./log/test.log
;日志文件等级
log_file_level = info
;日志文件格式
log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
;日志文件日期格式
log_file_date_format = %Y-%m-%d %H:%M:%S
根据配置的日志级别,可以在代码中添加logging.info(),生成测试日志记录。
def test_a():
logging.info("这是测试用例test_a")
assert True
def test_b():
logging.info("这是测试用例test_b")
assert True
2023-03-08 23:03:50 [INFO] 这是测试用例test_a (test_1.py:43)
2023-03-08 23:03:50 [INFO] 这是测试用例test_b (test_1.py:46)