自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 重构企业级conftest.py

三、第二步:统一读取配置(common/config.py)五、第四步:实战重构 conftest.py(重点)四、第三步:TenantFactory(非常关键)✅ 测试用例 零 if 判断、零 for 循环。✅ 支持 --tenant=A,B 指定租户。二、第一步:整理租户配置(你已经在做 ✔)✅ 自动区分 正常租户 / 异常租户。六、你的测试用例现在极度干净(重点)✅ 异常租户 自动 xfail。一、最终效果(你要达到的状态)✅ 租户来源统一(yaml)🚫 没有区分 A/B/C。A / B 正常执行。

2026-02-08 21:38:00 57

原创 企业级测试架构分层设计

common/ ← 基础能力层(auth / client / logger)fixtures/ ← pytest 组织层(conftest.py)clients/ ← 接口行为层(UserClient)④ fixtures / conftest.py —— pytest 的“大脑”① config 层 —— 数据只放这(你已经做对了)③ clients 层 —— 行为抽象(高级)二、企业测试架构的 5 层(记住这张图)

2026-02-08 21:33:30 610

原创 json.dumps(resp.request.body, ensure_ascii=False, indent=2),post的时候会报错

一句话结论(先救命)resp.request.body 在 requests.post(json=…) 时,通常是 bytes 或 None,不是 dict👉 你直接 json.dumps(),一定会炸一、为什么 post() 的时候会报错?你现在这一行👇实际上 resp.request.body 可能是:情况 类型 举例json= 方式 bytes b’{“username”:“admin”}’params= None GET 请求。

2026-02-03 10:30:55 330

原创 pytest_collection_modifyitems 是什么

👉 5️⃣ pytest_collection_modifyitems ← 就在这里!它是在 pytest「收集完所有测试用例之后、真正执行之前」的“最后一次改命机会”一、pytest_collection_modifyitems 是什么?config:pytest 全局配置(命令行参数、ini)2️⃣ 解析 pytest.ini / 命令行参数。3️⃣ 收集测试用例(test_*.py)4️⃣ 生成 items(每一条测试用例)pytest 的真实执行流程(非常重要)item.name 用例名(含参数)

2026-02-03 10:30:11 85

原创 monkeypatch.setattr,patch错路径

✅ 先给结论(你这段为什么没覆盖)你 patch 错“路径”了。你 patch 的是:但 get_tenant_id() 实际调用的不是这个对象。一、你现在的真实调用链(一定要看懂)1️⃣ common.auth 里的代码(简化)

2026-01-28 11:25:34 252

原创 深入 pytest_generate_tests 的设计哲学

pytest_generate_tests 的存在,是为了在测试收集阶段动态生成可枚举、可管理的测试用例,同时严格限制它只能做参数化注册,防止业务逻辑侵入收集阶段,从而保证测试系统的稳定性和可维护性。pytest_generate_tests 是 pytest 唯一允许在“收集阶段”动态生成测试用例的入口。fixture 在执行阶段才存在,而 pytest_generate_tests 在收集阶段执行。四、pytest_generate_tests 的“哲学定位”

2026-01-28 11:24:23 644

原创 失败用例治理 & 测试稳定性工程

三、第一类:预期失败(xfail)🔥(你马上用得上)❌ 领导只看“通过率”,但你知道哪些失败是正常失败。五、第二类:异常用例(pytest.raises)六、第三类:偶发失败(flaky / rerun)👉 今天你学的是:让 pytest “理解失败”❌ C 租户本来就应该失败,却把整轮测试搞红。四、把 xfail 自动化(不用每个用例写)失败是被设计出来的,不是“出了问题才失败”二、失败在企业里的 4 种类型(必须分清)XPASS 本该失败却通过(⚠️ 要关注)类型 是否允许失败 pytest 技术。

2026-01-26 21:08:31 344

原创 Mock 分层 + 可切换真实 / Mock 环境(企业级测试架构)

目标:本地 / CI → 全 Mock测试环境 → 半 Mock预发环境 → 全真实👉 不改测试代码,只改启动参数一、今天要解决的真实企业问题❌ 你现在的状态(大多数人卡在这)Mock 写在测试里monkeypatch 到处是想跑真实接口 → 得删代码想跑 Mock → 得改代码⚠️ 企业绝对不允许这样二、企业级正确做法(今天核心思想)✅ 原则(记住这 3 条)Mock 不写在 test 里Mock 不影响业务代码是否 Mock 由命令行 / 配置决定。

2026-01-26 21:07:45 395

