赞
踩
1.pytest是单元测试测试框架(最小的测试单元,函数,方法)
2.可以和allure结合生成完美的测试报告,jenkens结合持续集成
3.pytest有很多强调的插件
pytest(自己)
pytest-html (生成简易的html报告)
pytest-xdist(多线程执行)
pytest-ordering(修改测试用例的执行顺序)
pytest-rerunfailures(失败用例重跑)
pytest-base-url(管理基础路径)
allure-pytest(生成allure报告)
都放在一个requirements.txt的文件中,一次性安装所有插件。(-r表示递归)
pip install -r requirements.txt
5.pytest单元测试框架主要用来做什么
(1)发现测试用例:可以从多个py文件中找到测试用例。
(2)执行测试用例
(3)判断测试结果
(4)生成测试报告
二。pytest默认测试用例的规则
1.模块名(py文件)必须test_开头或_test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试用例以test开头
三。pytest用例运行方式以及参数
1.命令模式运行
命令 pytest
参数:
-v 输出更加详细的测试用例的信息
-s 表示用例中的调试信息
-vs
-n 多线程运行
示例:pytest - vs -n 2
-reruns 失败用例重跑
示例:pytest -vs --reruns 2
-x 一旦出现一个用例失败则终止执行
示例:pytest -vs -x
--maxfail 出现指定次数的错误则终止测试
示例:pytest -vs --maxfail 2
--html 生成简易版本测试报告
示例:pytest -vs --html=./reports/report.html
-k 运行包含有指定字符串的测试用例(测试用例的名称必须很规范)
示例:pytest -vs -k "mashang or jiaoyu"
指定模块运行:pytest -vs ./testcase/test_weixin.py
指定文件夹运行:pytest -vs ./testcase/weixin
通过node id方式运行:
pytest -vs ./testcase/weixin/test_weixin.py::TestApi::test_02_add_flag
2.主函数模式运行
import pytest
if __name__ == '__main__'
pytest.main(['-vs']);
3.基于pytest.ini配置文件运行
(1)配置文件的名称固定,一般放在项目的根路径下
(2)作用是:可以改变默认的测试用例的规则
(3)不管是命令行的方式还是主函数的方式都会自动读取这个配置文件取运行
pytest.ini
[pytest]
#命令行参数
addopts = -vs --html=./report/report.html -m "smoke or user_manage"
#指定测试用例的路径
testpaths = ./testcases/weixin
#修改测试模块默认的规则
python_files = test_*.py
#指定参数类的默认规则
python_classes = Test*
#指定测试用例的默认规则
python_functions = test_*
markers =
smoke:冒烟测试
user_manage:用户管理用例
@pytest.mark.smoke
@pytest.mark.user_manage
def test_01():
pass
注意:一旦报编码错误,那么修改改成gb2312格式
必须在测试用例上面加标记
import pytest
if __name__ == '__main__'
pytest.main();
四。pytest测试用例的执行顺序
默认的执行顺序是从上往下执行
改变测试用例的执行顺序可以使用插件:pytest-ordering
@pytest.mark.run(order=1)
def test_01_tag():
pass
五.pytest跳过测试用例
1.无条件跳过:
@pytest.mark.skip(reason="这里写跳过的理由")
def test_01_add():
pass
2.有条件跳过
@pytest.mark.skipif(age<5,reason="小于5年工资经验跳过")
def test_01_add():
pass
六.pytest测试用例的前后置
只作用当前模块:
def setup_class():
print("在类的前面执行的操作")
def teardown():
print("在类后面执行的操作")
def setup():
print("用例执行前的操作")
def teardown():
print("用例执行之后的操作")
写在父类中可以作用所有的类
但存在耦合
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。