Sae*_*eeK 5 ruby cucumber capybara site-prism selenium-webdriver
我想在多个场景的每个黄瓜功能文件中仅执行一次后台。我怎样才能在步骤文件中做到这一点?
特点:用户可以验证............
背景:给定输入特定逻辑的测试数据
场景:验证......1 当A1和B1然后C1时
场景:验证......2 当A2和B2然后C2时
场景:验证......2 当A3和B3然后C3时
小智 5
测试应该是隔离的。这就是 Cucumber 的设计方式,并且有一个很好的理由。除非绝对必要,否则我强烈反对这样做。
如果您需要在整个测试套件之前执行某些操作,请考虑使用 @BeforeAll 挂钩。
也就是说,我以前遇到过这个。我们进行了一些测试,这些测试将启动一个需要很长时间的过程(例如配置虚拟机,一次需要 10 分钟......),但如果已经完成,则可以在其他测试中跳过。
因此,您可能想要按照以下方式设计步骤:
“鉴于..X已经完成”
并在该步骤中检测X是否完成,如果没有,则执行X,如果已完成,则跳过。例如,假设创建用户是一个绝对需要很长时间的过程。那么我们可以做..
Given that user "Joe Bloggs" has been created
步骤定义将首先尝试确定 Joe 是否存在,如果不存在,则创建用户。您遇到了初始启动问题,但其他测试将能够安全地假设 Joe 存在。
为什么你不应该这样做
如果您这样做,您的测试很可能会相互冲突。
假设您有很多使用 Joe Bloggs 用户的测试。也许有人会把他从系统中删除。有些可能会暂时停用用户、添加角色、更改名称……各种各样的事情。所有测试都假设有关他们正在测试的系统的某些事情,并且您故意损害有关环境的测试假设。
如果您正在运行并行测试,情况尤其糟糕。也许您的系统有一项限制,即一次只能有一个人以 Joe 身份登录。或者每个测试都会改变有关 Joe 的大量内容,并且没有测试可以假设有关 Joe 用户状态的任何信息。那么你就会陷入一个巨大的混乱。
最好的解决方案通常是为您运行的每个测试创建全新的数据。打开这些 API 并为每次测试运行创建一次性数据。这是一篇关于它的好博客文章:https ://opencredo.com/test-automation-concepts-data-aliases/