我只想在多个场景的每个 cucumber 功能文件中执行一次后台。我怎样才能在步骤文件中做到这一点?
特点:用户可以验证......
背景: 给定输入特定逻辑的测试数据
场景:验证......... 1 当A1 和B1 然后C1
场景:验证......... 2 当A2 和B2 然后C2
场景:验证......... 2 当A3 和B3 然后C3
最佳答案
测试应该被隔离。这就是 Cucumber 的设计方式,这是有充分理由的。除非绝对必要,否则我会强烈反对它。
如果您需要在整个测试套件之前执行某些操作,请考虑使用 @BeforeAll Hook 。
也就是说,我以前遇到过这种情况。我们有一些测试会启动一个需要很长时间的过程(例如配置 VM,一次需要 10 分钟......),但如果已经完成,可以在其他测试中跳过。
因此您可能希望按照以下方式设计步骤..
“鉴于.. X已经完成”
并在步骤中检测X是否完成,如果没有,则执行X。如果完成,则跳过。例如,假设创建用户是一个绝对需要很长时间的过程。然后我们可以做..
鉴于已创建用户“Joe Bloggs”
步骤定义将首先尝试确定 Joe 是否存在,然后如果不存在,则创建用户。您有一个初始启动问题,但随后其他测试将能够安全地假设 Joe 存在。
为什么你不应该这样做
如果您这样做,您的测试很可能会相互冲突。
假设您有很多使用 Joe Bloggs 用户的测试。也许有些人会把他从系统中删除。有些人可能会暂时停用用户、添加角色、更改他们的名字……各种各样的事情。所有测试都假设了他们正在测试的系统的某些事情,而你是在故意破坏你的测试假设。
如果您正在运行并行测试,则情况尤其糟糕。也许您的系统有一个限制,即一次只能有一个人以 Joe 的身份登录。或者每个测试都在改变有关 Joe 的负载,并且没有任何测试可以假设有关 Joe 用户状态的任何信息。那样你就会陷入一片困惑。
最好的解决方案通常是为您运行的每个测试创建全新的数据。打开这些 API 并为每次测试运行创建一次性数据。这是一篇关于它的好博客文章:https://opencredo.com/test-automation-concepts-data-aliases/
关于ruby - 想在多个场景的 Cucumber 特性文件中只执行一次 Background,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752426/