我有一组功能类似的网站,我想写黄瓜规格来推动开发和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'
一种选择是将此配置存储在某处,然后使用脚本生成特定于站点的小黄瓜文件。然后我可以运行这些生成的小黄瓜,其中包含所需的示例
我想知道是否有更简单的方法。我的另一个想法是,如果我可以使用表转换来替换示例块。我有一个读取,但据我所知,我只能转换一个表(并用一个自定义代码块替换它),如果它是一个步骤中的内联表。我无法以相同的方式转换示例块。
我理解正确吗?关于如何最好地实现这一目标的任何其他建议?
答案 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并通过依赖注入将其提供给步骤定义文件。您可以通过从不同的配置加载来使其特定于站点。您在其构造函数中建议的文件。步骤定义可以从配置中提取相关的站点特定数据。类的属性。我认为这会使你的场景更具可读性和更不易碎。