新闻详情

新闻详情

首页 / 资讯中心 / 详情

wecom-cli端到端测试实战:wiremock+mockito搭建双层e2e测试框架

发布时间:2026/9/30 15:58:32来源:尧图网络
wecom-cli端到端测试实战:wiremock+mockito搭建双层e2e测试框架
wecom-cli端到端测试实战wiremockmockito搭建双层e2e测试框架【免费下载链接】wecom-cli企业微信开放平台命令行工具 — 让人类和 AI Agent 都能在终端中操作企业微信项目地址: https://gitcode.com/gh_mirrors/we/wecom-cliwecom-cli 是企业微信开放平台命令行工具让人类和 AI Agent 都能在终端中操作企业微信。为了在改动代码时快速验证完整链路项目采用了一套wiremock mockito 双层的端到端e2e测试框架库级别用 wiremock 拦截 HTTP 请求进程级别用 mockito 驱动真实二进制。本文带你从 0 到 1 看懂这套框架的搭建思路新手也能快速上手添加自己的 e2e 用例。为什么要“双层”两种 mock 各管一半很多 CLI 项目的端到端测试要么全部启动真实二进制慢、易抖动要么只测内部函数覆盖不到入口逻辑。wecom-cli 的答案是把用例切成两层层级位置mock 库测什么Library-level库级crates/wecom/test-e2e/wiremock构造wecom::Client并调用Client::run(argv)覆盖 discovery、方法调用、分页、长任务、输出路由等全部核心行为Process-level进程级crates/wecom-cli/test-e2e/mockito用assert_cmd启动真实wecom-cli二进制只测main.rs入口独有逻辑配置解析、日志初始化、JSON 修复提示、旧凭据迁移、沙箱路径等取舍原则凡是能在库级测到的一律走库级——更快、更稳定、mock 控制更精确还不用编译二进制只有启动装配阶段的行为才交给进程级。目录结构desc.md 与 test.rs 紧挨着放框架没有搞复杂的 trait 抽象而是把“用例描述 测试代码”放在同一个目录里crates/wecom/test-e2e/ run.rs # 编译入口按 group 用 include! 引入各用例 helpers/ # 共享工具discovery mock 构造、断言 helpers cases/ group/NNN-slug/ desc.md # 用例描述前置条件 / 命令 / 断言 test.rs # 测试代码两个 crate 各有一套库级 进程级规范统一沉淀在 docs/e2e/FRAMEWORK.md。run.rs用include!把每个test.rs挂进 module 树好处是 改用例时描述和代码在同一目录不用来回跳 所有用例通过use super::*共享同一套 helpers 单用例可精确定位例如cargo test -p wecom --test e2e run::method_call。运行 e2e 测试套件4 条命令全覆盖# 库级全套件最常用 cargo test -p wecom --test e2e # 进程级全套件必须带 feature 才真正执行 cargo test -p wecom-cli --test e2e --features custom-endpoint # 只跑一个用例 cargo test -p wecom --test e2e run::method_call进程级用例依赖custom-endpointfeature子进程通过WECOM_CLI_BASE_URL环境变量拿到 mock server 地址未启用该 feature 时用例会编译为#[ignore]占位函数保证默认cargo test始终全绿。新增一个 e2e 用例只需三步框架把每个测试拆成Setup → Execute → Assert三阶段helper 函数按需组合即可。以库级最典型的 run/001-method-call 为例骨架是#[tokio::test] async fn run() { // 1. Setup起 mock server 挂载 discovery / 方法端点 let server wiremock::MockServer::start().await; setup_discovery_mocks(server).await; setup_method_mock(server, /department/list, api_response(json!({ ... }))).await; // 2. Execute像真实用户一样传入 argv let client build_test_client(server.uri()); let result client.run(hr_dept_list_argv([])) .output(wecom::CliRunOutput::new(buf.clone())).await; // 3. AssertCLI 输出 HTTP 命中次数 assert_cli_ok(result, buf, method call); } 三步流程写desc.md按 DESC_SPEC.md 规范写清 Transport、前置条件、命令、断言写test.rs按三阶段组合 helpers协议构造器在 discovery.rs进程级 mockito 版在 mock_setup.rs在run.rs加一段include!把用例挂进对应的 group module。避坑清单框架帮你踩过的 5 个坑常见坑框架的解法mock 端口冲突wiremock / mockito 均自动分配随机端口每个测试独立 server子进程连不上 mock同步 server ServerGuard绑定到_keep保证存活到子进程结束环境变量泄漏污染其他用例库级不直接set_var进程级经Command::env()天然隔离长任务轮询拖慢测试mock 响应里把polling_interval_ms设为 1 加速tempdir 提前被清理库级用leaked_tempdir()进程级把 tempdir 绑定到测试结束另外断言 helper 都自带“丰富诊断”比如 assert_cli_ok 失败时会打印退出码、渲染后的错误和完整 stdout遇到 HTTP 501 还会直接提示你检查 mock 的 matcher——调试体验非常友好。用例覆盖现状与延伸阅读目前库级共 50 个用例覆盖client、run、pagination、output、directive、error、schema、cache、headers等 10 个 group进程级覆盖startup、config、logging、repair、auth、sandbox_paths等入口行为。想继续深入推荐按这个顺序读 docs/e2e/FRAMEWORK.md框架总设计文档核心决策 helper 清单 映射规则 docs/e2e/DESC_SPEC.md / DESC_SPEC_HUMAN.md用例描述格式规范 docs/e2e/CODEGEN.mddesc.md → test.rs 的生成手册 crates/wecom/test-e2e/cases/ 与 crates/wecom-cli/test-e2e/cases/现成的用例范例库掌握这套“双层 mock 目录即用例”的 e2e 测试框架后你可以用同样的模式为任何 CLI 项目搭建可维护的端到端测试体系 【免费下载链接】wecom-cli企业微信开放平台命令行工具 — 让人类和 AI Agent 都能在终端中操作企业微信项目地址: https://gitcode.com/gh_mirrors/we/wecom-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

