安装
pip install pytest
运行
pytest,main(["-s","-v","test.py"])
命名规则
- 函数 :以
test
开头; - 类 : 以
Test
开头; - 方法:以
test
开头;
setup/teardown
模块级
a.setup_module
b.teardown_module
函数级
a.setup_function
b.teardown_function
类级
a.setup_class
b.teardown_class
类中方法级
a.setup_method
b.teardown_method
配置文件
pytest.ini
:文件名固定
注意:
a. 文件名:必须指定成pytest.ini
,不能使用其他名称;
b. 配置文件中不能包含中文;
c. 位置:必须存放在项目根目录,否则不生效;
[pytest]
addopts = -s -v
testpaths = ./scripts
python_files = test_*.py
python_classes = Test*
python_functions = test_*
跳过
-
pytest.mark.skip(reason)
无条件跳过,,reason是跳过的原因; -
pytest.mark.skip(condition,reason)
有条件跳过,跳过的条件就是condition,如果满足才会做跳过操作,如果不满足就不会跳过;同样,reason仍旧是跳过的原因;
标记
如果一个用例我们认为它会执行失败,那就预期它失败,并希望对该用例进行标记;
- 预期失败,执行失败,结果:
XFAILED
; - 预期失败,执行成功,结果:
XPASS
; - 预期失败,执行成功,这样是不符合逻辑的,要把这种牛永利判定为执行失败,需要在配置文件中添加:
xfail_strict=true
;
参数化
import pytest
l = [1, 2, 3, 4]
@pytest.mark.parametrize("name" , l)
def test_case(name):
print(name)
l1 = [1, 2, 3, 4]
l2 = ["a", "b", "c", "d"]
@pytest.mark.parametrize("key, name" , list(l1, l2))
def test_case(key, name):
print(key, name)
固件
测试夹具,在测试用例执行之前或之后执行的的一些方法;
功能类似于setup ,teardown ,相对更灵活;
import pytest
@pytest.fixture()
def login():
print("login")
#调用方式1: 装饰器
@login
def test_1 ():
print("test 1")
#调用方式2: 传参
def test_1 (login):
print("test 1")
#调用方式3:
在@pytest.fixture()中设置属性@pytest.fixture(autouse = True)
在用例中就不需要使用上述两种方式引入fixture了,fixture属性也可以设置范围session:
["session","module","class","function",]
报告
allure
安装
- 依赖java,需要先安装Java环境;
- allure插件,并设置环境变量;
- allure包 ,
pip install allure-pytest
;
工作原理
- 配置生成结果数据存放路径:
addopts = -v -s --html=report/report.html --aluredir ./report/result
- 读取json文件生成allure报告
allure generate json数据所在路径 -o 测试报告保存路径 --clean
- 报告查看
- 依赖http服务器,可以借助pycharm;
- allure open
- allure server
其他用法
- title
- description
- severity
- feature、story
- dynamic
应用场景
接口自动化的框架开发
- 涉及的知识点
- pytest
- allure
- 参数化
- 配置文件
- Excel
- Yaml
- Conf
- 日志操作
- 文件操作
- 邮件
- 终端执行命令
实现的功能
- 各功能拆分为多个目录
- 使用参数化读取Excel文件
- 发请求
- 获取请求结果
- 校验、断言
- 生成测试报告并打包发送邮件