拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO

ZeroCode简介

白鹭 - 2021-11-24 1454 0 0

1.概述

在本文中,我们将介绍ZeroCode自动化测试框架。我们将通过一个REST API测试示例来学习基础知识。

2.方法

ZeroCode框架采用以下方法:

  • 多方面的测试支持
  • 声明式测试

让我们一起讨论它们。

2.1。多方面的测试支持

该框架旨在支持对我们应用程序的多个方面进行自动化测试。除其他外,它使我们能够测试:

  • REST
  • SOAP
  • 安全
  • 压力测试
  • 数据库
  • Apache Kafka
  • GraphQL
  • Open API规范

测试是通过框架的DSL完成的,我们将在稍后进行讨论。

2.2。声明式

ZeroCode使用一种声明式的测试样式,这意味着我们不必编写实际的测试代码。我们在JSON / YAML文件中声明场景,然后框架会将它们“翻译”为幕后测试代码。这有助于我们将精力集中在要测试的内容上,而不是如何进行测试

3.依赖项

pom.xml文件中添加Maven依赖项:

 <dependency>

 <groupId>org.jsmart</groupId>

 <artifactId>zerocode-tdd</artifactId>

 <version>1.3.27</version>

 <scope>test</scope>

 </dependency>

最新版本在Maven Central上可用。我们也可以使用Gradle。如果使用的是IntelliJ,则可以从Jetbrains Marketplace下载ZeroCode插件。

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 can't be empty!", HttpStatus.BAD_REQUEST);

 }

 if (!StringUtils.hasText(user.getLastName())) {

 return new ResponseEntity("lastName can't be empty!", HttpStatus.BAD_REQUEST);

 }

 user.setId(UUID.randomUUID().toString());

 users.add(user);

 return new ResponseEntity(user, HttpStatus.CREATED);

 }


让我们看看在控制器中引用User

public class User {

 private String id;

 private String firstName;

 private String lastName;



 // standard getters and setters

 }

创建用户时,我们设置唯一的ID,然后将整个User对象返回给客户端。端点在/api/users路径中可访问。我们将把用户保存在内存中,以使事情变得简单。

5.编写方案

该方案在ZeroCode中起着核心作用。它由一个或多个步骤组成,这是我们要测试的实际内容。让我们用一个步骤编写一个场景,以测试用户创建的成功路径:

{

 "scenarioName": "test user creation endpoint",

 "steps": [

 {

 "name": "test_successful_creation",

 "url": "/api/users",

 "method": "POST",

 "request": {

 "body": {

 "firstName": "John",

 "lastName": "Doe"

 }

 },

 "verify": {

 "status": 201,

 "body": {

 "id": "$NOT.NULL",

 "firstName": "John",

 "lastName": "Doe"

 }

 }

 }

 ]

 }

让我们解释一下每个属性代表什么:

  • scenarioName名称–这是方案的名称;我们可以使用我们想要的任何名称
  • steps – JSON对像数组,我们在其中描述要测试的内容
    • name -我们为步骤指定的名称
    • url –端点的相对URL;我们也可以输入一个绝对URL,但是通常这不是一个好主意
    • method – HTTP方法
    • request – HTTP请求
      • body – HTTP请求正文
    • verify –在这里,我们验证/确认服务器返回的响应
      • status – HTTP响应状态代码
      • body (在verify属性内)– HTTP响应正文

在此步骤中,我们检查用户创建是否成功。我们检查服务器返回firstNamelastName另外,我们使用ZeroCode的断言令牌来验证id是否不为null

通常,在方案中我们要完成多个步骤。让我们在场景的steps数组中添加另一个步骤:

{

 "name": "test_firstname_validation",

 "url": "/api/users",

 "method": "POST",

 "request": {

 "body": {

 "firstName": "",

 "lastName": "Doe"

 }

 },

 "verify": {

 "status": 400,

 "rawBody": "firstName can't be empty!"

 }

 }

在此步骤中,我们提供了一个空的名字,这将导致错误的请求。在这里,响应主体将不是JSON格式,因此我们使用rawbody属性将其称为纯字符串。

ZeroCode无法直接运行该场景-为此,我们需要一个相应的测试用例。

6.编写测试用例

为了执行我们的场景,让我们编写一个相应的测试用例:

@RunWith(ZeroCodeUnitRunner.class)

 @TargetEnv("rest_api.properties")

 public class UserEndpointIT {



 @Test

 @Scenario("rest/user_create_test.json")

 public void test_user_creation_endpoint() {

 }

 }

在这里,我们声明一个方法,并使用@Test批注将其标记为测试。我们可以将JUnit 5与ZeroCode一起使用,仅用于负载测试。

@Scenario注释指定了脚本的位置,该注释来自ZeroCode框架。方法主体为空。正如我们所说,我们没有编写实际的测试代码。我们的场景中描述了我们要测试的内容。我们只是在测试案例方法中引用该场景。我们的UserEndpointIT类具有两个注释:

  • @RunWith –在这里,我们指定哪个ZeroCode类负责运行我们的方案
  • @TargetEnv –这指向在我们的方案运行时将使用的属性文件

当我们在url属性时,我们指定了相对路径。显然,ZeroCode框架需要一个绝对路径,因此我们创建了一个rest_api.properties文件,其中包含一些用于定义测试运行方式的属性:

  • web.application.endpoint.host – REST API的主机;在我们的例子中,它是http://localhost
  • web.application.endpoint.port –公开我们的REST API的应用程序服务器的端口;在我们的例子中是8080
  • web.application.endpoint.context – API的上下文;在我们的情况下,它是空的

我们在属性文件中声明的属性取决于我们正在执行的测试类型。例如,如果我们要测试Kafka生产者/消费者,我们将具有不同的属性。

7.执行测试

我们已经创建了一个场景,属性文件和测试用例。现在,我们准备运行测试。由于ZeroCode是一个集成测试工具,因此我们可以利用Maven的failsafe插件:

<plugin>

 <groupId>org.apache.maven.plugins</groupId>

 <artifactId>maven-failsafe-plugin</artifactId>

 <version>3.0.0-M5</version>

 <dependencies>

 <dependency>

 <groupId>org.apache.maven.surefire</groupId>

 <artifactId>surefire-junit47</artifactId>

 <version>3.0.0-M5</version>

 </dependency>

 </dependencies>

 <executions>

 <execution>

 <goals>

 <goal>integration-test</goal>

 <goal>verify</goal>

 </goals>

 </execution>

 </executions>

 </plugin>

要运行测试,我们可以使用以下命令:

mvn verify -Dskip.it=false

ZeroCode创建了多种类型的日志,我们可以在${project.basedir}/target文件夹中签出。

8.结论

在本文中,我们研究了ZeroCode自动化测试框架。我们以REST API测试为例展示了该框架如何工作。我们还了解到ZeroCode DSL消除了编写实际测试代码的需要。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *