【问题标题】:How to make cucumber test steps run half steps only on Chrome and rest of the steps on different browsers?如何使黄瓜测试步骤仅在 Chrome 上运行半步,其余步骤在不同浏览器上运行?
【发布时间】:2019-05-08 13:43:33
【问题描述】:

我的黄瓜测试有多个步骤。例如下面的测试:

Given I navigate to my setup application
And I published an article
When I open client website
Then I can see the published article

Step1 和 Step2 是设置步骤,需要在设置网站上运行,并且仅在 chrome 上运行一次以创建场景设置。完成后,需要在客户端网站上的不同浏览器/设备(IE、Chrome、Firefox、Safari、Mobile)上检查第 3 步和第 4 步。

我的框架使用 Cucumber 和 JavaScript。我如何在黄瓜中实现这一点,即场景的某些步骤仅在 chrome 上运行一次,其余步骤应在不同的设备和浏览器上运行?

我相信我不能使用之前和之后的钩子,因为每个测试的设置步骤都不同,但是,在框架中的所有测试运行之前和之后的钩子。另外,不能使用背景,因为背景将再次成为背景每个功能文件中的所有测试。但就我而言,每个测试都有不同的设置。

【问题讨论】:

  • 所有这些步骤都是独立的吗?
  • 每一步都需要执行上一步。就像第一步一样,我们正在打开应用程序。如果应用程序无法打开,则无法执行第二步,即在第一步打开的网站上创建文章。与执行第 3 步类似,要求必须已执行第 1 步和第 2 步。好像文章没有创建,那么不需要打开客户端应用程序并在那里查看创建的文章

标签: javascript cucumber cucumberjs


【解决方案1】:

为什么您需要在此特定场景中执行前两个步骤才能通过浏览器。您肯定知道发表的文章只是您数据存储中的一条记录。当然,您可能有一些场景表明您可以使用 Web 界面创建文章,例如

Scenario: Create article
  Given I can create an article
  When I create an article
  Then I should have created an article

但是一旦你有了这些,你就不再需要在每次需要创建文章时都通过 Web 界面。相反,您可以通过

1) 直接调用创建文章的服务(首选) 2) 直接写入数据库,创建相应的文章记录

所以你的场景会变成这样

Scenario: View my published article
  Given I have published an article  # shortcuts and does not use a browser
  When I view my article             # uses a browser
  Then ...

现在你的场景只使用一个浏览器,你的问题已经消失了。您现在可以使用多种技术来确保您可以在各种浏览器中查看文章。

Givens 的这种快捷方式模式以及仅在何时使用 UI 的额外好处是使您的场景更快。你不能轻易地为每一个 Givens 使用它,像“Given 我已登录”之类的东西需要通过浏览器,但绝大多数 Givens 可以是快捷方式。

【讨论】:

  • 我们已经在需要的框架中提供了这种方法。但它不能使用的场景是因为我们确实有两个应用程序,由两种类型的用户使用。所以第一个站点的数据是由一种类型的用户创建的,需要进行验证。
  • 那又怎样,您是说您没有可以直接写入数据库的两个站点的测试环境,或者您不知道第一个站点将给出的响应来自第二个站点的请求。如果您有其中任何一个,您可以快捷方式和/或模拟/存储来自第一个站点的响应(查看 VCR github.com/vcr/vcr)。确实没有必要在一种情况下使用两种不同的浏览器访问两个站点。
【解决方案2】:

不确定这是否是个好主意,但这是你想要的:

Scenario Outline: Multiple browsers
  Given I navigate to my setup application
  And I published an article
  When I open client website with "<browser>"
  Then I can see the published article with "<browser>"

Examples:
 | browser  |
 | IE       |
 | Chrome   |
 | Firefox  |
 | Safari   | 
 | Mobile   |

https://cucumber.io/docs/guides/10-minute-tutorial/#using-variables-and-examples

在步骤定义中,您必须设置正确的 webdriver。检查https://github.com/bonigarcia/webdrivermanager

【讨论】:

  • 按照您设计场景大纲的方式,它将执行实际场景 5 次,每次,一个完整场景的所有步骤都将在同一个浏览器中执行,而不是按照询问的查询。
  • 我不这么认为。创建依赖场景是反模式。运行一次后台也是反模式。如果您正确阅读了我的答案,我会在此处提到,有必要在步骤定义中设置正确的网络驱动程序,并且可以在 Chrome 中运行一步,在 IE 中运行第二步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多