我正在从这个 Calabash-iOS 组线程中跟进您的问题。不能告诉你太多 TeamCity 或 Selenium,我们正在使用 Bamboo 和 JIRA,我刚刚开始研究 Calabash 测试与 JIRA 的集成。
(A) 部分
TeamCity、Bamboo 或 Jenkins 之间应该没有什么大的区别。它们都支持运行自定义 shell 脚本。你需要在你的 CI 盒子上安装 Ruby 和所有需要的 gem(黄瓜、葫芦黄瓜和其他)。这是我们用于测试的 Bamboo CI 计划示例
- 结帐 iOS 应用程序代码
- 将葫芦框架添加到应用程序(使用 calabash-ios 设置的 shell 脚本)
- 构建葫芦测试目标(使用 xcodebuild 的 shell 脚本)
- Checkout Cucumber 测试代码(我们将其保存在单独的仓库中)
- 对 iOS 应用测试目标运行黄瓜测试
最后一部分是一个简单的 shell 脚本,类似于
cucumber -p smoke-test
这将运行冒烟测试配置文件并以 HTML 格式创建测试报告。然后你可以使用 Cucumber Test Report 插件。我肯定知道 Jenkins 和 Bamboo 有一个,所以 TeamCity 应该有一个,或者干脆选择 HTML 并将其作为测试结果发布。
(B) 部分
我刚开始研究,这里有一些发现。
Atlassian CLI
Atlassian 的所有产品都有一套 CLI,这是他们市场上的链接。这是一套完整的工具,如果您不想下载所有工具,可以在市场上搜索 JIRA-only 包。
这些工具具有适用于类 UNIX 系统的.sh脚本和适用于 Windows 的.bat文件。这是jira 命令的文档,这里有一些示例。在 CI 盒上安装工具,更新所有路径,您将能够从 CI 任务甚至 Cucumber 步骤和场景挂钩中使用 Atlassian 命令。
对于 Mac OS X,有几个用于atlassian和jira cli 的自定义 homebrew tap,但每个都以不同的方式安装工具,而且两者都已过时并安装旧版本的 cli。
此外,还有一个名为jira-ruby的 Ruby gem ,你必须在 Mac OS X 上安装atlassian-plugin-sdk homebrew tap。我还没有尝试使用这个 gem,但它看起来很有希望。
使用标签和场景挂钩
这就是我现在正在尝试做的事情。
使用 JIRA,您肯定会遇到项目的用户故事、错误和其他类型的问题。通常 Cucumber Scenario 将与某个用户故事相关,或者您可以为一个用户故事有多个场景,甚至可以在多个用户故事之间共享一个场景。
我们还有一些场景是针对 JIRA 中特定错误的回归测试。
无论如何,您可以使用标签将 Calabash/Cucumber 场景链接到 JIRA 问题和项目。使用项目名称标记每个功能,例如@JIRA-PROJECT-<PROJECT-NAME>,还使用 JIRA 问题名称标记场景@JIRA-ISSUE-<ISSUE-NAME>。
这是一个例子
@JIRA-PROJECT-X
Feature: Some Feature for project X
Feature Description
@JIRA-ISSUE-X-123
Scenario: Some Scenario for User Story or Bug X-111
<steps>
然后使用After Scenario Hooks。执行钩子时,您将拥有Scenario类的场景对象。该对象包含更新 JIRA 所需的所有信息。已经过去了?失败了?方法,更重要的是,所有的标签。
puts scenario.source_tag_names.join(", ")
# => @JIRA-ISSUE-X-123, @JIRA-PROJECT-X
现在您可以从标签中找出 JIRA 项目和所有相关问题,并为每个问题创建测试会话。测试会话只是具有适当父级的“测试”类型的另一个问题。请参阅下面的粗略示例,需要对其进行修改以为与场景相关的每个问题创建测试会话。
After do |scenario|
project = scenario.source_tag_names.find { |t| t.start_with?("@JIRA-PROJECT") }.gsub("@JIRA-PROJECT-", "")
issue = scenario.source_tag_names.find { |t| t.start_with?("@JIRA-ISSUE") }.gsub("@JIRA-ISSUE-", "")
summary = "<Test Summary, passed or failed, etc..."
# use proper jira executable name depending on your installation
system("jira.sh -s <jira-server> -u <jira-user> -p <jira-password> -a createIssue --project #{project} --type test --summary '#{summary}' --parent #{issue}")
# the same can be done using jira-ruby gem
end
测试完成后更新 JIRA
另一种方法是让 Calabash 先运行它的过程,然后解析 HTML 报告并用单个批次的测试结果更新 JIRA。JIRA CLI 有一个名为run的特殊操作(还有runFromCsv和其他操作)。
您可以使用场景挂钩将 JIRA 操作写入文件,并在测试完成后将此文件与 JIRA CLI运行操作一起使用,而不是解析 HTML。
附言
由于我是第一次这样做(整个 Calabash 和 JIRA 集成),我不能确定这是做事的正确方法。JIRA 有一些名为Behave的插件,这可能就是您所需要的。不过,我不知道它是否与 Calabash 搭配得很好。