手把手教你学会接口自动化系列十八-引入测试框架pytest的conftest

本文介绍了如何在接口自动化测试中利用pytest的conftest.py文件进行代码优化,将公共部分如获取token的方法抽取为Fixture,减少重复代码。详细讲解了conftest.py的作用范围和Fixture的scope参数,以及如何组织项目结构来有效利用conftest.py。

我们发现写到现在,我们每次去执行的时候都要调用获取token的方法,并且在每一个类里都要执行,这块需要优化,把大家都需要的部分放在一个公共的里面,并且要慢慢的引入测试框架pytest。

pytest里面有个很好用的东西,就是conftest.py.

conftest.py文件是Pytest框架里面一个很重要的东西,它可以在这个文件里面编写Fixture函数,这个Fixture函数的作用,就相当于Unittest框架里面的

setup()前置函数和

teardown()后置函数,虽然Pytest框架也有

setup()前置函数和

teardown()后置函数,但是在实际工作中没必要写在测试用例文件中,直接写在

conftests.py里面就好了,Pytest框架会自动去找

conftest.py文件里面的东西,这样更灵活。

不同位置conftest.py文件的优先级

其作用范围是当前目录包括子目录里的测试模块。

比如在测试框架的根目录创建

conftest.py文件,文件中的Fixture的作用范围是所有测试模块。

比如在某个单独的测试文件夹里创建

conftest.py文件,文件中Fixture的作用范围,就仅局限于该测试文件夹里的测试模块。

该测试文件夹外的测试模块,或者该测试文件夹外的测试文件夹,是无法调用到这个conftest.py文件中的Fixture。

如果测试框架的根目录和子包中都有

# -*- coding: utf-8 -*- """ ============================ pytest 新手入门:手把手学 ============================ 版本:3.1 | 零基础友好版 """ # ===================== # 第一部分:pytest 基础入门 # ===================== """ 👉 为什么学习 pytest- 比 Python 自带的 unittest 更简单 - 强大的测试发现和执行能力 - 丰富的插件扩展功能 🔧 安装命令: pip install pytest """ # ===================== # 第二部分:核心概念详解 # ===================== import pytest # -------------------- # 1. 测试函数的基本结构 # -------------------- def test_addition(): """最简单的测试:验证 1+1=2""" assert 1 + 1 == 2 # assert 是关键,用于检查条件是否成立 """ 💡 零基础提示: 1. 测试文件必须以 test_ 开头(如 test_math.py) 2. 测试函数必须以 test_ 开头 3. 运行测试:在终端输入 pytest """ # -------------------- # 2. 夹具(fixture)是什么? # -------------------- """ 🔍 夹具(fixture)是 pytest 的核心概念: - 本质:测试前的准备工作(如创建数据、连接数据库) - 作用:避免在每个测试中重复相同的准备代码 - 优势:提高代码复用性,使测试更清晰简洁 想象场景:测试需要用户数据 👇 """ # 创建用户数据的夹具 @pytest.fixture def user_data(): # 夹具函数 """准备测试用的用户数据""" print("\n✅ 创建测试用户...") return {"name": "测试用户", "email": "test@example.com", "age": 30} def test_user_email(user_data): # 使用夹具 """检查邮箱格式是否正确""" assert "@" in user_data["email"] # 验证邮箱包含@符号 def test_user_age(user_data): # 同一个夹具复用 """检查用户年龄是否大于0""" assert user_data["age"] > 0 # 验证年龄是否有效 """ 💡 夹具使用说明: 1. @pytest.fixture 标记夹具函数 2. 测试函数通过参数名引入夹具 3. 每个使用夹具的测试会自动获得独立数据 """ # ===================== # 第三部分:实用测试技巧 # ===================== # -------------------- # 3. 参数化:一次测试多组数据 # -------------------- @pytest.mark.parametrize("num1, num2, expected", [ (3, 2, 5), # 3+2=5 (0, 0, 0), # 0+0=0 (-5, 10, 5), # -5+10=5 ]) def test_addition_variations(num1, num2, expected): """测试不同数字的加法""" assert num1 + num2 == expected """ 💡 参数化优点: 1. 避免写多个相似的测试函数 2. 清晰展示不同测试用例 3. 添加新测试只需增加一行数据 """ # -------------------- # 4. 测试异常情况 # -------------------- def divide(a, b): """除法函数""" if b == 0: raise ValueError("除数不能为零") return a / b def test_divide_by_zero(): """测试除数为0的异常情况""" with pytest.raises(ValueError) as error_info: divide(10, 0) assert "除数不能为零" in str(error_info.value) """ 💡 异常测试要点: 1. with pytest.raises() 捕获预期异常 2. 可检查异常类型和错误信息 """ # ===================== # 第四部分:真实项目测试示例 # ===================== # -------------------- # 5. 测试用户注册功能 # -------------------- class UserSystem: """模拟用户管理系统""" def __init__(self): self.users = [] def register_user(self, name, email): """用户注册方法""" if not email or "@" not in email: raise ValueError("邮箱格式错误") user = {"name": name, "email": email} self.users.append(user) return user # 创建系统夹具 @pytest.fixture def user_system(): """准备用户系统""" return UserSystem() # 测试正常注册 def test_register_success(user_system): """测试正常用户注册""" user = user_system.register_user("小明", "xiaoming@example.com") assert user["name"] == "小明" assert len(user_system.users) == 1 # 测试无效邮箱注册 def test_register_invalid_email(user_system): """测试邮箱格式错误""" with pytest.raises(ValueError): user_system.register_user("小红", "invalid-email") # ===================== # 第五部分:学习路线与练习 # ===================== """ 🎯 新手学习路线: 1. 基础测试 → 2. 夹具使用 → 3. 参数化测试 → 4. 异常测试 → 5. 项目实战 💻 推荐练习: 1. 测试字符串处理函数(大写转换、长度判断) 2. 测试简单的计算器类(加减乘除) 3. 测试文件读写功能(创建、写入、读取) """ # 运行测试 if __name__ == "__main__": # 最简单的运行方式 pytest.main(["-v"]) # -v 显示详细结果 你得把pytest讲全,什么点没讲,
09-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试老痞

你的支持,是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值