将一个场景的输出作为黄瓜中另一个场景的输入

时间:2016-12-14 07:49:48

标签: cucumber

我正在使用黄瓜与硒一起测试java web应用程序。以下是我们的方案

slcan

现在它根据这么多的计算在数据库中生成一个PIN。现在我需要特定的PIN,将其作为不同场景的输入。我怎么能实现这个目标?提前谢谢。

3 个答案:

答案 0 :(得分:0)

我认为在上述情况之后您可以访问数据库中的PIN。在这种情况下,我会再添加一个步骤来获取 - 并确认 - 确实生成了PIN。此时,您可以将PIN存储在本地变量中,然后在下一个场景中使用它。

所以你的第一个场景看起来像这样:

Get generate PIN page
Enter user name
Enter password
Click on submit button
Confirm PIN number in database

最后一步不会在Selenium中完成,而是通过API调用或其他方式从数据库中获取PIN。它将确认PIN(例如; regex=/^\d{4}$/),然后将其存储在本地变量中,例如@customer_pin(假设您正在使用Ruby)。

你的下一个场景将从这样的事情开始:

Get generate login page
Enter customer ID
Enter customer PIN
etc

当您点击"输入客户PIN"步骤,您从本地存储的变量(@customer_pin)中拉出它。

我的建议是,在执行第二个方案时,您确认在本地存储的变量中有合法的PIN,以防有人不按顺序运行此方案。您可以通过使用全局变量并运行"之前"挂钩features/support/env.rb文件,如下所示:

Before do
  $dunit ||= false
  return if $dunit
  $customer_pin = nil
  $dunit = true
end

在这种情况下,我使用$customer_pin代替@customer_pin,以使变量可全局访问。然后在运行第一个方案后,$customer_pin将被分配给合法值,以便可以在任何后续方案中使用它。后续方案将使用正则表达式来确认它具有合法值,如果不是则引发/抛出异常。

答案 1 :(得分:0)

我会把你的问题分成两部分。

验证引脚生成的那个可能对您的利益相关者很重要。

实现后门以支持需要有效PIN的其他情况的人。也许是一个能够生成或检索有效密码的API。也许在数据库中创建并存储PIN而无需从外部触摸系统。每当我需要有效的PIN用于其他场景时,我会使用这种方式来检索PIN。

如何获得有效PIN的技术解决方案并不重要。重要的是解耦场景的执行顺序。方案的执行顺序未定义。每个场景必须能够以隔离的方式随机执行。

耦合方案是一种众所周知的反模式herehere

答案 2 :(得分:0)

要解决这种情况,您必须使用Cucumber 背景功能,这在每个步骤之前运行。并将根据给定的输入生成PIN,然后生成的PIN将在各个方案中可用。

根据您的要求查找要素文件定义。

Background: 
    Given   I Get generate PIN page
    Then    I Enter user name
    And     Enter password 
    And     I Click on submit button
    And     I Confirm PIN number in database


@TC01_GetUserInformationByPinTest @NoBrowser 
Scenario: Get User information by generated PIN from background. 
    Given  I Get User Information by using generated PIN
    And    I verified that given username is same as response Data 

我相信这有助于您解决问题。