pytest框架
pytest不能实现web/app/接口任意一种自动化测试,它是用来管理用例,执行用例,获得一份执行结果的工具
-
模块:pytest
-
基本使用方法
- 说明:
- 函数名需要以test开头
- 类名需要以Test开头,类中的方法需要以test开头,
- 使用assert进行断言
- 脚本名需要以test开头
-
作用于函数
import pytest
def test_1():
print("44444")
assert 1==1
def qtest_1():
print('不能被执行')
if __name__ == '__main__':
pytest.mian(['-q', __file__])
import pytest
class Test_add():
def test_1(self):
assert 1+1==2
if __name__ == '__main__':
pytest.mian(['-v', __file__])
- 用例执行
-
方式
- 脚本:
pytest.main([参数1,参数2,......]) - 命令行:用命令行执行,如果有配置文件,会默认走配置文件
pytest 参数 脚本 py.pytest 参数 脚本 python -m pytest 参数 脚本 -
参数
- -s, 将print语句的结果输出
- -v, 以详细信息显示每条用例执行结果
- -q, 以极简形式显示测试结果
- -k, 通过关键字匹配脚本,函数名,类名,方法名
- -x, 如果测试执行过程中有fail的用例,则测试立即停止
- –maxfail=n,当失败的用例达到执行的数量n时,停止测试
- -m, 对用例进行标记,执行指定的用例
- 跳过用例
@pytest.mark.skip(reason=xxxxx) ,无条件跳过指定用例@pytest.mark.skipif(条件,reason=xxxxx) ,有条件跳过指定用例 -
参数化
-
@pytest.mark.parametrize('参数1,参数2',值)
- 参数,与被装饰的函数行参相同
- 值,传递给参数的数据,通常为一个列表,如果需要给多个参数传数据可以将这些数据封包到元组或列表中
-
例1:1个参数 import pytest
@pytest.mark.parametrize('a',[1,2,3,4,5])
def test(a):
print(a)
-
例2:多个参数 import pytest
@pytest.mark.parametrize('a,b,c',[(1,2,3),(2,3,4),(4,5,6)])
def test(a,b,c):
assert a+b ==c
-
前置后置
- setup和teardown主要分为:模块级,类级,功能级,函数级。
- 函数级别setup()/teardown()
运行于测试方法的始末,即:运行一次测试函数会运行一次setup和teardown - 类级别setup_class()/ teardown_class()
运行于测试类的始末,即:在一个测试内只运行一次setup_class和teardown_class,不关心测试类内有多少个测试函数。 -
fixture修饰器 - 创建:@pytest.fixture([name,scope,params,autouse]) - name ,指定fixture名称,如果不指定则默认为被装饰的函数名 - scope , 指定fixture作用范围,module、class、function(默认)、session、package - params , 参数 - autouse, 设置为True,设置为True自动运行 - params, (list类型)提供参数数据,供调用标记方法的函数使用 - yield , yield在fixture中起到了唤起teardown的作用,在返回结束后,后续的代码仍可执行 - 全局fixture - 1、在项目下创建conftest.py文件,在改文件中实现fixture - 2、调用
|