我正在使用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;
}
}
现在我已经没有选择了。请帮忙。
UPDATE1:
stepdef类中的第二个then
块失败。 sample-payload-1和sample-payload-2通过,但另外两个失败。即使在更改了样本有效负载的顺序之后,测试也会失败。
我得到的错误是断言错误,因为ids
列表的大小不同。但是,当我单独运行相同的测试时,我不会因为大小匹配而得到此错误。
答案 0 :(得分:1)
问题在于实例变量我曾用counter
来循环触发查询并提取结果的逻辑。第一个测试样本[sample-payload-1
]将单独工作,因为它具有实例counter
的新副本。后续示例仅包含 更改 counter
值。
这解释了为什么测试用例在单独运行时通过,因为没有其他测试会使用 已更改 counter
。
FIX:修复是在退出实现/服务类之前将counter
重置回0
,以便后续请求具有新的{{1} }}
经验教训:如果封闭类的counter
为scope
,则永远不要依赖实例变量。对于每次调用Class