📝 🚆
QuizTrainQuizTrain 是 Venmo 创建的一个框架,允许您使用 Swift 与 TestRail 的 API交互。它支持 iOS、macOS、tvOS 和 watchOS。
要使用 QuizTrain,您必须拥有有效的TestRail 许可证和实例来访问。
许可
QuizTrain 是在 MIT 许可下发布的开源软件。有关详细信息,请参阅 LICENSE 文件。
安装
Carthage
升级到最新版本的 Carthage 后,将以下内容添加到您的 Cartfile
或者 Cartfile.private
文件中
github "venmo/QuizTrain" ~> 2.1.0
有关进一步说明,请参见 向应用程序添加框架。完成后,在您想使用 QuizTrain 的任何 Swift 文件中导入 import QuizTrain
Cocoapods
在你的 Podfile
中添加以下行到你的目标并保存文件
pod 'QuizTrain', '~> 2.1.0'
运行 pod install
,打开你的项目 .xcworkspace
文件,你现在应该在代码中能 import QuizTrain
使用方法
创建一个 ObjectAPI
来获取、添加、更新、删除以及在 TestRail 实例上关闭条目。
let objectAPI = ObjectAPI(username: "[email protected]", secret: "your_api_key_or_password", hostname: "yourInstance.testrail.net", port: 443, scheme: "https")
或者,如果您更愿意使用基本 Swift 类型进行工作,您可以直接使用 API
。通常,使用 ObjectAPI
比 API
更好,因为 API
是一个更低级的抽象。对于差异,请参阅 API.swift 和 ObjectAPI.swift 中的注释。
示例项目
查看 QuizTrain Example 项目,了解如何将 QuizTrain 与 iOS 上的单元测试和 UI 测试集成。
示例代码
以下展示了一些示例。要查看所有示例,请参阅 ObjectAPITests.swift。
获取项目中的所有用例
objectAPI.getCases(inProjectWithId: 5) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(let cases):
print(cases) // Do something with cases.
}
}
添加一个用例
let section: Section = ...
let newCase = NewCase(estimate: nil, milestoneId: nil, priorityId: nil, refs: nil, templateId: nil, title: "New Case Title", typeId: nil, customFields: nil)
objectAPI.addCase(newCase, to: section) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(let `case`):
print(`case`.title) // Do something with the newly created `case`.
}
}
更新一个套餐
var suite: Suite = ...
suite.description = "Updated description for this suite."
suite.name = "Updated name of this suite."
objectAPI.updateSuite(suite) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(let updatedSuite):
print(updatedSuite.description) // "Updated description for this suite."
print(updatedSuite.name) // "Updated name of this suite."
}
}
删除一个部分
let section: Section = ...
objectAPI.deleteSection(section) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(_): // nil on successful deletes
print("The section has been successfully deleted.")
}
}
关闭一个计划
let plan: Plan = ...
objectAPI.closePlan(plan) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(let closedPlan):
print(closedPlan.isCompleted) // true
print(closedPlan.completedOn) // timestamp
}
}
获取一个关系
let milestone: Milestone = ...
milestone.parent(objectAPI) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(let optionalParent):
if let parent = optionalParent {
print("Milestone \(milestone.id) has a parent with an id of \(parent.id).")
} else {
print("Milestone \(milestone.id) does not have a parent.")
}
}
}
使用单个过滤器获取项目中的完成运行
let filters = [Filter(named: "is_completed", matching: true)]
objectAPI.getRuns(inProjectWithId: 3, filteredBy: filters) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(let completedRuns):
for completedRun in completedRuns {
print(completedRun.isCompleted) // true
}
}
}
使用多个过滤器获取项目中的计划
let project: Project = ...
let filters = [Filter(named: "offset", matching: 3),
Filter(named: "limit", matching: 5)]
objectAPI.getPlans(in: project, filteredBy: filters) { (outcome) in
switch outcome {
case .failure(let error):
print(error.debugDescription)
case .success(let plans): // There will be 5 or less plans.
for plan in plans {
print(plan.name)
}
}
}
错误
查看错误文档。