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响应正文
 
-   
 
-   
在此步骤中,我们检查用户创建是否成功。我们检查服务器返回firstName和lastName另外,我们使用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 评论