测试自动化 - TeamCity + Calabash + JIRA + SpiraTest

4
我对TeamCity/SpiraTest是新手,有以下要求: (a) 我们必须让TeamCity运行Calabash测试 (b) 如果有失败,则必须将缺陷与截图记录到JIRA中 (c) 最后在SpiraTest(我们的测试管理工具)中更新通过/失败状态
我遇到了另一个主题:Test Automation: TeamCity with Selenium and SOAPUI and Calabash;但我无法在那里提问,所以在此发布一个新主题。
(A) 请详细介绍和指导如何配置TeamCity运行calabash-ios测试?
(B) 如果您知道如何将结果集成到测试管理工具SpiraTest中,并获得在JIRA中记录失败测试的缺陷,那将是一个很好的帮助。期待您的回复。
非常感谢。
1个回答

3
我正在跟进您在this Calabash-iOS group thread中的问题。 我对TeamCity或Selenium不是很了解,我们使用的是Bamboo和JIRA,并且我刚开始研究将Calabash测试与JIRA集成。

(A)部分

在TeamCity、Bamboo或Jenkins之间不应该有太大的区别。它们都支持运行自定义shell脚本。你需要在CI盒子上安装Ruby以及所需的所有gems(cucumber、calabash-cucumber等等)。 这是我们用于测试的Bamboo CI计划示例:

  • 检出iOS应用程序代码
  • 向应用程序添加calabash框架(使用calabash-ios setup的shell脚本)
  • 构建calabash测试目标(使用xcodebuild的shell脚本)
  • 检出Cucumber测试代码(我们将其保存在单独的repo中)
  • 针对iOS应用程序测试目标运行cucumber测试

最后一部分是一个简单的shell脚本,类似于

cucumber -p smoke-test

这将运行烟雾测试配置文件并创建HTML格式的测试报告。 然后您可以使用Cucumber测试报告插件。我确定Jenkins和Bamboo都有一个,所以应该也有一个适用于TeamCity,或者只需选择HTML并将其发布为测试结果。
第二部分
我刚开始研究这个问题,以下是一些发现。
Atlassian CLI
Atlassian为其所有产品提供了一套CLI在它们的市场上链接在此。 这是完整的工具集,如果您不想下载全部工具,请在市场上搜索仅适用于JIRA的软件包。
该工具集具有UNIX类系统的 .sh 脚本和Windows的.bat 文件。 这里是jira命令的文档,这里还有一些示例。 在CI盒子上安装工具,更新所有路径,您就可以从CI任务甚至从Cucumber步骤和场景挂钩中使用Atlassian命令。
对于Mac OS X,有一些针对atlassianjira cli的自定义homebrew taps,但每个tap以不同的方式安装工具,并且两者都已过时并安装旧版本的cli。
此外,还有一个名为jira-ruby的Ruby gem,您需要在Mac OS X上安装atlassian-plugin-sdk homebrew tap。我还没有尝试使用这个gem,但它看起来非常有前途。

使用标签和场景钩子

这是我现在正在尝试做的事情。
使用JIRA,您肯定会有那些与项目相关的用户故事、错误和其他类型的问题。 通常,Cucumber Scenario将与某个User Story相关联,或者您可以为一个User Story编写多个Scenario,甚至可以在多个User Story之间共享一个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>

然后使用场景后钩子。执行钩子时,您将拥有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 CLI的特殊操作run(也可以是runFromCsv等)一次性更新JIRA测试结果。

你可以使用场景钩子将JIRA操作写入文件,然后在测试完成后使用该文件与JIRA CLI的run操作。

P.S.

由于我第一次进行此操作(整个Calabash和JIRA集成),所以不能确定这是否是正确的做法。 有一个名为Behave的JIRA插件,可能是您需要的。不过我不知道它是否与Calabash兼容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接