在开始测试多个功能和场景之前执行一次方法
Execute a method once before testing starts for several features and scenarios
在我们的网络应用程序中,登录某个页面需要年龄。我们的功能和场景集是从该特定页面编写的。我们在该页面之前没有任何验证。到达该页面大约需要 10 分钟。
在我进一步解释之前。这是在 Cucumber 中,我们正在使用带有 Java 的 Selenium。
所以应该完成登录操作并且 webdriver 会话应该保持完整,然后场景验证开始。以下功能具有以下场景。每个后续场景都依赖于前一个场景。也就是说,这些场景需要按顺序执行。
第一个功能应该按顺序执行场景。
然后第二个特征应该按顺序执行场景。
在这两者之间,我不想为第二种情况创建新会话。
这些都是顺序依赖的。
我该如何实现?
Feature: Add a product to the quote
So that the quotation can be built on the added product
Scenario: Add a Hub
Given User A has logged in
Then Add button is available
Then Add Hub
Then Enter correct Address details
Then select correct bandwidth
And Save to Quote
Scenario: Add a Spoke
Given User A has logged in
Then Add button is available
Then Add Spoke
Then Enter correct Address details
Then select correct bandwidth
And Save to Quote
Feature: Give discount to the quote for Hub
So that the quotation can be sent to the customer
Scenario: Give 10% discount
Given Hub has already been added
Then Go to the Quote Tab
Then Enter the discount
Then Save the Quote
特征的顺序 运行 - 有两种方法。第一个,取决于黄瓜 运行s 按 字母 顺序排列的事实。因此,相应地命名它们。但是这种方法很容易被一个新的功能文件名破坏,该文件名位于您之前创建的文件名之间。其次,在 cucumberoptions 特征值中指定 运行ning 顺序,例如 运行ner 文件中的 features = "second.feature,first.feature"
。这将首先 运行 second.feature。详情请参阅 this。
在功能文件中保持 driver 活动 - 使用 SharedWebDriver 的概念,其中有一个静态 WebDriver
和一个 JVM shutdown hook 在最后关闭 driver 。尽管您可能需要添加适当的前后钩子来清理 cookie 等。
您应该修复您的 Web 应用程序,以便登录不会花费很长时间,而不是通过尝试在场景之间保留会话来使您的 Cukes 完全不可靠。有时您的测试会给您反馈,您应该根据这些反馈采取行动而不是解决问题;)
因为登录是一件完全微不足道的事情,所以 99.999% 的 Web 应用程序都能快速有效地完成,我很难相信您的应用程序是如此特别以至于您无法做到这一点。如果你不能那么也许你应该创建一个新问题来解释为什么你的登录如此缓慢并找到一些解决方案
在场景之间共享会话意味着共享会话的 none 个 Cukes 可以做任何改变任何数据的事情,而不会使您的场景变得不可靠。这意味着不应允许任何导致 POST 而不是 GET 的交互。所以没有填写表格,提交表格等
你当然可以解决这个问题,但它会产生严重的问题,这些问题只会在稍后出现。然后,当场景开始失败时,您将花费 10 倍的时间来弄清楚它们失败的原因,因为您将必须了解连接场景的整个链条。
在我们的网络应用程序中,登录某个页面需要年龄。我们的功能和场景集是从该特定页面编写的。我们在该页面之前没有任何验证。到达该页面大约需要 10 分钟。
在我进一步解释之前。这是在 Cucumber 中,我们正在使用带有 Java 的 Selenium。
所以应该完成登录操作并且 webdriver 会话应该保持完整,然后场景验证开始。以下功能具有以下场景。每个后续场景都依赖于前一个场景。也就是说,这些场景需要按顺序执行。
第一个功能应该按顺序执行场景。 然后第二个特征应该按顺序执行场景。 在这两者之间,我不想为第二种情况创建新会话。 这些都是顺序依赖的。
我该如何实现?
Feature: Add a product to the quote
So that the quotation can be built on the added product
Scenario: Add a Hub
Given User A has logged in
Then Add button is available
Then Add Hub
Then Enter correct Address details
Then select correct bandwidth
And Save to Quote
Scenario: Add a Spoke
Given User A has logged in
Then Add button is available
Then Add Spoke
Then Enter correct Address details
Then select correct bandwidth
And Save to Quote
Feature: Give discount to the quote for Hub
So that the quotation can be sent to the customer
Scenario: Give 10% discount
Given Hub has already been added
Then Go to the Quote Tab
Then Enter the discount
Then Save the Quote
特征的顺序 运行 - 有两种方法。第一个,取决于黄瓜 运行s 按 字母 顺序排列的事实。因此,相应地命名它们。但是这种方法很容易被一个新的功能文件名破坏,该文件名位于您之前创建的文件名之间。其次,在 cucumberoptions 特征值中指定 运行ning 顺序,例如 运行ner 文件中的 features = "second.feature,first.feature"
。这将首先 运行 second.feature。详情请参阅 this。
在功能文件中保持 driver 活动 - 使用 SharedWebDriver 的概念,其中有一个静态 WebDriver
和一个 JVM shutdown hook 在最后关闭 driver 。尽管您可能需要添加适当的前后钩子来清理 cookie 等。
您应该修复您的 Web 应用程序,以便登录不会花费很长时间,而不是通过尝试在场景之间保留会话来使您的 Cukes 完全不可靠。有时您的测试会给您反馈,您应该根据这些反馈采取行动而不是解决问题;)
因为登录是一件完全微不足道的事情,所以 99.999% 的 Web 应用程序都能快速有效地完成,我很难相信您的应用程序是如此特别以至于您无法做到这一点。如果你不能那么也许你应该创建一个新问题来解释为什么你的登录如此缓慢并找到一些解决方案
在场景之间共享会话意味着共享会话的 none 个 Cukes 可以做任何改变任何数据的事情,而不会使您的场景变得不可靠。这意味着不应允许任何导致 POST 而不是 GET 的交互。所以没有填写表格,提交表格等
你当然可以解决这个问题,但它会产生严重的问题,这些问题只会在稍后出现。然后,当场景开始失败时,您将花费 10 倍的时间来弄清楚它们失败的原因,因为您将必须了解连接场景的整个链条。