在开始测试多个功能和场景之前执行一次方法

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 倍的时间来弄清楚它们失败的原因,因为您将必须了解连接场景的整个链条。