pytest 基础

一、pytest 的默认发现测试用例规则
1.模块名必须以 test_ 或 _test 开头或结尾;
2.测试类必须以 Test 开头,并且不能有 init 方法;
3.测试方法必须以 test_ 开头;

二、pytest 运行方式详解
1.命令行运行方式
运行命令:pytest
参数:
-v 输出更详细的信息;
-s 输入调试信息;
-n 多线程
--reruns 失败用例重跑
--html 生成简易报告

pytest -vs --reuns 2

2. 主函数运行方式
if __name__=='__main__':
pytest.main(['-vs'])

3. 通过 pytest.ini 文件运行(全局配置文件)
注意:
1). 命令行方式运行或主函数方式运行,均会自动读取配置文件 pytest.ini ;
2). pytest.ini 文件可以改变 pytest 默认的测试用例规则;
3). pytest.ini 文件一般放在项目的根目录下;
pytest.ini 文件内容如下:
[pytest]
#配置参数
addopt = -vs
#配置测试用例文件夹
testpaths =./testcases
#配置测试模块的规则
python_files = test_*.py
#配置测试用例的规则
python_classes = Test*
#配置测试方法的规则
python_functions = test_*
#配置接口测试的基础路径;base_url 就是一个函数级别的固件;多个基础路径需要封装
base_url = http://xx.xxx.xxx.xx/ (ip)
#给用例分组
maker =
smokes:冒烟测试
usermanage:用户管理

分组使用:
1. 在用例上面加上 @pytest.mark.smoke
2. 在执行时需要使用 -m 分组名
故:addopts = -vs -m "smoke or usermanage"

三、pytest 用例执行顺序
1. 默认:从上到下;
2. 可以通过如下标记改变测试执行顺序:@pytest.mark.run(order=1)

四、pytest 前后置条件(所有类、所有用例之前或之后)
类前: setup_class
类后: teardown_class
用例之前: setup
用例之后: teardown

希望在部分用例之前或之后执行,使用 Fixture
Fixture 装饰器完整结构如下:
@pytest.fixture(scope="作用域", params="数据驱动",autouse="自动执行",ids="参数别名",name="fixture别名")
1). scope:标记 fixture 作用域;
function(函数级别,手动或自动)、
class(类级别,一般自动)、
module(模块级别,一般自动)、
package/session(会话级别,一般自动)

2). autouse=True 自动执行

3). params 数据驱动
新建一个 fixture
@pytest.fixture(scope="module",autouse=False,params=method_read_yaml())
def execute_sql(request):
print("执行数据库查询")
yield request.param
print("关闭数据库连接")

这里的request 参数 和 request.param 值都是固定写法。
ps.来自网络: fixture(params=data) 装饰器的 data 是函数返回值 yield request.param,将带到下面调用为参数的函数中;

4). ids 参数别名

5). name 表示 fixture 的别名
当使用了 name 起别名后,原来的 fixture 的名称就失效了;

6). 一般情况下 fixture 会和 contenst.py 文件 一起使用;
注意:
1). contenst.py 是专门用于存放 fixture 的,是固定名称;
2). contenst.py 文件的方法,使用时不需要导包;

一个用例可以使用个固件(固件是 fixture),同级的按顺序执行;
def methodName(固件1, 固件2,固件3)

上一篇:自动化测试框架为什么选择 Pytest,而不是 Robot Framework?


下一篇:快速入门 Pytest 测试框架公开课 | 限时免费报名