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   Maven-FailSafe-plugin   3.0.0-M5  <依赖关系> <依赖项> org.apache.maven.surefire   Surefire-Junit47   3.0.0-M5    <执行> <执行> <目标>集成 - 测试 <目标>验证    

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

mvn验证-dskip.it = false

创建多种类型的日志,我们可以在$ {project.basedir} /目标文件夹。

8.结论

在本文中,我们看看Zerocode自动化测试框架。我们展示了框架如何与REST API测试的示例有效。我们还了解到,ZeroCode DSL消除了编写实际测试代码的需求。

与往常一样,本文的源代码是可用的在github上

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
评论在本文上关闭!