基于Docker构建CI/CD工具链(六)使用Apifox进行自动化测试

添加测试接口

在Spring Boot Demo项目里实现一个简单的用户管理系统的后端功能。具体需求如下:

  1. 实现了一个RESTful API,提供了以下两个接口 :

    • POST请求 /users:用于创建新的用户。
    • GET请求 /users:用于获取所有用户的列表。
  2. 创建新用户功能:

    • 用户可以通过向 /users 发送 POST 请求来创建新用户。
    • 新用户的信息通过请求体以 JSON 格式提供,包括用户的姓名和年龄。
  3. 获取所有用户列表功能:

    • 用户可以通过向 /users 发送 GET 请求来获取所有已创建用户的列表。
    • 服务器将返回一个包含所有用户信息的 JSON 数组。
  4. 用户对象定义:

    • 用户对象由姓名和年龄两个属性组成。
    • 用户对象的定义嵌套在 UserController 类内部,仅在该类中可见。
package com.copier.springbootdemo.rest;import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {// 用于存储用户对象的列表private List<User> users = new ArrayList<>();// 创建新用户的端点@PostMappingpublic User createUser(@RequestBody User user) {users.add(user); return user;}// 获取所有用户的端点@GetMappingpublic List<User> getAllUsers() {return users; }// 表示用户的内部类static class User {private String name;private int age;public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }}
}

构建Apifox Docker镜像

编辑如下内容的Dockerfile,从FROM node:18.13.0的基础镜像开始构建一个新的镜像,然后在其中安装了apifox-cli。

FROM node:18.13.0
RUN npm i -g apifox-cli@latest --registry=https://registry.npmmirror.com/

在同级目录下执行如下命令,构建工具镜像,有告警不要怕

 docker build -t docker.mvcode.cn:8083/apifox:1.0.0 .

请添加图片描述

使用如下命令测试镜像是否构造成功

 docker run --rm  docker.mvcode.cn:8083/apifox:1.0.0 apixfox -v

请添加图片描述

然后通过如下命令,将镜像推动到镜像库(如何构建镜像库点这里:Docker+nexus构建自己的制品库之(三)Docker仓库的使用)。推送到镜像库后我们就可以随便使用了。

 docker push docker.mvcode.cn:8083/apifox:1.0.0

请添加图片描述

准备测试用例

如何使用Apifox不是本文档所关注的内容,禁用截图演示整个过程项目的文档请移步Apifox帮助文档。

创建数据模型

请添加图片描述

添加用户接口和测试用例

查询接口

请添加图片描述

查询测试用例

请添加图片描述

新增用户接口

请添加图片描述

新增用户测试用例

请添加图片描述

测试环境

请添加图片描述

测试场景

请添加图片描述

运行测试

请添加图片描述

导出

根据图中所示将测试场景导出为“Apifox ClI格式”。
请添加图片描述

配置Gitlab CI/CD

新增测试脚本

将导出的文件放在项目的testcases目录下

请添加图片描述

#!/bin/bash
# 获取当前目录路径,用于后续挂载到 Docker 容器中
APP_ROOT=$(pwd)
mkdir report
docker run --rm \-v /home/copier/.m2/:/root/.m2/ \-v $APP_ROOT:/app \-w /app \docker.mvcode.cn:8083/apifox:1.0.0 apifox run -k \--out-dir ./report --out-file apitest -r html,cli \--env-var "serverURL=http://192.168.3.52:9999" \./testcases/usertest.apifox-cli

这段脚本主要用于在 Docker 容器中运行apifox镜像,执行 API 测试,并生成测试报告。

  1. APP_ROOT=$(pwd): 这一行代码将当前工作目录的路径保存在 APP_ROOT 变量中。

  2. mkdir report: 创建一个名为 report 的目录,用于存储测试报告。

  3. docker run --rm ...: 这是运行 Docker 容器的命令。下面是它的各个参数解释:

    • --rm: 表示当容器退出时立即删除容器。这有助于在容器结束后自动清理资源,防止垃圾文件的堆积。
    • -v /home/copier/.m2/:/root/.m2/: 将主机中的 /home/copier/.m2/ 目录映射到容器内的 /root/.m2/ 目录,这样容器内的 Maven 缓存可以重复使用。
    • -v $APP_ROOT:/app: 将主机中的 $APP_ROOT 目录映射到容器内的 /app 目录,这样容器就可以访问主机上的测试用例文件等资源。
    • -w /app: 指定容器的工作目录为 /app,这是为了确保后续的命令在正确的工作目录下执行。
    • docker.mvcode.cn:8083/apifox:1.0.0: 指定要运行的 Docker 镜像,其名称为 apifox,版本为 1.0.0
    • apifox run -k ...: 这是在容器内执行的具体命令,它启动了 apifox 工具来运行 API 测试。下面是各个参数的解释:
      • -k: 表示以非交互式模式运行,即不需要用户输入。
      • --out-dir ./report: 指定测试报告的输出目录为当前工作目录下的 report 目录。
      • --out-file apitest: 指定测试报告的文件名为 apitest
      • -r html,cli: 指定测试报告的格式为 HTML。
      • --env-var "serverURL=http://192.168.3.52:9999": 设置一个环境变量 serverURL,其值为 http://192.168.3.52:9999,这个环境变量可能会在测试过程中被用到。
      • ./testcases/usertest.apifox-cli: 指定要运行的测试用例文件路径。

