Cucumber场景大纲执行多增待办项及断言错误,是否可改用普通Scenario?
问题根因
你遇到的报错、执行后出现多余新增项的问题,核心是Scenario Outline的使用逻辑错误:
- Scenario Outline会遍历Examples的每一行,完整执行一次整个场景流程,并非将Examples中同过滤条件的待办项合并为列表传入用例
- 你的场景中固定写死了
I filter the list to show Completed tasks步骤,但Examples里还包含了Active类型的测试数据,运行时逻辑和数据完全不匹配 - 添加完3个待办后的第一个断言步骤,仅校验单个
<Item Displayed>,意味着前两次运行时,加完3个待办后分别只断言存在#1、#2,本身逻辑就不符合预期
解决方案
方案1:使用普通Scenario(完全满足需求,最直观)
你的测试场景并不复杂,完全不需要强行使用Scenario Outline,直接拆分两个普通Scenario即可,逻辑清晰无冗余:
Feature: 筛选待办事项 As a working adult with busy schedules I want to use todo app to filter todo item so that I can check todo item by status Scenario: 筛选已完成待办 Given 我的待办列表为空 When 我添加"First todo item #1" And 我添加"next todo item #2" And 我添加"next todo item #3" Then 我的待办列表应包含以下内容: | First todo item #1 | | next todo item #2 | | next todo item #3 | When 我将"First todo item #1"标记为已完成 Then 待办项"First todo item #1"应被标记为已完成 And 我筛选列表显示已完成任务 Then 我的待办列表应包含以下内容: | First todo item #1 | Scenario: 筛选未完成待办 Given 我的待办列表为空 When 我添加"First todo item #1" And 我添加"next todo item #2" And 我添加"next todo item #3" Then 我的待办列表应包含以下内容: | First todo item #1 | | next todo item #2 | | next todo item #3 | When 我将"First todo item #1"标记为已完成 And 我筛选列表显示未完成任务 Then 我的待办列表应包含以下内容: | next todo item #2 | | next todo item #3 |
如果要匹配你原有英文步骤,把中文步骤替换回你原来的英文表述即可。
方案2:正确使用Scenario Outline(如需复用流程可选择)
如果你确实要复用添加、标记完成待办的流程,需要把过滤类型也作为参数传入场景,修改后的用例如下:
Feature: filter todo item As a working adult with busy schedules I want to use todo app to filter todo item so that I can check todo item by status Scenario Outline: Filter todo item Given my todo list is empty When I add "First todo item #1" And I add "next todo item #2" And I add "next todo item #3" Then my todo list should has followings: | First todo item #1 | | next todo item #2 | | next todo item #3 | When I complete "First todo item #1" Then the todo item called "First todo item #1" should be marked as completed And I filter the list to show <Filter> tasks Then my todo list should has followings: | <Item Displayed> | Examples: | Filter | Item Displayed | | Completed | First todo item #1 | | Active | next todo item #2 | | Active | next todo item #3 |
注意修改后过滤步骤的过滤类型改为了变量<Filter>,和Examples里的Filter列对应,运行时就不会出现逻辑和数据不匹配的问题。
额外排查点
如果你修改用例结构后还是出现标记完成的断言报错,需要检查两个点:
- 每次场景运行前是否清空了应用缓存和数据,避免上一次用例的执行结果影响本次运行
completeTodo.isCompleted()方法是否正确:是否是从整个待办数据集判断完成状态,而非仅从当前页面显示的待办项判断(如果筛选后页面不展示对应待办,直接查询页面元素会返回false)
内容的提问来源于stack exchange,提问作者user2201789
相关产品推荐
相关产品推荐

