多变量场景大纲示例的黄瓜变换

时间:2012-09-08 11:25:06

标签: ruby selenium tdd cucumber automated-tests

我有一组功能类似的网站,我想写黄瓜规格来推动开发和selennium浏览器测试。该网站使用不同的语言,并且具有不同的网址,但主要具有相同的功能。

示例场景可能是

Scenario Outline: Photo Gallery Next Action
  Given I visit a "<photo-gallery-page>"
  When I click "<next-button>" in the gallery
  Then the photo should advance
    Examples:
      | photo-gallery-page | next-button |
      | www.site1.com/photo-gallery | Next |
      | www.site2.com/la-galerie-de-photos | Suivant |

当我有少量场景和示例时,这很好。但是我预计会有数百个场景并且会定期推出新网站。我想避免在启动新网站时编辑每个方案以添加示例。

我认为我需要将所有示例变量存储在每个站点配置中,以便我可以针对所有站点运行相同的场景。然后我可以相当容易地添加新配置,并避免编辑所有场景示例并使其不可读。

site[:en].photo-gallery-page = 'www.site1.com/photo-gallery'
site[:fr].photo-gallery-page = 'www.site2.com/la-galerie-de-photos'
site[:en].next-button = 'Next'
site[:fr].next-button = 'Suivant'

一种选择是将此配置存储在某处,然后使用脚本生成特定于站点的小黄瓜文件。然后我可以运行这些生成的小黄瓜,其中包含所需的示例

我想知道是否有更简单的方法。我的另一个想法是,如果我可以使用表转换来替换示例块。我有一个读取,但据我所知,我只能转换一个表(并用一个自定义代码块替换它),如果它是一个步骤中的内联表。我无法以相同的方式转换示例块。

我理解正确吗?关于如何最好地实现这一目标的任何其他建议?

1 个答案:

答案 0 :(得分:0)

我想知道是否有更好的方法......这一切都让人觉得非常脆弱。

如果:

Given I follow a link to the gallery "MyGallery"
And the gallery "MyGallery" contains the following photos:
|PhotoID|PhotoName|
|1      |MyPhoto1 |
|2      |MyPhoto2 |
And the photo "MyPhoto1" is displayed
When I view the next photo
Then the next photo "MyPhoto2" should be displayed

请注意,您已经采用了按钮名称等概念 - 可能在步骤定义中更好地定义的实现细节。您定义的行为只是去画廊,查看图像,请求下一个图像,查看下一个图像。在步骤定义中定义

我在http://cuke4ninja.com/找到了一些对此主题非常有用的阅读材料。下载PDF并查看Web自动化部分(它详细说明了Web自动化金字塔)。

要解决您的配置问题,也许您可​​以定义某种配置。 class并通过依赖注入将其提供给步骤定义文件。您可以通过从不同的配置加载来使其特定于站点。您在其构造函数中建议的文件。步骤定义可以从配置中提取相关的站点特定数据。类的属性。我认为这会使你的场景更具可读性更不易碎。