如何在Cucumber Gherkin同一场景下实现双用户操作的库存售罄模拟测试
双用户并发库存售罄冲突的Cucumber Gherkin场景落地方案
核心设计要求
- 必须将待测商品初始库存设置为临界值(即刚好1件),绝对不能以零库存为测试起点——零库存场景下用户1从第一步就看不到可售商品,完全无法走完加购、校验售罄提示的完整流程,达不到测试目标
- 严格匹配Gherkin关键字的语义,避免流程逻辑混乱
你纠结的步骤关键字选择结论
那个“保留user1会话不重置、新开user2操作窗口”的衔接步骤,明确用And定义,绝对不要用Given。
原因很直接:Given的语义是测试流程启动前就需要完成的全局前置状态,属于场景最开头的部分;这个新开窗口的动作是顺着user1已完成加购的流程顺承执行的操作,不属于前置准备范畴,用And衔接完全符合Gherkin的规范要求。
另外修正你原流程里的一个常见误区:用户执行加购、下单这类交互操作,应该用When关键字定义,不要误用Then——Then的唯一作用是写操作完成后的结果校验,混同使用会让场景可读性大幅下降。
完整可运行的场景示例
Scenario: 临界库存下双用户并发的售罄冲突校验 # 全局前置前提,仅放在场景最开头 Given 测试环境内限量待测商品的实时库存为1件 Given 用户1在独立浏览器会话中访问电商站点 When 用户1将该限量待测商品加入自身购物车 # 顺承动作全部用And衔接,不插入新的Given And 保留用户1的浏览器会话不重置,对应窗口保持挂起状态 And 用户2在全新隔离的浏览器会话中访问同一电商站点 When 用户2将同款限量待测商品加入自身购物车 When 用户2完成该商品的全流程支付下单 And 完成下单后关闭用户2的操作会话窗口 And 切回用户1的挂起浏览器会话,不重置其登录状态与购物车内容 # 最终校验断言,仅用Then Then 用户1尝试提交购物车完成支付时,页面弹出明确提示「该商品已售罄,无法完成购买」
落地时的避坑提示
- 两个用户的浏览器上下文必须完全隔离,不能共享Cookie、本地存储,否则会出现会话串扰,导致模拟的“双用户独立操作”完全失效
- 不要在场景执行中段插入Given步骤:这类步骤会触发框架的状态重置逻辑,大概率会把之前保留的user1会话清空,直接违背测试设计初衷
- 不要把初始库存设置为大于1的数值:库存冗余的情况下,两个用户先后下单都能成功,根本不会触发售罄逻辑,测试场景就失去了临界校验的意义
内容的提问来源于stack exchange,提问作者Renato G. Nunes
相关产品推荐
相关产品推荐