Apifox CLI(Command Line Interface,即命令行界面)主要用来以命令行方式运行接口测试过程,具体参数参照:如何使用以及参数说明。

请添加图片描述

执行自动化测试

通过查看Gilab的流水线和作业我们可以查看运行结果。
流水线执行结果:
请添加图片描述

API测试结果:

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618737.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT在线网页版

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

YOLTV8 — 大尺度图像目标检测框架(欢迎star)

YOLTV8 — 大尺度图像目标检测框架【ABCnutter/YOLTV8: &#x1f680;】 针对大尺度图像&#xff08;如遥感影像、大尺度工业检测图像等&#xff09;&#xff0c;由于设备的限制&#xff0c;无法利用图像直接进行模型训练。将图像裁剪至小尺度进行训练&#xff0c;再将训练结果…

Matlab隐式方程拟合【案例源码+视频教程】|隐函数拟合|非线性拟合|视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

OpenHarmony实战开发-Actor并发模型对比内存共享并发模型

内存共享并发模型指多线程同时执行复数任务&#xff0c;这些线程依赖同一内存并且都有权限访问&#xff0c;线程访问内存前需要抢占并锁定内存的使用权&#xff0c;没有抢占到内存的线程需要等待其他线程释放使用权再执行。 Actor并发模型每一个线程都是一个独立Actor&#xf…

synchronized底层原理

1synchronized关键字的底层原理 Monitor 举个例子&#xff1a; 1.线程1执行synchronized代码块&#xff0c;里面用到了lock(对象锁)。首先会让这个lock对象和monitor关联&#xff0c;判断monitor中的owner属性是否为null。如果为null直接获取对象锁。owner只能关联一个线程。 2…

机器学习和深度学习--李宏毅 (笔记与个人理解)Day 16

Day 16 deep Learning – 鱼与熊掌兼得 最近在减重&#xff0c; 昨天跑了个一公里&#xff0c;然后今天上午又打了个篮球&#xff0c;真是老胳膊老腿了&#xff0c;运动完给我困得不行 Review 见前面的笔记 这里说dl 会提供一个足够大的模型&#xff0c; 来使得Dall loss 足够小…

ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现

摘 要 通过搜索引擎从互联网上获取有用信息已经成为人们生活的重要组成部分&#xff0c;Lucene是构建搜索引擎的其中一种方式。搜索引擎系统是在.Net平台上用C#开发的&#xff0c;数据库是MSSQL Server 2000。主要完成的功能有&#xff1a;用爬虫抓取网页&#xff1b;获取有效…

java:特殊文件(properties,xml)和日志

特殊文件 txt(文本文件) txt文件是一种纯文本文件,用于存储文本信息 优缺点:txt文件简单易用,可以使用任何文本编辑器打开和编辑,但不支持数据类型和结构,所有信息均用纯文本形式保存 适合简单的配置信息存储 properties文件 properties文件是一种键值对文件,用于存储配置…

【Linux】账号和权限管理

目录 一、用户账号与组账号 二、添加用户账号-useradd 三、修改用户账号的属性-usermod 四、更改用户命令-passwd 五、删除用户账号-userdel 六、添加组账号-groupadd 七、添加删除组成员-gpasswd 八、删除组账号-groupdel 九、查询账号信息-groups、id、finger、w、w…

分享一款免费阅读的软件:Legado,已免费开源(文末有福利)

对于喜欢阅读的人来说&#xff0c;一定经历过从一本厚厚的修仙书籍到MP3、MP4的阅读时代&#xff0c;再到现今的手机软件。 但是现在的阅读软件经常会遇见以下问题&#xff1a;比如广告弹窗太多&#xff0c;排版乱&#xff0c;甚至很多的APP都进入会员时代&#xff0c;再加上一…

28、链表-两数相加

思路&#xff1a; 有几个方面需要考虑 双指针遍历&#xff0c;如果出现和大于10那么向前进1如果长度不一样那么长的部分直接落下并且考虑进1 的问题 代码如下&#xff1a; class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1null||l2null){…

鸿蒙端云一体化开发--开发云函数--适合小白体制

开发云函数 那什么是云函数&#xff1f;我们将来又怎么去使用这个云函数呢&#xff1f; 答&#xff1a;我们之前要编写一些服务端的业务逻辑代码&#xff0c;那现在&#xff0c;在这种端云一体化的开发模式下&#xff0c;我们是把服务端的业务逻辑代码&#xff0c;通过云函数来…