# @dlenroc/testrail 中文文档

规范地址：https://npmcn.com/package/%40dlenroc/testrail/

版本：2\.0\.0
npm 元数据更新时间：2026-04-06T15:51:29.025Z
中文译文更新时间：2026-11-12T12:41:24.094Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dlenroc/testrail
原文对照：https://npmcn.com/package/%40dlenroc/testrail/?lang=original
项目主页：https://github.com/dlenroc/node-testrail-api#readme
源码仓库：https://github.com/dlenroc/node-testrail-api

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：71.9 kB，5 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2025-11-18T10:04:54.930Z
- 最新版本发布：2026-04-06T15:51:28.718Z
- 近 30 天下载量：11415（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：27（近 12 个月 2 个）

## 中文简介

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

## 安装

```sh
npm install @dlenroc/testrail
```

也可以使用：`pnpm add @dlenroc/testrail`、`yarn add @dlenroc/testrail`、`bun add @dlenroc/testrail`

## README

# @dlenroc/testrail —— 互联网档案馆的存檔,存档日期2013-10-02 [![NPM Version](https://img.shields.io/npm/v/@dlenroc/testrail)](https://www.npmjs.com/package/@dlenroc/testrail)

## 安装

```bash
npm install @dlenroc/testrail --save
```

## 示例