原创 为什么 pytest 要禁止 fixture for 循环拆 test?

pytest 禁止 fixture 使用 for 循环拆 test,是为了保证测试用例在收集阶段是确定的,从而支持精准报告、独立执行、失败重跑和并行调度。三、如果允许 fixture 用 for 循环,会发生什么灾难?四、为什么 parametrize 是“唯一合法的拆分方式”测试用例是“可枚举、可报告、可独立、可复现”的。一次 test = 一次 fixture 依赖。二、pytest 的核心设计原则(非常重要)可枚举 / 可报告 / 可独立 / 可复现。五、为什么 fixture 被严格限制职责。

2026-01-23 12:09:23 278

原创 企业级 fixture 分层(从“能跑”到“可维护”)

❌ fixture 里不要 “for + yield + parametrize” 混着写。✅ 租户数据集中(TENANTS / TenantFactory)tenant_sessions # 每个租户登录一次。⚠ 有些 fixture “又决定租户、又登录、又生成用例”🔹 Step 5:把租户列表挂到 config 上。🔹 Step 2:会话层(每个租户只登录一次)🔹 Step 1:配置层(只负责“选租户”)一、先确认你的「起点状态」(你现在在哪)🔹 Step 3:用例层(参数化执行)

2026-01-23 12:07:39 420

原创 数据工厂(Test Data Factory) + 参数化 + 可维护测试设计

报错原因:params 在收集测试用例时执行,它必须是「可迭代对象」,不能是函数,更不能依赖 fixture;测试代码不再写死数据,测试只关心“规则”,不关心“具体值”🧩 第一步:把 tenants 当成“测试数据源”tenant_context:真正产出测试上下文。🧩 第三步:升级 fixture(企业常用)3️⃣ 根据 params 生成用例数量。结果:params 是 function。以后你加租户,只改 yaml,不改测试。🧪 第五步:测试不同场景(真正的价值)🧩 第二步:创建「租户数据工厂

2026-01-22 19:28:36 369

原创 Mock & 外部依赖隔离

三、Mock 第一招:monkeypatch(pytest 核心)🟢 Step 3:Mock 掉 get_tenant_id。七、unittest.mock.patch(你一定会遇到)二、你今天要掌握的 3 种 Mock(企业真实)一、为什么企业一定要 Mock(不是可选)六、Mock 异常 / 错误路径(🔥重点)四、Mock 真实业务:你现在的登录接口。五、Mock HTTP 请求(企业常用)八、什么时候不该 Mock(非常重要)🟢 Step 2:企业什么时候用这个。🟢 Step 1:Mock 抛

2026-01-22 19:25:40 281

原创 企业级稳定性 & CI 可落地阶段

目标:接口失败 自动重试(只重试“值得重试的失败”)接口 超时 & 慢接口监控flaky 用例治理测试失败 一次就能定位原因🧩 第 1 部分:接口失败自动重试(企业标准)❌ 错误做法(新手)👉 网络抖一下 = 用例挂 = CI 红✅ 正确做法:requests + retry1️⃣ 安装依赖2️⃣ 封装统一请求重试✔ 自动重试✔ 日志可追踪✔ 最终失败才抛异常🧩 第 2 部分:慢接口监控(真实企业必有)❓ 为什么要测“慢”功能对 ❌。

2026-01-21 19:37:23 394

原创 企业级多租户 + pytest 并发

目标:一套测试代码,支持多个租户;本地 / CI / 并发执行都不会串 token🧩 第 1 步:升级 TokenManager(多租户隔离)✔ 线程安全✔ 多租户隔离✔ 并发不串 token🧩 第 2 步:命令行支持 --tenant=A,B🧩 第 3 步:统一租户解析逻辑(核心)👉 行为:启动方式 执行租户pytest 全部🧩 第 4 步:fixture 动态多租户执行📌 别急,下面补全。

2026-01-21 19:36:50 268

原创 「token 自动刷新 + 自动重试登录」

