我正在通过this Calabash-iOS group thread 跟进您的问题。
无法告诉您太多 TeamCity 或 Selenium,我们正在使用 Bamboo 和 JIRA,而我刚刚开始研究将 Calabash 测试与 JIRA 集成。
(A)部分
TeamCity、Bamboo 或 Jenkins 之间应该没有太大区别。它们都支持运行自定义 shell 脚本。你需要在你的 CI 盒子上安装 Ruby 和所有需要的 gem(黄瓜、葫芦黄瓜和其他)。
这是我们用于测试的 Bamboo CI 计划示例
- 结帐 iOS 应用代码
- 将葫芦框架添加到应用程序(使用calabash-ios设置的shell脚本)
- 构建 calabash 测试目标(使用 xcodebuild 的 shell 脚本)
- 签出 Cucumber 测试代码(我们将其保存在单独的 repo 中)
- 对 iOS 应用测试目标运行 cucumber 测试
最后一部分是一个简单的shell脚本,类似
cucumber -p smoke-test
这将运行冒烟测试配置文件并以 HTML 格式创建测试报告。
然后你可以使用 Cucumber Test Report 插件。我确定 Jenkins 和 Bamboo 有一个,所以 TeamCity 应该有一个,或者干脆选择 HTML 并将其作为测试结果发布。
(B)部分
我刚开始研究,这里有一些发现。
Atlassian CLI
Atlassian 为其所有产品提供一组 CLI,here's the link on their marketplace。
这是一套完整的工具,如果您不想全部下载,可以在市场上搜索仅 JIRA 包。
这些工具具有适用于类 UNIX 系统的 .sh 脚本和适用于 Windows 的 .bat 文件。
这里是documentation for jira command,这里是some examples。
在您的 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 将与某个 User Story 相关,或者您可以为一个 User Story 设置多个场景,甚至可以在多个 User Stories 之间共享一个场景。
我们还有一些场景是针对 JIRA 中特定错误的回归测试。
无论如何,您可以使用标签将 Calabash/Cucumber 场景链接到 JIRA 问题和项目。
使用项目名称标记每个功能,例如 @JIRA-PROJECT-,还使用 JIRA 问题名称标记场景 @JIRA-ISSUE-.
这是一个例子
@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 class 的scenario 对象。
该对象包含更新 JIRA 所需的所有信息。
它有 passed? 和 failed? 方法,更重要的是,所有的标签。
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 run 操作一起使用,而不是解析 HTML。
附言
由于我是第一次这样做(整个 Calabash 和 JIRA 集成),我不能确定这是做事的正确方式。
JIRA 有一些插件,称为Behave,可能就是您需要的。不过,我不知道它是否与 Calabash 搭配得很好。