HarmonyOS 7 + Form Kit + UIAbility 实战:运营看板卡片的刷新策略、状态同步与点击回流【鸿蒙心迹】 2026/9/30 16:53:05

HarmonyOS 7 + Form Kit + UIAbility 实战:运营看板卡片的刷新策略、状态同步与点击回流【鸿蒙心迹】

这一篇我想聊的是看起来很轻、做起来却很容易失衡的一类功能:桌面卡片。很多人第一次做运营看板卡片,最先关注的是“怎么把一块卡片显示出来”。但真正把它做成一个能用、可信、可跳转、可同步的业务入口以后,你会发现难点根本不在“显示”&a…

阅读更多 →
OS3.【Linux】基本指令入门(2) 2026/9/30 16:52:50

OS3.【Linux】基本指令入门(2)

目录 1.root用户的家目录 2.非root用户的家目录 2.简单介绍一些基本指令 1.继续介绍cd 1.cd ~ 2.cd - 2.mkdir 1.mkdir 目录 创建一串目录 传统方法 ​编辑 补:查看树状结构的方法:tree指令 tree . 使用mkdir的-p选项来创建一串目录 3.touch 4.rmdir 5.rm r…

阅读更多 →
RedKnot如何给注意力头分门别类?70–90%算力节省背后的Head分类策略详解 2026/9/30 16:52:34

RedKnot如何给注意力头分门别类?70–90%算力节省背后的Head分类策略详解

RedKnot如何给注意力头分门别类?70–90%算力节省背后的Head分类策略详解 【免费下载链接】RedKnot Efficient Long-Context LLM Serving with Head-Aware KV Reuse and SegPagedAttention 项目地址: https://gitcode.com/gh_mirrors/re/RedKnot &#x1f426…

阅读更多 →
圣禾堂在线是什么?电子元器件采购平台入门指南 2026/9/30 16:52:34

圣禾堂在线是什么?电子元器件采购平台入门指南

一句话答案:圣禾堂在线是一家总部位于深圳的电子元器件采购平台,2011年成立,专注分立器件、主控芯片、被动器件、连接器、国产器件五大品类,提供现货供应、BOM配单、国产替代、品质检测一站式服务。一、它和普通的电子元器件商城有…

阅读更多 →
189PPT华为组织效能实战,从选好路到用好人:解密“五横四纵”打造企业增长飞轮的方法论 2026/9/30 16:52:26

189PPT华为组织效能实战,从选好路到用好人:解密“五横四纵”打造企业增长飞轮的方法论

很多企业一谈组织效能,第一反应就是裁人、控编、压成本、抓绩效。但真正的问题,往往不在人少不少,也不在人忙不忙。而是战略、组织、流程、绩效、激励和人才没有形成一套互相咬合的系统。战略定了,组织没变。 组织调了&#xff0c…

阅读更多 →
靶机打靶实战:ME AND MY GIRLFRIEND 渗透测试全流程 2026/9/30 16:52:17

靶机打靶实战:ME AND MY GIRLFRIEND 渗透测试全流程

一、靶机简介与学习目标本次实战靶机为 ME AND MY GIRLFRIEND,通过完整打靶流程,可以系统掌握以下核心技能:了解 nmap 扫描以及端口的概念。了解 SSH 服务以及相关工具的使用。了解 sudo 权限,并掌握 sudo 提权。二、主机发现在未…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