TestRail API 实战:动态筛选测试用例并集成至测试运行

testrail api 实战:动态筛选测试用例并集成至测试运行

本教程详细指导如何利用 TestRail API 筛选出具有特定自定义字段(如“可自动化”)的测试用例,并将其动态添加到新的测试运行中。文章涵盖了从获取测试套件中的用例数据、解析JSON响应、根据自定义字段进行过滤,到最终通过API更新测试运行的完整流程,并提供了实用的代码示例。在自动化测试与TestRail集成的工作流中,经常需要根据用例的特定属性(例如,是否可自动化)来动态创建或更新测试运行,以确保只执行相关的测试用例。本文将分步演示如何通过TestRail API实现这一高效且灵活的过程。

一、从测试套件中筛选特定测试用例

要筛选出具有特定属性的测试用例,首先需要从 TestRail 获取测试套件中的所有用例数据,然后对这些数据进行解析和过滤。

1.1 理解 get_cases API 端点

get_cases 是 TestRail API 中用于检索测试用例的核心端点。它允许你根据项目ID和测试套件ID获取该套件下的所有测试用例。

API 请求格式:

GET index.php?/api/v2/get_cases/{project_id}&suite_id={suite_id}

参数说明:{project_id}:你的 TestRail 项目的唯一标识符。{suite_id}:你希望从中筛选用例的测试套件的唯一标识符。

1.2 解析 API 响应与自定义字段

执行 get_cases 请求后,TestRail 会返回一个 JSON 格式的响应,其中包含测试套件中所有测试用例的详细信息。每个用例对象都包含其 ID、标题以及所有自定义字段。

以下是一个响应示例,其中展示了 custom_can_be_automated 这一自定义字段:

