我是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允许这样做的方法。
你可以创建一个包,例如名为dataRun的包(包中有相应的类),并在测试期间通过setters保存细节。
在执行步骤 "我从数据库中获取员工人数 "时,你通过相应的setter设置这个人数,在步骤 "我获取所有员工 "时,你通过专门的setter设置人数。然后在 "我验证员工人数与数据库中的员工人数是否相同 "的步骤中,你通过获取器获取两个数字并进行比较。
顺便说一下,如果你把员工的名字(不只是人数)放到列表中比较,也是可以比较的。
在写了几个方案和功能文件后,我明白了Cucumber的这个问题,并修复了这个问题。
GherkinCucumber不是一种编程语言。它只是一种规范语言。当关键词如 Given
, Then
被解释器达到,Java代码中的匹配方法被调用。所以它们只是触发器。
这些方法是Java glue
类。数据不会从Java类中传出,也不会传到gherkin特征文件中。该类在开始时被实例化,并保留到最后。正因为如此,它可以存储状态。
所以,从我上面问题中的例子来看。Then
来自Spring端点调用的响应将被存储在 member variable
在 glue
类。下一个 Then
调用来验证结果,将调用相应的 glue
方法,它将访问成员变量中的数据来进行比较。
所以Gherkin不能做到这一点,但Java在较低层次的 glue
类,可以。