Cucumber 测试用例在 运行 一起时失败,但在 运行 单独时通过

Cucumber test cases fail when run together but pass when run individually

我正在使用 SpringBoot 和 Cucumber。一个特定的测试用例在 运行 一起时失败,在 运行 单独时通过。同一功能文件中的其他场景似乎工作正常。我尝试了以下链接,但它们没有用。

现在我 运行 别无选择。请帮忙。

特征文件:

Scenario Outline: To check if the service returns all the ids when more than 10000 Ids are returned by the query
Given sample request <payload>
 When the new end point is invoked
 Then the service returns <idCount> Ids

Examples: 
  | payload          | idCount | 
  | sample-payload-1 | 17575   | 
  | sample-payload-2 | 4       | 
  | sample-payload-3 | 23535   | 
  | sample-payload-4 | 34535   | 

步骤定义文件:

public class MyStepdefs extends AbstractStepsDefs {

@Autowired
MyController myController;

private String requestPayload;

private List<String> ids;

@Given("^sample request (.+)$")
public void sample_request_something(String payload) throws Throwable {
    this.requestPayload = payload;
}

@When("^the new end point is invoked$")
public void the_new_end_point_is_invoked() throws Throwable {
    String responseJSON = MyUtil.getPostResponseJSON(myController, "/ids", requestPayload);
    responseJSON = responseJSON.replace("[", "").replace("]", "").replaceAll("\"", "");
    ids = Arrays.asList(responseJSON.split(","));
}

@Then("^service returns list of available (.+)$")
public void service_returns_list_of_available_something(String ids) throws Throwable {
    List<String> list = Arrays.asList(ids.split(","));
    Assert.assertTrue(this.ids.containsAll(list));
}

@Then("^the service returns (.+) ids$")
public void the_service_returns_ids(String idCount) throws Throwable {
    System.out.println("Actual Size:" + this.ids.size());
    System.out.println("Expected Size:" + Integer.parseInt(idCount));
    Assert.assertEquals(this.ids.size(), Integer.parseInt(idCount));
}

@After
@Before
public void cleanUp() {
    ids = null;
}

}

现在我 运行 别无选择。请帮忙。

更新 1: stepdef class 中的第二个 then 块失败。 sample-payload-1 和 sample-payload-2 通过,但其他两个失败。即使更改了样本有效载荷的顺序,测试也会失败。

我得到的错误是断言错误,因为 ids 列表的大小不相同。但是当我 运行 单独进行相同的测试时,我不会收到此错误,因为大小匹配。

问题出在 实例变量 上,我曾将其用作 counter 来循环触发查询并提取结果的逻辑。第一个测试样本 [sample-payload-1] 将单独工作正常,因为它有实例 counter 的新副本。后续样本将只有 altered counter 值。

这解释了为什么测试用例在 运行 时单独通过,因为没有另一个测试会使用 altered counter.

修复: 修复是在我退出 implementation/service class 之前将 counter 重置回 0 所以后续请求将有一个新的 counter

经验教训: 如果封闭 Class 的 scopeSingleton,则永远不要依赖实例变量。每次调用 Class

中的方法时,该值都会不断变化