能否将一个结果(Given)保存到 Gherkin 特征文件中的一个变量中,然后将该变量与另一个结果(Then)进行比较? (Java 的黄瓜)

Can you save a result (Given) to a variable in a Gherkin feature file, and then compare the variable with another result (Then)? (Cucumber for Java)

我是 Java 的 Cucumber 新手,正在尝试自动测试由 MS SQL 服务器支持的 SpringBoot 服务器。

我有一个端点"Get All Employees"。

编写传统特征文件时,我将不得不在 @Then 子句中列出所有员工。 这对于数千名员工来说是不可能的。

所以我只想获取数据库中 Employee table 的行数,然后与从 "Get All Employees" 端点返回的对象数进行比较。

比较

SELECT count(*) from EMPLOYEE

具有从

返回的列表的大小

List<Employee> getAllEmployees()

但是如何将行数保存在特征文件的变量中,然后将其传递给 stepdefs Java 方法?

我还没有发现 Gherkin 允许这样做的任何方式。

您可以创建一个名为 dataRun 的包(包中有相应的 类),并在测试期间通过 setters 将详细信息保存在那里。

在步骤 "And I get the count of employees from the data base" 的执行过程中,您通过相应的 setter 设置此计数,在步骤 "And I get all employees" 中,您通过专用的 setter 设置数量。 然后在步骤 "And I verify the number of employees is the same as the one in the data base" 中,您通过吸气剂获得两个数字并比较它们。

顺便说一下,如果您将员工的姓名放入列表中并比较列表,则可以比较员工的姓名(而不仅仅是计数)。

写了几个场景和功能文件后,我了解了 Cucumber 的这一点并解决了这个问题。

Gherkin/Cucumber 不是编程语言。它只是一种规范语言。当解释器到达GivenThen等关键字时,就会调用Java代码中的匹配方法。所以它们只是触发器。

这些方法是 Java glue class 的一部分。数据不会从 Java class 传递到小黄瓜功能文件中。 class 在开头实例化并保留到结尾。因此,它可以存储状态。

因此,根据我在上述问题中的示例,来自 Spring 端点调用的 Then 响应将存储在 member variable 中在 glue class 中。下一个验证结果的 Then 调用将调用相应的 glue 方法,该方法将访问成员变量中的数据以执行比较。

所以 Gherkin 不能这样做,但是 Java 在 glue class 中的较低级别,可以。