1.概述
在本文中,我们将介绍一下ZeroCode自动化测试框架。我们将通过一个REST API测试示例学习基础知识。
2.的方法
zerocode框架采用以下方法:
- 多方面的测试支持
- 测试的声明式风格
让我们讨论它们。
2.1。多方面的测试支持
该框架旨在支持应用程序多个方面的自动测试。除此之外,它使我们能够测试:
- 休息
- 肥皂
- 安全
- 负载/压力
- 数据库
- Apache卡夫卡
- GraphQL
- 开放的API规范
测试是通过我们稍后将讨论的框架的DSL完成的。
2.2。声明性样式
zerocode使用声明性测试样式,这意味着我们不必编写实际的测试代码。我们在JSON / YAML文件中声明方案,框架将“将”转换为“幕后的测试代码”。这有助于我们专注于我们想测试什么,而不是如何测试它。
3.设置
让我们将Maven依赖项添加到pom.xml文件:
<依赖> < groupId > org。jsmart zerocode-tdd 1.3.27 test
最新版本可用在Maven Central.。我们也可以使用Gradle。如果我们使用IntelliJ,我们可以下载ZeroCode插件Jetbrains Marketplace.。
4.REST API测试
正如我们上面所说的,ZeroCode可以支持对应用程序的多个部分进行测试。在本文中,我们将重点关注REST API测试。因此,我们将创建一个小型Spring Boot web应用程序,并公开单个端点:
@PostMapping public ResponseEntity create(@RequestBody User User) {if (!StringUtils.hasText(User . getfirstname ()) {return new ResponseEntity("firstName不能为空",HttpStatus.BAD_REQUEST);} if (!StringUtils.hasText(user.getLastName())){返回新的ResponseEntity(“lastName不能为空!”,HttpStatus.BAD_REQUEST);} user.setId (UUID.randomUUID () .toString ());users.add(用户);返回新的ResponseEntity(用户,HttpStatus.CREATED);}
让我们看到用户在控制器中引用的类:
公共类用户{私有字符串ID;私有字符串名字;私有字符串LastName;//标准getters和setter}
当我们创建一个用户时,我们设置一个唯一的id并返回整个id用户对象回客户端。端点可以到达/ API /用户路径。我们将节省用户的内存以使事情简单。
5.写一个场景
该场景在ZeroCode中扮演着核心角色。它包含一个或多个步骤,这是我们想要测试的实际内容。让我们编写一个场景,其中只有一个步骤来测试用户创建的成功路径:
{"scenarioName": "测试用户创建终点","步骤":[{"name": "test_successful_creation", "url": "/api/users", "method": "POST", "request": {"body": {"firstName": "John", "lastName": "Doe"}}, "verify": {"status": 201, "body": {"id": "$NOT. htm "]空”、“firstName”:“约翰”、“姓”:“母鹿 " } } } ] }
让我们解释每个属性代表什么:
- 场景名称- 这是方案的名称;我们可以使用我们想要的任何名称
- 脚步-一个JSON对象的数组,我们描述了我们想要测试的东西
- 名称-我们给台阶起的名字
- url- 端点的相对网址;我们也可以提出绝对的网址,但一般来说,这不是一个好主意
- 方法- - - - - - HTTP方法
- 要求- - - - - - HTTP请求
- 身体- HTTP请求正文
- 验证-这里,我们验证/断言服务器返回的响应
- 状态- HTTP响应状态代码
- 身体(内部验证属性) - HTTP响应正文
在此步骤中,我们检查用户创建是否成功。我们检查一下名和姓服务器返回的值。此外,我们验证了ID不是空值zerocode的断言令牌。
通常情况下,场景中不止一步。让我们在我们的场景中添加另一个步骤脚步数组:
{“名称”:“test_firstname_validation”,“url”:“/ api / users”,“方法”:“post”,“请求”:{body“:{firstname”:{“firstname”:“”,“lastname”:“doe“}},”验证“:{”状态“:400,”Rawbody“:”FirstName不能为空!“}}
在这一步中,我们提供了一个空的名字,这将导致错误的请求。这里,响应体将不是JSON格式的,因此我们使用rawbody属性将其引用为普通字符串。
ZeroCode不能直接运行这个场景——为此,我们需要一个相应的测试用例。
6.编写测试用例
为了执行我们的场景,让我们写一个相应的测试用例:
@runwith(zerocodeunitrunner.class)@targetenv(“rest_api.properties”)公共类userendpointit {@test @scenario(“rest / user_create_test.json”)public void test_user_creation_endpoint(){}}
在这里,我们声明了一种方法并将其标记为测试使用@Testjunit 4.我们只能使用JUnit 5与Zerocode仅用于负载测试。
我们还指定了我们的场景的位置@Scenario注释,它来自ZeroCode框架。方法体为空。正如我们所说的,我们不编写实际的测试代码。我们想要测试的是在我们的场景中描述的。我们只是在测试用例方法中引用场景。我们的UserEndpointIT类有两个注释:
- @RunWith-这里,我们指定哪个ZeroCode类负责运行我们的场景
- @TargetEnv-它指向在我们的场景运行时将使用的属性文件
当我们宣布url属性,我们指定了相对路径。显然,ZeroCode框架需要一个绝对路径,因此我们创建rest_api.properties带有一些属性的文件,定义了我们的测试应该如何运行:
- web.application.endpoint.host.- 休息API的主人;在我们的案件中,它是http:// localhost
- web.application.endpoint.port.port.-暴露REST API的应用服务器端口;在这里,是8080
- web.application.endpoint.context.- API的上下文;在我们的情况下,它是空的
我们在属性文件中声明的属性取决于我们正在做的什么样的测试。例如,如果我们想测试一个卡夫卡生产者/消费者,我们会有不同的属性。
7.执行测试
我们已经创建了一个场景、属性文件和测试用例。现在,我们可以开始测试了。由于ZeroCode是一个集成测试工具,我们可以利用Maven的失败插入:
org.apache.maven.plugins groupID> Maven-FailSafe-plugin Artifactid> 3.0.0-M5 version> <依赖关系> <依赖项> org.apache.maven.surefire groupId> Surefire-Junit47 Artifactid> 3.0.0-M5 version> 依赖项> 依赖关系> <执行> <执行> <目标>集成 - 测试目标> <目标>验证目标> 目标> 执行> 执行> plugin>
要运行测试,我们可以使用以下命令:
mvn验证-dskip.it = false
创建多种类型的日志,我们可以在$ {project.basedir} /目标文件夹。
8.结论
在本文中,我们看看Zerocode自动化测试框架。我们展示了框架如何与REST API测试的示例有效。我们还了解到,ZeroCode DSL消除了编写实际测试代码的需求。
与往常一样,本文的源代码是可用的在github上。