十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TestHub本地部署实践:AI生成用例与回归测试效率提升指南

TestHub本地部署实践:AI生成用例与回归测试效率提升指南 这几年带测试团队最怕听到的话不是线上出Bug了而是回归还有2000条用例没跑完。用例越写越多、回归越跑越慢功能一迭代光用例评审和结果整理就能吃掉一个下午。直到我把 TestHub 部署进本地环境把测试用例的生成、组织、执行和报告全部交给它之后团队KPI反而在一个季度里稳住了。这篇就聊聊我的完整实践过程从为什么选它到怎么部署再到怎么用它把用例质量和回归效率拉起来。1. 为什么我差点被回归测试逼到转行测试人的日常困局1.1 用例写不完的真实成本我团队的业务变化快平均两周一个版本每次需求改动牵一发动全身。早期大家靠 Excel 和 Wiki 维护用例需求一多人力就全耗在重复劳动上。新功能要写用例老功能回归要翻用例提测前还要拉人补充边界场景。测试同学晚上十点还在对话框里问开发这里如果传空字符串会怎么样开发回一句你自己试下我忘了。这种工作方式的问题不是单纯累而是用例的产出速度跟不上需求的增长速度。一个普通功能点等价类、边界值、异常流、权限流粗略算下来至少 20 条用例稍微复杂一点的上百条。每周迭代至少需要新增 200 条用例但一个人一天能专注写有效用例的时间最多也就三四个小时。再加上很多用例写得含糊执行的人不知道预期结果是什么用例库变成了僵尸库没人敢删也没人信。后来我统计了一下团队三个月的工作记录发现大家花在写用例上的时间占了总测试投入的 42%而花在分析需求和设计测试策略上的时间不到 15%。这个比例明显是反了。一个成熟的测试团队应该把更多精力放在高风险路径的探索上而不是像打字员一样把需求描述翻译成 Step by Step。1.2 回归跑不动的三大瓶颈等到用例库膨胀到几千条的时候回归就会从质量保障变成质量表演。第一个瓶颈是用例选择靠感觉。大多数团队做回归就是把全量用例跑一遍能跑完就觉得自己很负责。但全量回归面对的真实问题是功能 A 只改了个按钮文案可能根本不影响功能 B 的深链路但大家的习惯是反正跑起来也不费脑子结果一跑就是三个小时然后发现 95% 的用例都在测老逻辑真正应该重点回归的新改动反而没覆盖够。第二个瓶颈是执行结果不可信。手工回归时十个人有十种操作习惯。有人没看清前置条件就直接点按钮有人跳过数据准备步骤有人当用例标着预期结果是系统提示成功时看到页面弹了提示框就勾通过完全不看提示内容是什么。这种回归跑完出来的结果数据看着挺整齐但根本经不起追问。只要问一句这条用例昨天挂了今天为什么又过了现场就冷场。第三个瓶颈是环境与数据的不稳定。回归用例里至少三成以上要依赖数据库中的存量数据而测试环境的数据经常被开发清理或灌新数据。今天能复现的场景明天复现不了用例写得再好环境一换全部白搭。我记得有一版我们花了两个晚上修回归脚本结果第三天开发重建了个表全盘崩溃。这种挫败感比用例过多更让人心累。这些困局归结起来就一句话我们缺的不是更努力的人而是一套能把用例生成、组织、执行、报表串起来的工具链。TestHub 进入我的视野不是因为它的某个单点功能多惊艳而是它正好把这条链上的几个环节做成了闭环。2. TestHub 解决的不只是速度问题先理解它的设计逻辑2.1 从测试用例管理到执行链路TestHub 在中间扮演什么第一次接触到 TestHub是在一个测试同行群里看到有人分享部署截图顺手研究了一下发现它做的事情跟我现在的问题高度匹配。它可以简单理解成测试用例中台 回归执行调度器 测试报告生成器的结合体。它不像 pytest、JMeter 那样关注单条用例的脚本怎么写而是更关心用例从需求描述到有人负责执行之间的所有管理工作。具体来说TestHub 有四个核心模块用例中心负责用例的录入、模板化管理、评审、版本历史。计划中心创建回归计划筛选用例集安排执行人和执行时间。执行中心对接手工执行记录和自动化执行结果统一收集通过率、失败原因。报表中心自动生成功能测试、回归测试、接口测试的统计报告并且能从多维度分析缺陷分布。这意味着我可以把用例写不完的问题拆成两部分解决一部分靠 AI 生成快速产出初稿一部分靠模板规范统一用例格式。而回归跑不动的问题则分成两部分用例筛选交给计划中心做影响面分析执行过程中的数据收集交给执行中心统一汇总再也不用人工从 Excel 里复制粘贴统计数据。2.2 为什么选择本地部署数据安全与团队协作的平衡TestHub 可以在 SaaS 平台用但我还是选择了本地部署。原因很现实我们公司的测试用例里有不少业务敏感字段客户名、定价策略、活动规则都在里面完全放云上心里不踏实。另外本地部署还有一个实际好处——可以把 TestHub 的数据库和我们内部的需求管理系统、缺陷系统放在同一个内网环境做数据流转会非常方便。当然部署到本地意味着我们要自己负责环境维护、备份和升级。对一个小团队来说这其实没有想象中那么难因为 TestHub 提供了比较完善的部署脚本和 Docker 支持我们真正花的部署时间不到半天。之后我用了接近三个月整体运行很稳定。2.3 我选型前后的对比TestHub vs 传统Excel/开源平台我们团队之前也用过几个开源测试用例管理平台比如 TestRail 的类似物、开源版 QACenter它们的侧重点各有不同。我根据团队现状做过一个选型对比结论比较明确对比维度Excel 手动执行轻量开源用例管理TestHub本地部署用例生成效率靠人工逐条写提供模板但还是人工AI 生成 人工审核回归用例筛选靠测试主管拍脑袋只能按标签/模块选支持按需求变更范围选更贴近迭代执行结果收集手工汇总滞后 1-2 天半自动需额外脚本执行时记录实时汇总报告生成手工排 Excel耗时固定报表导出繁琐自动生成多维报表数据安全本地但分散数据库自管理本地权限可控学习成本无低中等需要团队培训对比之后我更确定TestHub 的定位不是更多功能的 Excel而是一个能覆盖用例全生命周期的管理平台。尤其是 AI 生成和回归筛选这两块正是我们最缺的。后面我选了最新稳定版在 Ubuntu 20.04 服务器上做了本地部署。3. 本地安装部署 TestHub 的全过程照着做就能跑通3.1 部署前准备硬件要求、系统环境与依赖我是个典型的不爱看文档就上手的人但 TestHub 部署这事我学乖了先把环境梳理清楚再动手。硬件方面我们给的是中等配置的虚拟机4 核 CPU、8GB 内存、200GB 磁盘。如果你团队规模在 20 人以内这个配置完全够用。如果超过 30 人同时在线建议 8 核 16GB 起步因为执行中心在跑回归时会有比较多的 IO 轮询。系统方面我选的是 Ubuntu 20.04 LTS原因主要是稳定、资料多。安装前需要准备Java 17TestHub 后端是用 Spring Boot 写的本地部署必须要有 JRE我直接装了 OpenJDKDocker 和 Docker Compose这是最省心的部署方式依赖全在容器里MySQL 8.0或者兼容 MySQL 的数据库比如我们用的 MariaDB 10.5也可以Redis用于缓存和任务队列TestHub 的计划调度依赖它注意不要像我第一次那样装了个 Java 11启动直接报UnsupportedClassVersionError后来才知道 TestHub 2.x 依赖 Java 17换了之后就很顺畅。3.2 下载与安装一步步走到服务起来我采用的是 Docker Compose 部署方式整体步骤可以拆成以下几步。确认服务端版本下载安装包到/opt/testhub目录解压后能看到docker-compose.yml、application.yml、init.sql等文件。如果你是离线环境下内网部署记得手动先把镜像文件导入 Docker命令是docker load -i testhub-images.tar。修改环境变量配置。在docker-compose.yml里需要留意 MySQL 的库名、账号和密码。我一般改成一个强密码同时把 Redis 的密码也设置好。唯一要小心的是不要在配置文件里写纯明文密码还提交到 Git最好用环境变量的方式注入。启动 MySQL 和 Redis 服务。docker-compose up -d mysql redis等一两分钟让数据库初始化完成然后执行初始化脚本导入表结构。因为 TestHub 首次启动会检查数据库连接如果库不存在数据库表会报错所以要先初始化。启动核心服务。docker-compose up -d看到服务全部变成 healthy 状态后就可以访问 Web 页面了。默认端口是 8080比如http://服务器IP:8080。第一次访问会引导你设置管理员账号。下面是我调整后的docker-compose.yml简化片段你可以参考注意修改对应密码。version: 3.8 services: mysql: image: mysql:8.0 container_name: testhub-mysql environment: MYSQL_DATABASE: testhub MYSQL_USER: testhub MYSQL_PASSWORD: TestHub_Change_Me MYSQL_ROOT_PASSWORD: root_Change_Me ports: - 3306:3306 volumes: - ./mysql-data:/var/lib/mysql networks: - testhub-net redis: image: redis:7-alpine container_name: testhub-redis command: redis-server --requirepass Redis_Change_Me ports: - 6379:6379 networks: - testhub-net app: image: testhub/server:latest container_name: testhub-app depends_on: - mysql - redis environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/testhub?useUnicodetruecharacterEncodingutf8 SPRING_DATASOURCE_USERNAME: testhub SPRING_DATASOURCE_PASSWORD: TestHub_Change_Me SPRING_REDIS_HOST: redis SPRING_REDIS_PASSWORD: Redis_Change_Me ports: - 8080:8080 networks: - testhub-net networks: testhub-net: driver: bridge启动过程中踩过的坑是端口占用。之前我们服务器上 8080 端口已经跑了一个监控服务跟 TestHub 冲突后来我在配置文件里把映射端口改成了 18080然后通过 Nginx 反代到内网域名这样就完事。3.3 初始化配置创建项目、成员与权限服务起来之后先别急着发用例先把基础数据配好。管理员登录后按照下面的顺序操作创建测试项目。我们按产品线分了三个项目支付核心、用户增长、活动营销。每个项目里再按模块分目录比如用户增长下面有注册、登录、邀请、奖品发放等。添加工单/需求来源。TestHub 支持对接外部需求系统也支持手动创建需求条目。我习惯把每个迭代的 Jira 工单同步成需求条目这样后续生成用例时可以绑定需求编号。设置成员角色和权限。最常用的角色是管理员、测试负责人、测试执行人。测试负责人可以审核用例、创建执行计划执行人只能执行分配给自己的任务。这个权限划分很重要不然很容易出现有人误删测试计划。配置消息通知。TestHub 支持把用例评审、执行结果通知推送到邮件和 IM建议打开邮件通知尤其是执行失败时的通知。这样可以避免没有人及时跟进失败用例。初始化配置不复杂但值得认真对待。我见过一个团队没有先建项目直接在默认项目里创建了所有模块的用例结果后面做权限控制时一团乱花了两天时间才把数据理清。磨刀不误砍柴工这一步别省。4. 把用例交给 TestHub从需求分析到 AI 自动生成测试用例4.1 如何组织需求信息让 TestHub 的生成质量更高部署只是开始真正让团队工作方式发生改变的是 TestHub 的用例生成能力。这里先提醒一下很多人以为 AI 生成用例就是输入帮我为登录功能写用例然后期待全部完成。真实的使用经验是生成质量很大程度上取决于你输入需求的颗粒度和信息完整度。我们目前的实践方式是把需求拆成用户故事 验收标准 补充约束三段结构。比如一个邀请有礼需求我不会只写用户邀请好友得奖励而是会在需求条目里维护这些信息用户故事作为注册用户我希望通过邀请链接/海报邀请好友注册当好友完成首笔支付后我可以获得对应的优惠券奖励。验收标准新用户通过邀请链接注册后邀请人、被邀请人关系绑定好友在 7 天内完成首笔支付邀请人才能获得奖励奖励类型为满减券面额 15 元有效期 30 天同一好友只能绑定一次邀请关系。补充约束支付金额下限 10 元邀请链接通过微信打开必须是授权可识别每天单个用户最多发出 50 张邀请海报。把这份信息放到 TestHub 的生成窗口里AI 生成的初始用例基本能覆盖主流程、异常流和边界值。如果只给一句邀请有礼功能生成的用例就非常泛一堆检查按钮是否存在的废话没有实际价值。这里的关键是把需求当成给 AI 的产品需求文档而不是一句闲聊。4.2 从自然语言描述到测试用例AI 生成的实操步骤与模板TestHub 生成用例的入口在用例中心 - 一键生成。实际操作流程如下在左侧选择目标模块目录比如用户增长/邀请有礼。点击从需求生成用例弹窗里会自动带入已关联的需求条目。也可以手动粘贴一段需求描述。选择用例类型我们一般选功能测试用例必要时还会勾选接口测试用例。选择生成策略比如详细模式会生成更多步骤推荐选中级避免用例过长。点击生成等待十几秒系统会返回一批候选用例按场景分组展示。这批用例的格式会自动套用我们配置好的模板包括用例编号、前置条件、测试步骤、预期结果、优先级、用例类型等。因为 TestHub 内置了等价类划分、边界值分析、错误推测等基础策略它生成的用例在结构上比我以前手工写的更整齐。它会把正确手机号正常登录和错误手机号提示格式错误这类等价类场景放到相邻位置审阅起来非常舒服。如果你希望生成结果更贴合业务可以在需求描述里加入关键字段的数据样例。比如接口测试生成里如果描述中包含请求参数 userId123mobile138xxxx邀请码INVITE2024生成的用例步骤会具体很多甚至能直接导出成接口测试执行的校验点。下面是我们用的一个生成模板你在 TestHub 里自定义生成模板时可以直接抄请基于以下需求描述生成功能测试用例要求 1. 覆盖主流程、备选流程、异常流程 2. 对每个输入字段进行等价类和边界值分析 3. 包含前后端交互相关的权限和状态约束校验 4. 用例结构为前置条件 / 测试步骤 / 预期结果 5. 按业务场景分组并标记用例优先级高/中/低。 需求描述 {这里粘贴整理好的需求文本}4.3 人工审核与用例优化官方生成不是一锤子买卖AI 生成用例最大的价值是把一个小时的工作压缩到十分钟但前提是你得花几分钟做审核。我们团队从自己写用例转成审用例后一开始大家不习惯总觉得生成的内容不放心。后来实际操作得多了反而总结出一套审核清单主流程是否串起来生成出来的用例往往是离散场景如果需求跨多个页面需要把关键用户旅程串成一条完整用例。预期结果是否可观测AI 有时候会写页面显示正确这种预期等于没有要改成页面提示‘邀请成功奖励将在好友支付后发放’且按钮变为不可点击状态。数据和权限是否明确检查是否指定了具体测试数据来源是否覆盖了无权限访问、数据不存在、数据重复等状态。在实际迭代里我们审核通过率大概是 70%剩下 30% 会手动修改或补充。最典型的补充是数据库层面的约束校验比如邀请奖励只能发放一次这类逻辑AI 不一定能从需求描述中准确推断需要测试人员结合接口文档补充用例。但即便算上人工修改时间整体工作量也比纯手写减少了至少五成。我还让团队把高频场景沉淀成生成 Prompt 模板。比如支付类需求我们会把支付金额边界、支付密码错误次数锁卡、风控拦截、取消支付、超时关闭等常见点写进模板再用 TestHub 的 AI 生成时选择对应模板出来的用例质量会明显高一截。5. 回归跑不动的破局点用 TestHub 做好回归管理和自动化执行5.1 回归用例的筛选策略真正能落地的做法以前我们做回归就是把用例库按模块全选然后人肉跑。后来用 TestHub 后我们把回归计划拆成了三层冒烟回归层每次提测后必跑的用例数量限制在 30 条以内只覆盖主链路和核心业务闭环要求 10 分钟内能完成。变更影响层根据本次迭代改动的模块和接口由 TestHub 的依赖关系分析自动关联相关用例。这个层级的用例量通常在 200-400 条我们要求半天内跑完。全量稳定层每个版本验收前执行一次覆盖所有模块数量在 1500 条左右结合自动化脚本执行。以前这种策略靠人来做根本做不细因为你很难记住每个模块之间的接口依赖。TestHub 在需求条目标注了关联用例之后可以基于需求模块的变更范围来过滤回归用例。比如这次迭代改的是邀请有礼涉及订单服务和优惠券服务我可以在 TestHub 里勾选这两个服务模块它会自动拉出所有标记了这些模块的用例再按优先级排序把高优先级的放在计划前面执行。这样做的好处是我们不再因为怕漏测而全量回归而是基于变化的范围做精确回归。上线后没有出现一次因为回归范围没覆盖导致的事故整个团队的信心也上来了。5.2 执行计划和结果跟踪让回归变成闭环过去执行回归最痛苦的是每天下班前开个短会各自报进度然后测试负责人再整理进展表。现在 TestHub 的计划中心帮我把这个流程线上化了。步骤很简单在计划中心新建回归计划选择本次迭代的里程碑从用例库中筛选用例分配给执行人设置计划开始和结束时间。执行人会在任务列表里收到待办点进去就能看到用例详情。每跑完一条选择通过/失败/阻塞注明实际结果和 Bug 关联。整个过程所有状态同步更新不再需要你们跑完了吗这种无效沟通。如果一条用例执行失败还能一键在 TestHub 里创建缺陷单关联到具体用例和需求。这样缺陷的上下文信息就完整了开发不再需要反复问你怎么操作的你用的什么数据。另外要提醒的是执行过程中一定要记录实际测试数据。比如支付类用例建议把订单号、金额、支付方式、返回码都写进执行附注里。这些细节平时觉得烦但一旦出了问题就是最重要的排查线索。我们团队后来复盘过几次线上问题都是靠执行附注里留下的数据快速定位到环境差异导致的失败。5.3 如何把 TestHub 和现有自动化框架如 pytest打通光靠手工回归效率还是一个瓶颈。TestHub 本身支持通过 API 接收外部自动化测试结果我们团队把已有的 pytest 用例集和 TestHub 做了打通。具体做法是在测试用例中维护一个case_id字段对应 TestHub 里的用例编号。在 pytest 的 conftest.py 里写一个钩子在测试完成后把测试结果通过 TestHub 的 OpenAPI 上报。伪代码如下import requests def report_result(case_id, status, duration, message): url http://testhub-server:8080/openapi/v1/cases/{}/result.format(case_id) payload { status: status, # passed / failed / blocked duration: duration, message: message, } requests.post(url, jsonpayload, headers{Authorization: Bearer YOUR_TOKEN}) def pytest_runtest_makereport(item, call): # 在测试结束后获取 case_id 并上报 case_id item.get_closest_marker(testhub_case).args[0] if call.when call and call.excinfo is not None: report_result(case_id, failed, call.duration, str(call.excinfo.value)) elif call.when call: report_result(case_id, passed, call.duration, )打通后我们跑自动化用例时TestHub 上能实时看到执行结果和失败信息。这样手工执行和自动化执行就合并到一个报表里回归结果跟写代码一样有据可查。你也可以用它提供的 API 触发执行计划把 TestHub 接进 Jenkins 流水线每次代码提交后自动跑冒烟回归跑完把结果发布到测试群里。这一步做完基本就告别回归跑不动的说法了。6. 从测试报告到 KPI我用 TestHub 的一套组合拳6.1 测试报告上的那些指标到底怎么看才有意义TestHub 的报表中心确实省了不少整理功夫但工具本身不会告诉你指标怎么解读。我刚接 TestHub 时看报表只看用例执行通过率后来发现这个指标太单薄了因为环境的脏数据、测试数据未准备好经常会导致通过率忽高忽低。真正有管理意义的是下面几个组合维度用例编写效率同一个人在一周内新生成的有效用例数以及在 TestHub 里从需求到用例落库的平均时长。回归命中缺陷率每次回归计划中发现的有效缺陷数 / 执行用例总数。这个数字太低说明回归范围选得有问题太高说明正常开发质量堪忧一般控制在 5% 左右比较健康。用例维护活跃度有多少用例超过 60 天没有被执行过或者没有更新过。长期不用的用例要及时标记废弃否则回归列表会越拖越沉。阻塞原因分布执行结果中阻塞的用例按原因分类是数据缺失、环境不可用、还是需求变更。这个维度能直接反映出环境治理优先级。我们每两周看一次这些指标不看单个数值而是看趋势。有一次发现阻塞占比从 8% 涨到 21%一查发现是测试环境数据库还没迁移完开发提测后我们一直在靠人工跳过用例。如果没有这个指标我们可能会一直用通过率 72%来汇报完全掩盖了真实阻塞。6.2 把指标反馈回流程让团队改进不再靠拍脑袋有了指标不等于有改进。我做的第一件事是每周五用 TestHub 导出一份回归弱覆盖清单。这个清单的逻辑是凡是在最近两次迭代中需求有变更但关联测试用例未更新或者用例执行结果没有跟进的需求都拉出来打标。然后测试负责人在周会上一条条过这时候大家讨论的就是具体产品的风险而不是抽象的质量数字。第二件事是建立用例评审-用例生成-用例执行数据闭环。TestHub 可以记录每条用例的创建人、最近编辑人、最后执行时间。如果某条用例连续两次迭代都没有被任何回归计划选中我会问模块负责人这条用例是已经不再需要还是它覆盖的场景被别的新用例替代了这个过程逼着团队清理了许多陈旧用例用例库从冗余的状态慢慢变成精干。注意删用例之前先看历史版本TestHub 支持用例历史恢复我们曾不小心删错一条关键用例后来靠历史恢复救回来了算是经验教训。第三件事把自动化执行和手工执行的结果放到同一个看板里。以前手工和自动化的数据分散管理层只看到自动化通过率 99%就以为功能稳了。现在 TestHub 统一报表会把 自动化已覆盖 和 仅手工覆盖 的模块用不同颜色标出来领导一眼就知道哪些业务还靠人肉保障自然就不会催必须把自动化率提到 100%这种拍脑袋指标了。6.3 踩坑经验与短评什么情况下 TestHub 可能不适合你聊点踩坑的体会避免大家无脑上。TestHub 不是说装好就万事大吉有几个点要注意第一AI 生成用例不是万能的如果需求本身一团糟生成出来的用例也救不了你。我们有个项目需求变更特别频繁需求描述经常跟开发实现不一致AI 生成用例的准确率就明显下降。这种情况下我会要求先人工澄清需求再走 TestHub 的生成流程否则就是在一堆错误前提上盖房子。第二权限和流程一定要提前设计好。TestHub 支持自定义用例状态流转比如草稿 - 评审中 - 已批准 - 废弃如果你们团队本身就缺少评审习惯就不要一下子把流程做得太重否则大家会为了点状态按钮而疲于奔命。先让习惯跑起来再逐步加卡点。第三回归计划和 CI/CD 要衔接好。TestHub 虽然有 API但它不负责替你实现代码 merge 后自动触发回归。这一步需要测试人员或者 DevOps 去搭桥我因为偷懒没第一时间接 Jenkins导致前两周还是手动触发省下的时间又浪费回去了。第四不建议在 TestHub 里堆上千条无效用例。工具不会自动分辨哪些用例有业务价值。你必须定期做用例清理否则它的 AI 生成、回归筛选基于的用例库一旦混乱后面所有功能质量都会受影响。我们大概每两个月做一次用例库健康度盘点把废弃、重复、过时的用例归档掉。至于什么样的团队不适合 TestHub如果你团队规模只有两三个人测试流程还处于想到什么测什么的阶段那上一个用例管理平台反而会增加负担。TestHub 更适合团队已经有基本测试流程但因为用例量、版本迭代速度的上升而开始痛苦的组织。它解决的是规模化之后的失控感而不是零基础时的流程缺失。最后说点个人感受。以前测试团队老被说执行力强但推动力弱因为大家整天趴在 Excel 里写用例、填结果根本没时间思考测试策略。用 TestHub 之后我们终于能把时间花在分析哪些模块风险高、哪些用例要被优化、哪些自动化脚本该优先维护上。这段时间 KPI 稳住并不是因为报告数字变漂亮了而是因为测试团队终于能做出更聪明的测试决策。工具永远只是放大器真正起作用的是你把精力从写用例挪到了设计测试上。
返回列表