我正在将黄瓜与硒组合用于测试java web应用程序。以下是我们的情景将一个场景的输出作为输入输入到另一个黄瓜场景中
get generate PIN page
enter user name
enter password
click on submit button
现在它根据这么多的计算在数据库中生成一个PIN。现在我需要特定的PIN码,将其作为不同场景的输入。我怎么能做到这一点?提前致谢。
我正在将黄瓜与硒组合用于测试java web应用程序。以下是我们的情景将一个场景的输出作为输入输入到另一个黄瓜场景中
get generate PIN page
enter user name
enter password
click on submit button
现在它根据这么多的计算在数据库中生成一个PIN。现在我需要特定的PIN码,将其作为不同场景的输入。我怎么能做到这一点?提前致谢。
我会假设你可以在上述场景之后访问数据库中的PIN码。既然如此,我会在获得并确认PIN确实生成的场景中增加一步。此时,您可以将PIN存储在本地变量中,然后在下一个场景中使用它。
所以,你的第一个场景是这样的:
Get generate PIN page
Enter user name
Enter password
Click on submit button
Confirm PIN number in database
最后一步不会被内硒完成,但通过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
将被分配到一个合法值,以便可以在任何后续场景中使用它。后续场景将使用正则表达式来确认它具有合法值,如果不是,则引发/抛出异常。
您的建议是基于场景的执行顺序并依赖于场景的成功。我会建议不要假设执行顺序,并期望从其他场景获得成功。这是众所周知的反模式。 –
总的来说,我同意,但像生活中的大多数事情一样......这取决于。上述案例可能是打破编程模式的良好借口的糟糕例子,因此您的关注很受欢迎。但有时候我会本着大好事的精神破除模式。例如,将较小的测试作为垫脚石进行较大的测试可能比为每个测试重复背景设置更有利并且侵入性更小。 –