```typescript
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 密码

### 附录

```typescript
addAttachmentToCase(caseId: number, payload: AddAttachment): Promise<CreatedAttachment>
```

```typescript
addAttachmentToPlan(planId: number, payload: AddAttachment): Promise<CreatedAttachment>
```

```typescript
addAttachmentToPlanEntry(planId: number, entryId: string, payload: AddAttachment): Promise<CreatedAttachment>
```

```typescript
addAttachmentToResult(resultId: number, payload: AddAttachment): Promise<CreatedAttachment>
```

```typescript
addAttachmentToRun(runId: number, payload: AddAttachment): Promise<CreatedAttachment>
```

```typescript
getAttachmentsForCase(caseId: number, filters?: Pagination): Promise<AttachmentForCase[]>
```

```typescript
getAttachmentsForPlan(planId: number, filters?: Pagination): Promise<AttachmentForPlan[]>
```

```typescript
getAttachmentsForPlanEntry(planId: number, entryId: string): Promise<AttachmentForPlanEntry[]>
```

```typescript
getAttachmentsForRun(runId: number, filters?: Pagination): Promise<AttachmentForRun[]>
```

```typescript
getAttachmentsForTest(testId: number): Promise<AttachmentForTest[]>
```

```typescript
getAttachment(attachmentId: string): Promise<Blob>
```

```typescript
deleteAttachment(attachmentId: string): Promise<void>
```

### BDDs 函数

```typescript
getBdd(caseId: number): Promise<Blob>
```

```typescript
addBdd(sectionId: number, payload: AddAttachment): Promise<Case>
```

### 案例

```typescript
getCase(caseId: number): Promise<Case>
```

```typescript
getCases(projectId: number, filters?: CaseFilters): Promise<Case[]>
```

```typescript
getHistoryForCase(caseId: number, filters?: Pagination): Promise<CaseHistory[]>
```

```typescript
addCase(sectionId: number, payload: AddCase): Promise<Case>
```

```typescript
copyCasesToSection(sectionId: number, payload: CopyCasesToSection): Promise<void>
```

```typescript
updateCase(caseId: number, payload: UpdateCase): Promise<Case>
```

```typescript
updateCases(suiteId: number, payload: UpdateCases): Promise<void>
```

```typescript
moveCasesToSection(sectionId: number, payload: MoveCasesToSection): Promise<void>
```

```typescript
deleteCase(caseId: number): Promise<void>
```

```typescript
deleteCases(suiteId: number, payload: DeleteCases): Promise<void>
```

### 大小写字段

```typescript
getCaseFields(): Promise<CaseField[]>
```

```typescript
addCaseField(payload: AddCaseField): Promise<CaseField>
```

### 大小写类型

```typescript
getCaseTypes(): Promise<CaseType[]>
```

### 配置

```typescript
getConfigs(projectId: number): Promise<Config[]>
```

```typescript
addConfigGroup(projectId: number, payload: AddConfigGroup): Promise<Config>
```

```typescript
addConfig(configGroupId: number, payload: AddConfig): Promise<ConfigItem>
```

```typescript
updateConfigGroup(configGroupId: number, payload: UpdateConfigGroup): Promise<Config>
```

```typescript
updateConfig(configId: number, payload: UpdateConfig): Promise<ConfigItem>
```

```typescript
deleteConfigGroup(configGroupId: number): Promise<void>
```

```typescript
deleteConfig(configId: number): Promise<void>
```

### 数据集

```typescript
getDataset(datasetId: number): Promise<Dataset>
```

```typescript
getDatasets(projectId: number, filters?: Pagination): Promise<Dataset[]>
```

```typescript
addDataset(projectId: number, payload: AddDataset): Promise<Group>
```

```typescript
updateDataset(datasetId: number, payload: AddDataset): Promise<Group>
```

```typescript
deleteDataset(datasetId: number): Promise<void>
```

### 组

```typecript
getGroup(groupId: number): Promise<Group>
```

```typecript
getGroups(filters?: Pagination): Promise<Group[]>
```

```typecript
addGroup(payload: AddGroup): Promise<Group>
```

```typecript
updateGroup(groupId: number, payload: AddGroup): Promise<Group>
```

```typecript
deleteGroup(groupId: number): Promise<void>
```

### 里程碑

```typescript
getMilestone(milestoneId: number): Promise<Milestone>
```

```typescript
getMilestones(projectId: number, filters?: MilestoneFilters): Promise<Milestone[]>
```

```typescript
addMilestone(projectId: number, payload: AddMilestone): Promise<Milestone>
```

```typescript
updateMilestone(milestoneId: number, payload: UpdateMilestone): Promise<Milestone>
```

```typescript
deleteMilestone(milestoneId: number): Promise<void>
```

### 作用

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

### 计划

```typescript
getPlan(planId: number): Promise<Plan>
```

```typescript
getPlans(projectId: number, filters?: PlanFilters): Promise<PlanItem[]>
```

```typescript
addPlan(projectId: number, payload: AddPlan): Promise<Plan>
```

```typescript
addPlanEntry(planId: number, payload: AddPlanEntry): Promise<PlanEntry>
```

```typescript
addRunToPlanEntry(planId: number, entryId: string, payload: AddRunToPlanEntry): Promise<PlanEntry>
```

```typescript
updatePlan(planId: number, payload: UpdatePlan): Promise<Plan>
```

```typescript
updatePlanEntry(planId: number, entryId: string, payload: UpdatePlanEntry): Promise<PlanEntry>
```

```typescript
updateRunInPlanEntry(runId: number, payload: UpdateRunInPlanEntry): Promise<PlanEntry>
```

```typescript
closePlan(planId: number): Promise<Plan>
```

```typescript
deletePlan(planId: number): Promise<void>
```

```typescript
deletePlanEntry(planId: number, entryId: string): Promise<void>
```

```typescript
deleteRunFromPlanEntry(runId: number): Promise<void>
```

### 优先事项

```typescript
getPriorities(): Promise<Priority[]>
```

### 项目

```typescript
getProject(projectId: number): Promise<Project>
```

```typescript
getProjects(filters?: ProjectFilters): Promise<Project[]>
```

```typescript
addProject(payload: AddProject): Promise<Project>
```

```typescript
updateProject(projectId: number, payload: UpdateProject): Promise<Project>
```

```typescript
deleteProject(projectId: number): Promise<void>
```

### 报告

```typescript
getReports(projectId: number): Promise<Report[]>
```

```typescript
runReport(reportTemplateId: number): Promise<ReportUrls>
```

### 结果

```typescript
getResults(testId: number, filters?: ResultFilters): Promise<Result[]>
```

```typescript
getResultsForCase(runId: number, caseId: number, filters?: ResultFilters): Promise<Result[]>
```

```typescript
getResultsForRun(runId: number, filters?: ResultForRunFilters): Promise<Result[]>
```

```typescript
addResult(testId: number, payload: AddResult): Promise<Result>
```

```typescript
addResultForCase(runId: number, caseId: number, payload: AddResult): Promise<Result>
```

```typescript
addResults(runId: number, payload: AddResults): Promise<Result[]>
```

```typescript
addResultsForCases(runId: number, payload: AddResultsForCases): Promise<Result[]>
```

### 结果字段

```typescript
getResultFields(): Promise<ResultField[]>
```

### 运行

```typescript
getRun(runId: number): Promise<Run>
```

```typescript
getRuns(projectId: number, filters?: RunFilters): Promise<Run[]>
```

```typescript
addRun(projectId: number, payload: AddRun): Promise<Run>
```

```typescript
updateRun(runId: number, payload: UpdateRun): Promise<Run>
```

```typescript
closeRun(runId: number): Promise<Run>
```

```typescript
deleteRun(runId: number): Promise<void>
```

### 节

```typescript
getSection(sectionId: number): Promise<Section>
```

```typescript
getSections(projectId: number, filters?: SectionFilters): Promise<Section[]>
```

```typescript
addSection(projectId: number, payload: AddSection): Promise<Section>
```

```typescript
moveSection(sectionId: number, payload: MoveSection): Promise<Section>
```

```typescript
updateSection(sectionId: number, payload: UpdateSection): Promise<Section>
```

```typescript
deleteSection(sectionId: number): Promise<void>
```

### 共同步骤

```typescript
getSharedStep(stepId: number): Promise<SharedStep>
```

```typescript
getSharedSteps(projectId: number, filters?: SharedStepFilters): Promise<SharedStep[]>
```

```typescript
getSharedStepHistory(stepId: number, filters?: Pagination): Promise<SharedStepHistory[]> {
```

```typescript
addSharedStep(projectId: number, payload: AddSharedStep): Promise<SharedStep>
```

```typescript
updateSharedStep(stepId: number, payload: UpdateSharedStep): Promise<SharedStep>
```

```typescript
deleteSharedStep(stepId: number, payload?: DeleteSharedStep): Promise<void>
```

### 状态

```typescript
getStatuses(): Promise<Status[]>
```

```typescript
getCaseStatuses(filters?: Pagination): Promise<CaseStatus[]>
```

### 诉讼

```typescript
getSuite(suiteId: number): Promise<Suite>
```

```typescript
getSuites(projectId: number): Promise<Suite[]>
```

```typescript
addSuite(projectId: number, payload: AddSuite): Promise<Suite>
```

```typescript
updateSuite(suiteId: number, payload: UpdateSuite): Promise<Suite>
```

```typescript
deleteSuite(suiteId: number): Promise<void>
```

### 模板

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

### 测试

```typescript
getTest(testId: number): Promise<Test>
```

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

### 用户

```typescript
getUser(userId: number): Promise<User>
```

```typescript
getCurrentUser(): Promise<User>
```

```typescript
getUserByEmail(email: string): Promise<User>
```

```typescript
getUsers(filters?: UserFilters): Promise<User[]>
```

```typescript
addUser(payload: AddUser): Promise<User>
```

```typescript
updateUser(userId: number, payload: AddUser): Promise<User>
```

### 变量

```typescript
getVariables(projectId: number, filters?: Pagination): Promise<Variable[]>
```

```typescript
addVariable(projectId: number, payload: AddVariable): Promise<Variable>
```

```typescript
updateVariable(variableId: number, payload: AddVariable): Promise<Variable>
```

```typescript
deleteVariable(variableId: number): Promise<void>
```

## 常见问题

### @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 和提交记录判断。

