@dlenroc/testrail

中文文档
2.0.0发布于 2026/04/06MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 1.1万

测试Rail API 客户端, 处理和输入错误

中文使用文档
文档目录28 节
  1. 安装
  2. 示例
  3. APIs 密码
  4. 附录
  5. BDDs 函数
  6. 案例
  7. 大小写字段
  8. 大小写类型
  9. 配置
  10. 数据集
  11. 组
  12. 里程碑
  13. 作用
  14. 计划
  15. 优先事项
  16. 项目
  17. 报告
  18. 结果
  19. 结果字段
  20. 运行
  21. 节
  22. 共同步骤
  23. 状态
  24. 诉讼
  25. 模板
  26. 测试
  27. 用户
  28. 变量

@dlenroc/testrail —— 互联网档案馆的存檔,存档日期2013-10-02 NPM Version

安装

npm install @dlenroc/testrail --save

示例

import { TestRail } from '@dlenroc/testrail';

const api = new TestRail({
    host: 'https://{organization}.testrail.net',
    username: '{username}',
    password: '{token/password}',
});

const projects = await api.getProjects();

console.log(projects);

APIs 密码

附录

addAttachmentToCase(caseId: number, payload: AddAttachment): Promise<CreatedAttachment>
addAttachmentToPlan(planId: number, payload: AddAttachment): Promise<CreatedAttachment>
addAttachmentToPlanEntry(planId: number, entryId: string, payload: AddAttachment): Promise<CreatedAttachment>
addAttachmentToResult(resultId: number, payload: AddAttachment): Promise<CreatedAttachment>
addAttachmentToRun(runId: number, payload: AddAttachment): Promise<CreatedAttachment>
getAttachmentsForCase(caseId: number, filters?: Pagination): Promise<AttachmentForCase[]>
getAttachmentsForPlan(planId: number, filters?: Pagination): Promise<AttachmentForPlan[]>
getAttachmentsForPlanEntry(planId: number, entryId: string): Promise<AttachmentForPlanEntry[]>
getAttachmentsForRun(runId: number, filters?: Pagination): Promise<AttachmentForRun[]>
getAttachmentsForTest(testId: number): Promise<AttachmentForTest[]>
getAttachment(attachmentId: string): Promise<Blob>
deleteAttachment(attachmentId: string): Promise<void>

BDDs 函数

getBdd(caseId: number): Promise<Blob>
addBdd(sectionId: number, payload: AddAttachment): Promise<Case>

案例

getCase(caseId: number): Promise<Case>
getCases(projectId: number, filters?: CaseFilters): Promise<Case[]>
getHistoryForCase(caseId: number, filters?: Pagination): Promise<CaseHistory[]>
addCase(sectionId: number, payload: AddCase): Promise<Case>
copyCasesToSection(sectionId: number, payload: CopyCasesToSection): Promise<void>
updateCase(caseId: number, payload: UpdateCase): Promise<Case>
updateCases(suiteId: number, payload: UpdateCases): Promise<void>
moveCasesToSection(sectionId: number, payload: MoveCasesToSection): Promise<void>
deleteCase(caseId: number): Promise<void>
deleteCases(suiteId: number, payload: DeleteCases): Promise<void>

大小写字段

getCaseFields(): Promise<CaseField[]>
addCaseField(payload: AddCaseField): Promise<CaseField>

大小写类型

getCaseTypes(): Promise<CaseType[]>

配置

getConfigs(projectId: number): Promise<Config[]>
addConfigGroup(projectId: number, payload: AddConfigGroup): Promise<Config>
addConfig(configGroupId: number, payload: AddConfig): Promise<ConfigItem>
updateConfigGroup(configGroupId: number, payload: UpdateConfigGroup): Promise<Config>
updateConfig(configId: number, payload: UpdateConfig): Promise<ConfigItem>
deleteConfigGroup(configGroupId: number): Promise<void>
deleteConfig(configId: number): Promise<void>

数据集

getDataset(datasetId: number): Promise<Dataset>
getDatasets(projectId: number, filters?: Pagination): Promise<Dataset[]>
addDataset(projectId: number, payload: AddDataset): Promise<Group>
updateDataset(datasetId: number, payload: AddDataset): Promise<Group>
deleteDataset(datasetId: number): Promise<void>

组

getGroup(groupId: number): Promise<Group>
getGroups(filters?: Pagination): Promise<Group[]>
addGroup(payload: AddGroup): Promise<Group>
updateGroup(groupId: number, payload: AddGroup): Promise<Group>
deleteGroup(groupId: number): Promise<void>

里程碑

getMilestone(milestoneId: number): Promise<Milestone>
getMilestones(projectId: number, filters?: MilestoneFilters): Promise<Milestone[]>
addMilestone(projectId: number, payload: AddMilestone): Promise<Milestone>
updateMilestone(milestoneId: number, payload: UpdateMilestone): Promise<Milestone>
deleteMilestone(milestoneId: number): Promise<void>

作用

getRoles(filters?: Pagination): Promise<Role[]>

计划

