自动化测试之pytest
测试用例 pytest
用例规则
文件定义格式:
- 1、创建开头为 test__ 的 py 文件
- 2、创建 Test 开头的 类
- 3、创建用例方法时使用 test 开头的方法。(test_01_ add)
Assert 断言
- ==
- In
- 真假?即只有结果
发现规则:
遍历所有的目录,例外:venv、. 开头的目录
test_ 开头或者 _test 结尾
遍历所有 Test 开头的类
收集所有的 test_ 开头的函数或者方法
内容规则:
1、可调用的(函数、方法、类、对象) 2、名字 test_ 开头 3、没有参数(参数有另外含义) 测试函数/方法签名中不能有普通必填参数 参数只能用于 fixture 依赖注入 或 @pytest.mark.parametrize 参数化 ❌ 错误:def test_a(x):(x 无来源,会报错) ✅ 正确:def test_a(fixture_name):(fixture_name 已定义)或 @pytest.mark.parametrize 配合使用 4、没有返回值(默认为 None) pytest 忽略返回值,只关心断言(assert)是否通过 测试目的是验证行为,不是做计算并返回结果 ❌ 不推荐:def test_add(): return 1+1(无断言,永远通过,无意义) ✅ 正确:def test_add(): assert 1+1 == 2(用断言表达预期
结果显示
用例结果缩写
- . → passed → 通过
- F → failed → 失败(用例执行时报错)
- E → error → 出错(fixture 执行报错)
- s → skipped → 跳过
- X → xpassed → 预期外的通过(不符合预期)
- x → xfailed → 预期内的失败(符合预期)
批量使用脚本之 pytest.ini
- 先在项目根目录创建 scripts 包,
- 存放自动化脚本
- 创建文件 pytest.ini(第一行规定默认写为:[pytest])
[pytest] #必填# 添加命令行参数addopts = -s --alluredir report# allure报告生成# 文件搜索路径testpaths = ./scripts# 文件名称python_files = test*.py# 类名称python_classes = Test*# 方法名称python_functions = test*Allure报告生成
在 pytest 加上报告生成命令参数—并且安装了 pip install allure-pytest的库—>能生成 report 参数:—alluredir report —github 下载可视化 ui 框架—在项目文件夹下输入 allure serve report(该命令需要下载的 github 框架识别report 生成ui)
前后置处理操作
- 方法级别
- 类级别
- 模块级别(极少用)
使用 def setup/teardown_method/class(self/cls){ #逻辑}01-fixture机制应用
一、Fixture概念
Fixture是一种函数,用于为测试用例提供必要的前置条件或数据。相比传统setup/teardown方法,fixture更加灵活,能以更细粒度控制测试前置、后置操作。
二、基本用法
- 使用
@pytest.fixture装饰器定义fixture函数 yield前:前置操作;yield后:后置操作- 测试方法将fixture函数名作为形参传入调用
三、Fixture作用域 scope
function(默认):每个测试函数执行1次fixtureclass:每个测试类执行1次fixturemodule:每个测试模块执行1次fixturesession:整个测试会话仅执行1次fixture
示例代码
import pytest
@pytest.fixture(scope="class")def db_connection(): # 模拟数据库连接 print("开始连接数据库...") connection = "Database connection" yield connection # 模拟关闭数据库连接 print("关闭数据库连接...")
class TestDemo: def test_db_query(db_connection): print("执行数据库的查询...") # 断言数据库连接成功 assert db_connection is not None02-fixture中的conftest
一、conftest.py 介绍
conftest.py 是 pytest 专属特殊配置文件,用于定义全局/局部 fixture,实现多测试文件共享 fixture,消除重复代码。
二、使用场景
- 共享fixture
多个测试文件需要复用同一套前置/后置逻辑时,将fixture统一写在
conftest.py,无需各文件重复定义。 - 全局配置 可存放全局通用配置:日志初始化、全局环境变量、公共连接等。 测试用例直接以函数名作为形参调用,无需手动import。
三、存放目录规范
project/├─ conftest.py├─ test_module1.py└─ test_module2.py放置在项目根目录或对应测试文件均可自动识别内部fixture。
四、示例代码(conftest.py)
import pytest@pytest.fixture(scope="class")def db_connection(): # 模拟数据库连接 print("开始连接数据库...") connection = "Database connection" yield connection # 模拟关闭数据库连接 print("关闭数据库连接...")注解 pytest
自定义标识(自行注册)
作用:测试用例代码的筛选分类 方法:pytest.ini 中定义 makers 变量,
markers = api: 接口测试 web: UI测试 ut: 单元测试 login: 登录相关 pays: 支付相关2. 框架内置标记
框架内置标记:为用例增加特殊执行效果
与自定义标记区别
- 无需注册,可直接使用
- 不仅可以筛选,还可以增加特殊效果
- 不同的标记,增加不同的特殊效果
内置标记列表
skip:无条件跳过skipif:有条件跳过xfail:预期失败parametrize:参数化usefixtures:使用 fixtures Parametrize 参数特别说明: 要求设定参数+导入数据文件(如 csv)
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!