{  "cases":[    {      "id":22478,      "title":"Test Case Steps (Text)",      "section_id":2347,      // ... 其他字段 ...      "suite_id":196,      "custom_automation_type":6,      "custom_can_be_automated":true, // 关注此字段      // ... 更多自定义字段 ...    },    {      "id":22494,      "title":"Automated Checkout",      "section_id":2347,      // ... 其他字段 ...      "suite_id":196,      "custom_automation_type":0,      "custom_can_be_automated":false, // 关注此字段      // ... 更多自定义字段 ...    }  ]}

在这个 JSON 结构中,custom_can_be_automated 字段是一个布尔值,用于指示该测试用例是否可自动化。

1.3 过滤自动化测试用例

获取到 JSON 响应后,下一步是根据 custom_can_be_automated 属性进行过滤,提取出所有标记为 true 的测试用例的 ID。

命令行示例(使用 curl 和 jq):如果你在命令行环境工作,可以使用 curl 发送 API 请求,并结合 jq 工具来解析和过滤 JSON 响应。

TESTRAIL_URL="your_testrail_instance.testrail.io"TESTRAIL_EMAIL="your_email@example.com"TESTRAIL_PASS="your_api_key_or_password"PROJECT_ID="1" # 替换为你的项目IDSUITE_ID="196" # 替换为你的测试套件IDcurl -s -H "Content-Type: application/json"      -u "$TESTRAIL_EMAIL:$TESTRAIL_PASS"      "$TESTRAIL_URL/index.php?/api/v2/get_cases/$PROJECT_ID&suite_id=$SUITE_ID" |      jq '[.cases[] | select(.custom_can_be_automated == true) | .id]'

-s 参数用于抑制 curl 的进度信息。jq ‘[.cases[] | select(.custom_can_be_automated == true) | .id]’ 这部分命令会:遍历 cases 数组中的每一个元素。select(.custom_can_be_automated == true) 筛选出 custom_can_be_automated 字段为 true 的用例。|.id 提取这些筛选出用例的 id 字段。最终输出一个包含所有符合条件用例 ID 的 JSON 数组,例如 [22478, 30001]。

JavaScript 环境下的实现思路:如果你在 JavaScript 环境中开发(例如 Node.js浏览器环境),可以使用 fetch 或 axios 等库来发送 HTTP 请求并处理响应:

async function getAutomatedCaseIds(projectId, suiteId) {    const testrailUrl = "https://your_testrail_instance.testrail.io";    const email = "your_email@example.com";    const apiKey = "your_api_key_or_password"; // 推荐使用API Key    const auth = btoa(`${email}:${apiKey}`); // Base64 编码认证信息    try {        const response = await fetch(`${testrailUrl}/index.php?/api/v2/get_cases/${projectId}&suite_id=${suiteId}`, {            method: 'GET',            headers: {                'Content-Type': 'application/json',                'Authorization': `Basic ${auth}`            }        });        if (!response.ok) {            throw new Error(`HTTP error! status: ${response.status}`);        }        const data = await response.json();        const automatedCaseIds = data.cases            .filter(testCase => testCase.custom_can_be_automated === true)            .map(testCase => testCase.id);        return automatedCaseIds;    } catch (error) {        console.error("Error fetching automated test cases:", error);        return [];    }}// 示例调用// getAutomatedCaseIds(1, 196).then(ids => console.log("Automated Case IDs:", ids));

二、将筛选后的用例添加到测试运行

获取到需要添加到测试运行的用例 ID 列表后,下一步就是使用 update_run API 端点来更新现有的测试运行。

2.1 理解 update_run API 端点

update_run 用于修改一个已存在的测试运行的属性,包括其包含的测试用例。

API 请求格式:

POST index.php?/api/v2/update_run/{run_id}

参数说明:{run_id}:你希望更新的测试运行的唯一标识符。

2.2 构建请求体

要将特定用例添加到测试运行,你需要在 POST 请求体中提供一个 JSON 对象,其中包含 case_ids 数组。

关键字段:

include_all (布尔值):如果设置为 true,TestRail 将会包含测试套件中的所有用例,此时 case_ids 字段会被忽略。如果只想添加特定用例,请将此字段设置为 false 或省略此字段,并提供 case_ids 数组。case_ids (数组):包含你希望添加到测试运行中的测试用例 ID 列表。

示例请求体:

{  "include_all": false,  "case_ids": [22478, 30001, 30005] // 替换为实际筛选出的用例ID}

2.3 发送 POST 请求

命令行示例(使用 curl):

TESTRAIL_URL="your_testrail_instance.testrail.io"TESTRAIL_EMAIL="your_email@example.com"TESTRAIL_PASS="your_api_key_or_password"RUN_ID="123" # 替换为你的测试运行IDCASE_IDS="[22478, 30001, 30005]" # 替换为上一步获取到的用例ID数组curl -X POST   "https://$TESTRAIL_URL/index.php?/api/v2/update_run/$RUN_ID"   -H "Content-Type: application/json"   -u "$TESTRAIL_EMAIL:$TESTRAIL_PASS"   -d "{"include_all": false, "case_ids": $CASE_IDS}"

-X POST:指定 HTTP 请求方法为 POST。-H “Content-Type: application/json”:设置请求头,告知服务器请求体是 JSON 格式。-u “$TESTRAIL_EMAIL:$TESTRAIL_PASS”:提供认证信息。-d “{“include_all”: false, “case_ids”: $CASE_IDS}”:提供 JSON 格式的请求体数据。注意 JSON 字符串中的引号需要转义。

JavaScript 环境下的实现思路:

async function addCasesToTestRun(runId, caseIds) {    const testrailUrl = "https://your_testrail_instance.testrail.io";    const email = "your_email@example.com";    const apiKey = "your_api_key_or_password";    const auth = btoa(`${email}:${apiKey}`);    try {        const response = await fetch(`${testrailUrl}/index.php?/api/v2/update_run/${runId}`, {            method: 'POST',            headers: {                'Content-Type': 'application/json',                'Authorization': `Basic ${auth}`            },            body: JSON.stringify({                include_all: false, // 明确指定不包含所有用例                case_ids: caseIds            })        });        if (!response.ok) {            throw new Error(`HTTP error! status: ${response.status}`);        }        console.log(`Successfully added cases to TestRun ${runId}.`);        return await response.json(); // 返回更新后的 TestRun 信息    } catch (error) {        console.error(`Error adding cases to TestRun ${runId}:`, error);        return null;    }}// 示例调用// const automatedIds = await getAutomatedCaseIds(1, 196); // 假设已获取// if (automatedIds.length > 0) {//     addCasesToTestRun(123, automatedIds);// } else {//     console.log("No automated cases found to add.");// }

2.4 验证操作结果

当 update_run 请求成功执行后,TestRail API 会返回一个 HTTP 状态码 200 OK,表示操作成功。你可以根据这个状态码来判断用例是否已成功添加到测试运行中。

三、注意事项与最佳实践

在实际集成 TestRail API 时,请考虑以下几点以确保操作的健壮性和可靠性:

API 认证: 始终使用 TestRail 提供的 API Key 进行认证,而非账户密码。API Key 具有更好的安全性和管理性。错误处理: 在你的脚本或应用程序中,务必对 API 的响应进行错误检查。除了检查 HTTP 状态码(非 200 通常表示失败),还要解析响应体中的错误信息,以便更好地诊断问题。自定义字段名称: 确保你在代码中使用的自定义字段名称(例如 custom_can_be_automated)与 TestRail 实例中实际配置的字段名称完全一致。这些名称通常是小写且以下划线分隔。API 速率限制: TestRail API 有请求速率限制。对于需要处理大量用例或频繁调用的场景,请注意这些限制,并考虑在请求之间添加适当的延迟,或采用批量处理策略。TestRun 生命周期: 在尝试更新测试运行之前,确保目标测试运行(run_id)已经存在。通常,你会先创建一个测试运行(使用 add_run API),然后根据筛选结果更新它。include_all 字段: 务必正确理解 update_run 请求体中 include_all 字段的作用。如果你只想添加筛选出的特定用例,应将其设置为 false 或省略,并提供 case_ids 数组。

总结

通过本文的指导,你已经掌握了如何利用 TestRail API 动态筛选特定测试用例(例如,标记为“可自动化”的用例)并将其添加到现有的测试运行中。这一过程涉及到 get_cases 端点获取数据、解析 JSON 响应、根据自定义字段进行过滤,以及使用 update_run 端点更新测试运行。掌握这些技能将极大地提升你的自动化测试流程与 TestRail 管理的集成效率和灵活性。

参考资料

TestRail API 文档 – Runs#updaterun:https://www.php.cn/link/7966a1b638bd6906654fd9190feeb801TestRail API 文档 – Cases#getcases:https://www.php.cn/link/31beb41824b307d9f0deb076f8f9ee3b

以上就是TestRail API 实战:动态筛选测试用例并集成至测试运行的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1521736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 14:25:53
下一篇 2025年12月20日 14:26:11

相关推荐

  • 如何构建一个支持语音识别的JavaScript应用?

    答案:构建语音识别应用依赖Web Speech API中的SpeechRecognition接口,通过初始化识别对象并设置语言、结果模式等参数,结合onresult事件获取语音转文本结果,同时处理错误与结束状态,添加按钮控制与视觉反馈优化体验,并进行浏览器兼容性检测以确保功能正常运行。 构建一个支持…

    2025年12月20日
    000
  • 如何利用Monaco Editor构建功能丰富的在线代码编辑器?

    Monaco Editor是微软开发的浏览器端代码编辑器,源自VS Code核心,支持语法高亮、智能补全、错误检查、代码折叠和主题切换等功能。通过npm安装monaco-editor包并结合Webpack或Vite等构建工具可快速集成。创建容器元素后,使用monaco.editor.create()…

    2025年12月20日
    000
  • JavaScript下拉菜单动态显示与隐藏:CSS样式检测与事件冒泡深度解析

    本文深入探讨了如何使用JavaScript实现下拉菜单的动态显示与隐藏,重点解决通过CSS类设置的display属性在JavaScript中无法直接通过element.style.display获取的问题,并讲解了如何有效处理事件冒泡,确保点击菜单外区域时菜单能正确隐藏。教程将提供详细的代码示例,帮…

    2025年12月20日
    000
  • 如何利用 CSS-in-JS 技术动态地管理组件的样式和主题?

    使用 CSS-in-JS 可实现组件级样式动态管理与主题切换,通过 styled-components 等库结合 props 和 ThemeProvider,使样式与状态联动。1. 安装 styled-components 并创建带 props 的动态样式按钮;2. 定义 lightTheme 与 …

    2025年12月20日
    000
  • 在JavaScript中,异步编程除了Promise和Async/Await还有哪些模式?

    回调函数用于简单异步任务但易形成回调地狱;2. 事件监听适用于解耦的多次触发场景;3. Generator函数结合yield实现类同步写法,需手动驱动;4. Observable适合处理连续数据流,支持丰富操作符;5. Promise与async/await因语法简洁成为主流,但实际常混合使用多种模…

    2025年12月20日
    000
  • MindAR:使用单个.mind文件加载并关联多个GLTF模型

    本教程将详细介绍在MindAR框架中,如何通过一个编译好的.mind文件管理和加载多个图像目标,并为每个目标关联不同的GLTF三维模型。我们将探讨MindAR的图像编译机制,并演示如何利用mindar-image-target组件的targetIndex属性,实现多个3D模型与相应增强现实目标的精确…

    2025年12月20日
    000
  • 如何构建一个支持实时数据同步的离线缓存策略?

    答案是结合本地存储、变更队列与增量同步实现离线缓存。通过IndexedDB/SQLite持久化数据并标记状态,用唯一ID避免冲突;维护持久化变更队列记录增删改操作,支持优先级排序;网络恢复后上传本地变更、下载服务端增量更新,基于时间戳或版本号处理冲突;利用WebSocket接收变更通知触发局部刷新,…

    2025年12月20日
    000
  • JSX中动态字段的渲染与安全访问指南

    本文旨在指导开发者如何在React JSX中高效处理动态命名字段。我们将深入探讨如何利用方括号语法(Bracket Notation)正确访问运行时生成的对象属性,并介绍如何通过可选链操作符(Optional Chaining)简化对深度嵌套对象的条件渲染,从而提升代码的健壮性和可读性。 在现代前端…

    2025年12月20日
    000
  • MERN栈React应用中useEffect实现登录后用户资料即时更新

    本教程深入探讨了MERN栈React应用中useEffect钩子在用户登录后,用户资料未能即时更新,需要刷新页面才能显示最新数据的问题。文章详细分析了useEffect依赖数组的正确使用,指出常见错误,并提供了基于用户状态变化的依赖管理方案,确保用户资料在登录后能立即响应并更新,从而提升用户体验。 …

    2025年12月20日
    000
  • JavaScript高阶函数的应用场景

    高阶函数是JavaScript中能接收或返回函数的特殊函数,它们通过抽象行为实现代码复用与组合。常见应用如数组的map、filter、reduce进行数据处理,事件监听中使用回调函数响应交互,以及通过柯里化和偏函数创建可复用逻辑。示例中展示了筛选活跃用户并提取姓名的过程:users.filter(u…

    2025年12月20日
    000
  • 在JSX中处理动态字段:方括号表示法与可选链的实践

    本教程深入探讨了在React JSX中如何高效且安全地处理动态对象字段。我们首先介绍了使用方括号表示法来访问运行时生成的动态键,解决了直接点表示法的语法限制。接着,针对深层嵌套对象的冗长访问问题,引入了可选链操作符(?.),极大地简化了代码并增强了健壮性,有效避免了因属性不存在而导致的运行时错误。通…

    2025年12月20日
    000
  • 如何在JavaScript中高效重命名并转换大型对象属性

    本文介绍如何在JavaScript中高效地对大型对象进行属性重命名和类型转换。通过结合使用解构赋值和展开运算符,可以简洁明了地将原始对象的特定属性重命名、应用函数进行类型转换,同时保留其他未修改的属性,从而生成符合新数据模型要求的新对象。 在处理包含大量字段的javascript对象时,我们经常需要…

    2025年12月20日
    000
  • React useEffect 登录后数据不同步问题:原理与解决方案

    本文深入探讨了React useEffect钩子在用户登录后,个人资料数据未能即时更新,需要页面刷新才能生效的常见问题。文章分析了useEffect依赖项的正确使用方式,指出了将自身状态作为依赖项的常见误区,并提供了基于用户认证状态(如用户ID或对象)来触发数据更新的专业解决方案,旨在帮助开发者实现…

    2025年12月20日
    000
  • JavaScript中的Object.defineProperty有哪些限制?

    Object.defineProperty无法监听对象属性的增删、数组索引赋值及length修改,需手动逐个定义属性且不支持in和for…in拦截,灵活性差,现代方案多用Proxy替代。 JavaScript中的Object.defineProperty是一个强大的方法,用于精确控制对象…

    2025年12月20日
    000
  • 优化 Material Symbols 字体加载:按需定制可变字体请求

    Material Symbols 字体因默认加载所有可变属性而导致文件庞大、加载缓慢。本文将详细介绍如何通过定制 Google Fonts API 请求 URL,精确选择所需的字重 (wght)、填充 (FILL) 等属性,从而显著减小字体文件大小(例如从 4MB 降至 700KB),大幅提升网页加…

    2025年12月20日
    000
  • JavaScript:重构对象数组键名,移除特定后缀的ES6方法

    本教程将详细阐述如何利用JavaScript ES6的现代特性,包括Array.prototype.map、Object.entries和Object.fromEntries,来高效地重构对象数组中的键名。我们将专注于通过正则表达式匹配并移除键名中形如-0、-1等数字后缀,从而实现数据结构的标准化和…

    2025年12月20日
    000
  • JavaScript中的反射(Reflection)API在框架开发中如何应用?

    Proxy 与 Reflect 结合可实现响应式系统、安全元编程、模拟装饰器及通用数据代理,为框架提供透明拦截与自定义对象操作的能力,如 Vue 3 的 reactive、日志拦截、数据校验等,提升灵活性与抽象层次。 JavaScript中的反射(Reflection)API 主要通过 Proxy …

    2025年12月20日
    000
  • JavaScript中大型对象属性重命名与类型转换的实践指南

    本教程旨在解决JavaScript中处理大型对象时,如何高效地重命名部分属性并进行类型转换的问题。通过结合使用解构赋值和扩展运算符,可以优雅地创建新对象,同时保留大部分原始属性并按需修改特定属性的名称和值,尤其适用于数据模型转换场景。 在现代JavaScript应用开发中,我们经常需要对数据对象进行…

    2025年12月20日
    000
  • 离线使用 MathJax:在 HTML 页面中集成本地 MathJax 库

    本文旨在指导开发者如何在没有网络连接或无需第三方安装的情况下,在 HTML 页面中集成 MathJax 库,实现 LaTeX 公式的渲染。文章将介绍如何下载 MathJax 库,并配置 HTML 页面以正确加载和使用本地 MathJax 文件,避免使用 CDN 和 npm 安装,从而确保应用程序的独…

    2025年12月20日
    000
  • 使用JavaScript数组动态生成HTML表格:ES6模板字面量实践

    本教程将指导您如何利用JavaScript数组数据,结合ES6的模板字面量特性,高效且优雅地动态生成HTML表格内容。我们将通过一个实际示例,展示如何避免传统字符串拼接的复杂性,直接将数据渲染到表格中,实现数据与视图的简洁绑定。 在web开发中,我们经常需要将后端获取的数据或前端定义的数据数组展示在…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信