getPlan(planId: number): Promise<Plan>
getPlans(projectId: number, filters?: PlanFilters): Promise<PlanItem[]>
addPlan(projectId: number, payload: AddPlan): Promise<Plan>
addPlanEntry(planId: number, payload: AddPlanEntry): Promise<PlanEntry>
addRunToPlanEntry(planId: number, entryId: string, payload: AddRunToPlanEntry): Promise<PlanEntry>
updatePlan(planId: number, payload: UpdatePlan): Promise<Plan>
updatePlanEntry(planId: number, entryId: string, payload: UpdatePlanEntry): Promise<PlanEntry>
updateRunInPlanEntry(runId: number, payload: UpdateRunInPlanEntry): Promise<PlanEntry>
closePlan(planId: number): Promise<Plan>
deletePlan(planId: number): Promise<void>
deletePlanEntry(planId: number, entryId: string): Promise<void>
deleteRunFromPlanEntry(runId: number): Promise<void>

优先事项

getPriorities(): Promise<Priority[]>

项目

getProject(projectId: number): Promise<Project>
getProjects(filters?: ProjectFilters): Promise<Project[]>
addProject(payload: AddProject): Promise<Project>
updateProject(projectId: number, payload: UpdateProject): Promise<Project>
deleteProject(projectId: number): Promise<void>

报告

getReports(projectId: number): Promise<Report[]>
runReport(reportTemplateId: number): Promise<ReportUrls>

结果

getResults(testId: number, filters?: ResultFilters): Promise<Result[]>
getResultsForCase(runId: number, caseId: number, filters?: ResultFilters): Promise<Result[]>
getResultsForRun(runId: number, filters?: ResultForRunFilters): Promise<Result[]>
addResult(testId: number, payload: AddResult): Promise<Result>
addResultForCase(runId: number, caseId: number, payload: AddResult): Promise<Result>
addResults(runId: number, payload: AddResults): Promise<Result[]>
addResultsForCases(runId: number, payload: AddResultsForCases): Promise<Result[]>

结果字段

getResultFields(): Promise<ResultField[]>

运行

getRun(runId: number): Promise<Run>
getRuns(projectId: number, filters?: RunFilters): Promise<Run[]>
addRun(projectId: number, payload: AddRun): Promise<Run>
updateRun(runId: number, payload: UpdateRun): Promise<Run>
closeRun(runId: number): Promise<Run>
deleteRun(runId: number): Promise<void>

节

getSection(sectionId: number): Promise<Section>
getSections(projectId: number, filters?: SectionFilters): Promise<Section[]>
addSection(projectId: number, payload: AddSection): Promise<Section>
moveSection(sectionId: number, payload: MoveSection): Promise<Section>
updateSection(sectionId: number, payload: UpdateSection): Promise<Section>
deleteSection(sectionId: number): Promise<void>

共同步骤

getSharedStep(stepId: number): Promise<SharedStep>
getSharedSteps(projectId: number, filters?: SharedStepFilters): Promise<SharedStep[]>
getSharedStepHistory(stepId: number, filters?: Pagination): Promise<SharedStepHistory[]> {
addSharedStep(projectId: number, payload: AddSharedStep): Promise<SharedStep>
updateSharedStep(stepId: number, payload: UpdateSharedStep): Promise<SharedStep>
deleteSharedStep(stepId: number, payload?: DeleteSharedStep): Promise<void>

状态

getStatuses(): Promise<Status[]>
getCaseStatuses(filters?: Pagination): Promise<CaseStatus[]>

诉讼

getSuite(suiteId: number): Promise<Suite>
getSuites(projectId: number): Promise<Suite[]>
addSuite(projectId: number, payload: AddSuite): Promise<Suite>
updateSuite(suiteId: number, payload: UpdateSuite): Promise<Suite>
deleteSuite(suiteId: number): Promise<void>

模板

getTemplates(projectId: number): Promise<Template[]>

测试

getTest(testId: number): Promise<Test>
getTests(runId: number, filters?: TestFilters): Promise<Test[]>

用户

getUser(userId: number): Promise<User>
getCurrentUser(): Promise<User>
getUserByEmail(email: string): Promise<User>
getUsers(filters?: UserFilters): Promise<User[]>
addUser(payload: AddUser): Promise<User>
updateUser(userId: number, payload: AddUser): Promise<User>

变量

getVariables(projectId: number, filters?: Pagination): Promise<Variable[]>
addVariable(projectId: number, payload: AddVariable): Promise<Variable>
updateVariable(variableId: number, payload: AddVariable): Promise<Variable>
deleteVariable(variableId: number): Promise<void>

版本与发布记录

@dlenroc/testrail 共发布 27 个版本,首次发布于 2025/11/18;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.0.0latest2026/04/067 个月前
1.9.52025/11/1811 个月前
1.9.42025/10/121.1 年前
1.9.32025/07/271.3 年前
1.9.22025/07/201.3 年前
1.9.12023/05/113 年前

关于 @dlenroc/testrail 的常见问题

@dlenroc/testrail 是什么?

测试Rail API 客户端, 处理和输入错误

如何安装 @dlenroc/testrail?

在项目目录运行 npm install @dlenroc/testrail,或使用 pnpm add / yarn add / bun add。

@dlenroc/testrail 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dlenroc/testrail 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dlenroc/testrail 可以商用吗?

@dlenroc/testrail 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dlenroc/testrail 的下载量有多少?

根据 npm 官方下载统计,@dlenroc/testrail 在 2026/10/13 – 2026/11/11 这 30 天内被下载 11,415 次,日均约 381 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dlenroc/testrail 还在维护吗?

最新版本 2.0.0 发布于 2026/04/06(7 个月前);至今共发布 27 个版本,其中过去 12 个月发布了 2 个;首次发布于 2025/11/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。