🧪 第 4 步:写测试用例(无 token 代码!如何检测 token 失效(401 / code)🧩 第 2 步:封装企业级 BaseClient。🧩 第 1 步:实现一个 Token 管理器。🧪 第 3 步:写一个真实接口调用。token 过期后自动重新登录。❌ 不关心 token 过期。📌 所有业务接口都要用这个。测试代码不用管 token。❌ 没有 token 代码。多租户 token 支持。token 过期自动刷新。重试机制(retry)🎉 token 全自动。token 自动获取。

2026-01-20 11:28:20 227

原创 「只登录一次」自动复用 token(会极大提升效率)

🧩 第一步:创建 login fixture(只执行一次)会话级 fixture(scope=“session”)如果看到多次登录日志 = 失败 → 我帮你排查。不需要 import,pytest 自动发现。必须放在项目根目录或 tests 目录。🧪 第二步:测试 token 是否复用。文件名必须叫 conftest.py。在多个模块之间共享 token。在整套测试中只登录一次。

2026-01-20 11:27:46 161

原创 pytest fixture 进阶 + autouse 行为彻底讲清楚

scope 作用域:function / class / module / session。✅ 3)大概率你遇到的是“session级 fixture覆盖 function级效果”✅ 2)被 mark xfail / skip 的用例不会执行 fixture。整个 test_login.py 文件执行 → 没打印。✅ 1)fixture 是否在当前「收集范围内」🧪 练习三:fixture 依赖 fixture。conftest.py 中公共 fixture。fixture 依赖 fixture。

2026-01-19 19:59:07 335

原创 专业级多租户自动化测试(进阶)

🏢 第 5 步:把 token 封装为 client(企业级做法)🧩 第 1 步:给租户自动打标签(pytest.mark)新建 common/api_client.py。没有 token,没有 tenant-id。🧠 第 4 步:失败时打印“租户上下文”在 fixture 中返回 client。tenantName = 秦皇岛体育局。token 统一封装成 client。👉 修改 token fixture。🚀 第 3 步:只运行某个租户测试。🏁 第 2 步:多租户执行示例。在 conftes

2026-01-19 19:56:41 192

原创 pytest fixture(夹具) ——这是自动化测试里最核心的能力之一

scope=session 整个测试过程只登录一次 性能优先、全局 token。🧩 1. 参数化 fixture —— 不用复制粘贴 A/B/C。参数化 fixture(一个 fixture 覆盖多租户)🧪 5. fixture + 参数化联合使用(企业级写法)scope=module 每个文件登录一次 文件级用例共享。@pytest.fixture 表示这是 fixture。🔗 2. fixture 依赖 fixture(嵌套)fixture = 测试前准备 + 测试后清理。

2026-01-13 18:22:56 799

原创 pytest 里断言(assert)+ 失败信息打印 + 日志结合

目标:理解断言的正确写法断言失败如何看到清晰错误信息断言结合 logger学会封装 统一断言工具函数✔️ 第一步:复习 assert 的几种常用写法。

2026-01-13 18:22:27 323

原创 BaseClient 封装(企业级 HTTP 客户端封装)

🎯 第 4 步: replacing 你现在的 get/post。👉 代码里我已经帮你设计好了日志、异常、json 解析保护。👉 新建临时测试文件(不必放 tests 目录也行)✅ 第 2 步:填写完整代码(可直接运行)👉 但我们准备替换为 BaseClient。requests 企业级封装方式。后续业务 client 的基础。🧪 第 3 步:本地快速自测。统一管理 base_url。⬅️ 响应状态码: 200。🧭 第 1 步:创建文件。自动打印请求与响应日志。

2026-01-12 14:40:07 221

原创 pytest + Allure 企业级测试报告

🧪 第 2 步:在 pytest.ini 开启 allure。🧭 第 3 步:给你的测试加 allure 步骤(非常关键)attach → 附加信息(请求响应 / token)👉 面试可说“我用 allure 生成测试报告”✔。🧪 第 5 步:把你的真实项目接入 allure。👉 也可以用 zip 版(可后面我再详细带)1、生成可视化测试报告(HTML 页面)2)安装 Allure 命令行(必做)第 1 步:安装 Allure 依赖。🚀 第 4 步:运行测试并生成报告。分类标签(冒烟/租户/功能

2026-01-12 14:18:04 185

原创 Pytest 参数化 + 数据驱动进阶

pytest参数化

2026-01-09 13:20:08 128

原创 ThinkPad安装ALPS驱动后任然关闭触摸板失败的解决方法

我这里的方法是鼠标属性里没有ThinkPad选项的情况。1、首先需要去联想驱动官网下载触控板驱动,我选择的是ALPS2、安装,需要重启系统。3、打开控制面板-》硬件和声音-》鼠标,鼠标属性看是否有ThinkPad标志如果没有就继续往下操作。4、安装路径下找C:\Drivers\ALPSUltraNav\Setup.exe,双击这个可执行程序,安装驱动程序。5、重启电脑6、再次打开...

2019-11-08 13:30:57 2464

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除