0

我有一组功能相似的网站,我想编写黄瓜规范以驱动开发和 selennium 浏览器测试。该站点使用不同的语言并具有不同的 URL,但主要具有相同的功能。

一个示例场景可能是

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'

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

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

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

4

1 回答 1

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 并查看网络自动化部分(它详细介绍了网络自动化金字塔)。

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

于 2012-09-27T13:09:21.977 回答