自动化测试之pytest

1200 字
6 分钟
自动化测试之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更加灵活,能以更细粒度控制测试前置、后置操作。

二、基本用法#

  1. 使用 @pytest.fixture 装饰器定义fixture函数
  2. yield 前:前置操作;yield 后:后置操作
  3. 测试方法将fixture函数名作为形参传入调用

三、Fixture作用域 scope#

  • function(默认):每个测试函数执行1次fixture
  • class:每个测试类执行1次fixture
  • module:每个测试模块执行1次fixture
  • session:整个测试会话仅执行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 None

02-fixture中的conftest#

一、conftest.py 介绍#

conftest.py 是 pytest 专属特殊配置文件,用于定义全局/局部 fixture,实现多测试文件共享 fixture,消除重复代码。

二、使用场景#

  1. 共享fixture 多个测试文件需要复用同一套前置/后置逻辑时,将fixture统一写在conftest.py,无需各文件重复定义。
  2. 全局配置 可存放全局通用配置:日志初始化、全局环境变量、公共连接等。 测试用例直接以函数名作为形参调用,无需手动import。

三、存放目录规范#

project/
├─ conftest.py
├─ test_module1.py
└─ test_module2.py

放置在项目根目录或对应测试文件均可自动识别内部fixture。

四、示例代码(conftest.py)#

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. 框架内置标记#

框架内置标记:为用例增加特殊执行效果

与自定义标记区别#

  1. 无需注册,可直接使用
  2. 不仅可以筛选,还可以增加特殊效果
  3. 不同的标记,增加不同的特殊效果
内置标记列表#
  • skip:无条件跳过
  • skipif:有条件跳过
  • xfail:预期失败
  • parametrize:参数化
  • usefixtures:使用 fixtures Parametrize 参数特别说明: 要求设定参数+导入数据文件(如 csv)

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
自动化测试之pytest
https://firefly.cuteleaf.cn/posts/编程学习/软件测试/自动化测试之pytest/
作者
伊月酱
发布于
2026-06-29
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Firefly
Hello, I'm Firefly.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
28
分类
10
标签
49
总字数
28,946
运行时长
0
最后活动
0 天前

文章目录