你能把一个结果(Given)保存到Gherkin特性文件中的一个变量中,然后把这个变量与另一个结果(Then)进行比较吗?(Cucumber for Java)

问题描述 投票:1回答:2

我是Java的Cucumber新手,想对一个由MS SQL Server支持的SpringBoot服务器进行自动化测试。

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

在编写传统的功能文件时,我必须在 "Get All Employees "中列出所有的雇员。@Then 子句.这对于成千上万的雇员来说是不可能的。

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

比较

SELECT count(*) from EMPLOYEE

列表的大小,由

List<Employee> getAllEmployees()

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

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

automated-tests gherkin cucumber-java
2个回答
0
投票

你可以创建一个包,例如名为dataRun的包(包中有相应的类),并在测试期间通过setters保存细节。

在执行步骤 "我从数据库中获取员工人数 "时,你通过相应的setter设置这个人数,在步骤 "我获取所有员工 "时,你通过专门的setter设置人数。然后在 "我验证员工人数与数据库中的员工人数是否相同 "的步骤中,你通过获取器获取两个数字并进行比较。

顺便说一下,如果你把员工的名字(不只是人数)放到列表中比较,也是可以比较的。


0
投票

在写了几个方案和功能文件后,我明白了Cucumber的这个问题,并修复了这个问题。

GherkinCucumber不是一种编程语言。它只是一种规范语言。当关键词如 Given, Then 被解释器达到,Java代码中的匹配方法被调用。所以它们只是触发器。

这些方法是Java glue 类。数据不会从Java类中传出,也不会传到gherkin特征文件中。该类在开始时被实例化,并保留到最后。正因为如此,它可以存储状态。

所以,从我上面问题中的例子来看。Then 来自Spring端点调用的响应将被存储在 member variableglue 类。下一个 Then 调用来验证结果,将调用相应的 glue 方法,它将访问成员变量中的数据来进行比较。

所以Gherkin不能做到这一点,但Java在较低层次的 glue 类,可以。

© www.soinside.com 2019 - 2024. All rights reserved.