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),仅供参考

相关新闻

2026 AI测谎仪市场深度洞察:多模态测谎技术如何推动国防安全与执法场景落地?

2026 AI测谎仪市场深度洞察:多模态测谎技术如何推动国防安全与执法场景落地?

核心结论:全球AI测谎仪市场正处于技术迭代与场景验证并行的关键窗口期。多模态测谎技术从实验室走向国防安全、执法与医疗等实际场景的过程中,接触式检测与非接触式检测两条技术路线的分化日益显著。据恒州诚思调研统计,2025年全球AI测谎仪市…

2026/10/1 19:18:32 阅读更多 →
Chrome Beta、Dev、Canary 新特性解读:2026 年 AI 浏览器、双周更新与安全升级

Chrome Beta、Dev、Canary 新特性解读:2026 年 AI 浏览器、双周更新与安全升级

Google Chrome 并不是只有一个“稳定版”。为了让新功能更快、更安全地到达用户手中,Chrome 采用了多通道发布策略,包括 Stable 稳定版、Beta 测试版、Dev 开发者版和 Canary 金丝雀版。不同通道承担不同测试任务:Beta 用于提前验证即将上线的…

2026/10/1 20:03:03 阅读更多 →
2026年AI大模型推理平台完整测评:七家主流聚合服务对比分析

2026年AI大模型推理平台完整测评:七家主流聚合服务对比分析

2026年年中,主流AI大模型推理平台在模型覆盖度、定价、速度、合规四个维度上已经形成明显分工:有的偏模型广度,有的偏推理性能,国内平台则在访问稳定性与国产模型生态上有自身优势。开发者选型时可以按「要广度、要速度、还是要稳…

2026/10/1 20:03:08 阅读更多 →

最新新闻

软件工程毕设最新开题大全

软件工程毕设最新开题大全

0 选题推荐 - 汇总篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应用…

2026/10/2 20:49:14 阅读更多 →
Python语音检索

Python语音检索

这是一份音频检索代码,根据一段查询语音,在本地音频库中快速找出最相似的录音文件。python# -*- coding: utf-8 -*-"""voice_match.py —— 根据一段语音,在本地音频库中检索最相似的音频原理(与说话内容无关的通用…

2026/10/2 20:49:14 阅读更多 →
AI测试Agent 25个全套Skill,直接搭建完整自动化测试流水线

AI测试Agent 25个全套Skill,直接搭建完整自动化测试流水线

文章目录前言一、需求与用例设计,6 个1. req-to-user-story2. review-user-stories3. generator-testcase-xmind4. generator-testcase-excel5. review-testcase6. safe-testcase二、接口自动化,10 个7. api-schema-parser8. api-testdata-generator9. a…

2026/10/2 20:49:14 阅读更多 →
jev-ultrafast爆火!毫秒级AI浏览器自动化,云平台配置再也不用手动点

jev-ultrafast爆火!毫秒级AI浏览器自动化,云平台配置再也不用手动点

文章目录前言1. 它到底解决了什么痛点2. 拆开看看:两大核心部件2.1 一号选手:ServBay 本地 AI 网关2.2 二号选手:Browser-Use 拟人化操作3. 环境搭建,三步走3.1 第一步:装依赖3.2 第二步:接入 ServBay AI 网…

2026/10/2 20:49:14 阅读更多 →
vscode和Visual Studio里利用cuda核函数进行加速简单例子讲解

vscode和Visual Studio里利用cuda核函数进行加速简单例子讲解

要让 .cpp 调用 .cu&#xff0c;核心原则只有一条&#xff1a;.cu 交给 nvcc 编译&#xff0c;.cpp 交给 cl&#xff08;MSVC&#xff09;或 g 编译&#xff0c;两者通过「公共头文件 普通 C 函数」对接&#xff0c;最后由链接器拼成一个 exe。<<<>>> 这种 …

2026/10/2 20:49:14 阅读更多 →
符文世界:龙之荒野好友联机一键开服服务器教程

符文世界:龙之荒野好友联机一键开服服务器教程

《符文世界&#xff1a;龙之荒野》&#xff08;RuneScape: Dragonwilds&#xff09;是Jagex基于经典《RuneScape》世界观打造的开放世界生存RPG&#xff0c;1.0正式版已于2026年9月15日上线。玩家可独自或与最多3名好友&#xff08;共4人&#xff09;联机合作&#xff0c;探索烬…

2026/10/2 20:48:13 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事&#xff1a;从零开始做 AI 工程化&#xff0c;难的从来不是调模型、写提示词&#xff0c;而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码&#xff0c;也可能刚读完一些概念&#xff0c;但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用&#xff0c;几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过&#xff1a;模型代码写完了&#xff0c;数据管道跑通了&#xff0c;满心欢喜地按下训练启动脚本&#xff0c;结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”&#xff1a;为什么你总在找数据集&#xff0c;却总找不到真正能用的&#xff1f; 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里&#xff0c;出现频率排进前三。不是模型调不好&#xff0c;不是代码写不对&#xff0c;而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集&#xff1a;Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →