当前位置: 首页 > news >正文

基于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测试结果:

请添加图片描述

相关文章:

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

添加测试接口 在Spring Boot Demo项目里实现一个简单的用户管理系统的后端功能。具体需求如下&#xff1a; 实现了一个RESTful API&#xff0c;提供了以下两个接口 &#xff1a; POST请求 /users&#xff1a;用于创建新的用户。GET请求 /users&#xff1a;用于获取所有用户的列…...

Java 中建造者模式,请用代码具体举例

建造者模式是一种创建型设计模式&#xff0c;它允许你创建一个复杂对象的不同部分并将它们组装在一起&#xff0c;以产生最终的对象。以下是一个简单的 Java 示例&#xff0c;演示了建造者模式的用法&#xff1a; // 产品类 class Computer {private String cpu;private String…...

Tomcat 启动闪退问题解决方法

总体思路 解决Tomcat闪退问题&#xff0c;您可以尝试以下几种方法&#xff1a; 检查安装过程&#xff1a;确保您的Tomcat安装过程没有遗漏任何步骤。如果是zip包形式的Tomcat&#xff0c;解压后通常不需要额外配置环境变量。编辑启动脚本&#xff1a;打开Tomcat安装目录下的bi…...

使用docker部署数据可视化平台Metabase

目前公司没有人力开发数据可视化看板&#xff0c;因此考虑自己搭建开源可视化平台MetaBase。在此记录下部署过程~ 一、镜像下载 docker pull metabase/metabase:latest 运行结果如下&#xff1a; 二、创建容器 docker run -dit --name matebase -p 3000:3000\ -v /home/loc…...

数图智慧零售解决方案,赋能零售行业空间资源价值最大化

数图智慧零售解决方案 赋能零售行业空间资源价值最大 在激烈的市场竞争中&#xff0c;如何更好地提升空间资源价值&#xff0c;提高销售额&#xff0c;成为行业关注的焦点。近日&#xff0c;NIQ发布的《2024年中国饮料行业趋势与展望》称&#xff0c;“在传统零售业态店内&…...

Django中的实时通信:WebSockets与异步视图的结合【第167篇—实时通信】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代Web应用程序中&#xff0c;实时通信已经成为了必不可少的功能之一。无论是在线聊天、…...

R 格式(蓝桥杯)

文章目录 R 格式【问题描述】解题思路高精度乘法高精度加法 R 格式 【问题描述】 小蓝最近在研究一种浮点数的表示方法&#xff1a;R 格式。对于一个大于 0 的浮点数 d&#xff0c;可以用 R 格式的整数来表示。给定一个转换参数 n&#xff0c;将浮点数转换为 R格式整数的做法…...

Intellij idea的快速配置详细使用

IntelliJ IDEA是一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;支持多种编程语言&#xff0c;包括Java、Kotlin、Scala等。以下是关于IntelliJ IDEA的快速配置和使用的详细步骤&#xff1a; 一、安装 前往IntelliJ IDEA的官方网站或可靠的软件下载平台&…...

JavaEE:JVM

基本介绍 JVM&#xff1a;Java虚拟机&#xff0c;用于解释执行Java字节码 jdk&#xff1a;Java开发工具包 jre&#xff1a;Java运行时环境 C语言将写入的程序直接编译成二进制的机器语言&#xff0c;而java不想重新编译&#xff0c;希望能直接执行。Java先通过javac把.java…...

Linux基础|线程池Part.1|线程池的定义和运行逻辑

线程池的定义和运行逻辑 多线程的问题&#xff1a; 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&#xff0c;这样频繁创建线程就会大大降低系统的效率&#xff0c;因为频繁创建线程和销毁线程需要时间。 那么一个很自然的想法就出现了…...

蓝队面试经验总结

Sql注入 1、sql注入漏洞原理 开发者没有在网页传参点做好过滤&#xff0c;导致恶意 sql 语句拼接到数据库进行执行 2、sql注入分类 联合注入 、布尔盲注 、时间盲注 、堆叠注入 、宽字节注入 、报错注入 3、堆叠注入原理 在 mysql 中&#xff0c;分号 代表一个查询语句的…...

MySQL命令分类与大纲

一、数据库管理 创建与删除数据库 CREATE DATABASE&#xff1a;创建新数据库DROP DATABASE&#xff1a;删除已存在的数据库ALTER DATABASE&#xff1a;修改数据库属性 切换与查看数据库 USE&#xff1a;选择当前工作数据库SHOW DATABASES&#xff1a;列出所有可用数据库 二、…...

windows编译xlnt,获取Excel表里的数据

用git拉取项目 这个文件是空的 要用git拉下来&#xff0c;使用终端编译xlnt库 点击解决方案 运行生成 然后新建项目&#xff0c;配置好库&#xff0c; #include <iostream> #include <xlnt/xlnt.hpp>int main() {// 打开 Excel 文件xlnt::workbook workbook;workb…...

c#字段和属性的区别

在C#中&#xff0c;字段&#xff08;fields&#xff09;和属性&#xff08;properties&#xff09;都是类的成员&#xff0c;它们提供了类存储数据的方式&#xff0c;但它们在用途和功能上有着明显的区别。 字段 字段通常用来存储类或结构的状态信息。字段是类的数据成员&…...

微软正式发布Copilot for Security

微软公司近日宣布&#xff0c;其备受期待的安全自动化解决方案——Copilot for Security现已全面上市&#xff0c;面向全球用户开放。这一创新工具的推出标志着微软在提升企业安全防护能力方面迈出了重要一步&#xff0c;同时也为安全专业人士提供了强大的支持。 Copilot for …...

AI大模型日报#0416:李飞飞《2024年人工智能指数报告》、Sora加入Adobe、李彦宏聊百度大模型之路

​导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 刚刚&#xff0c;李飞飞团队发布《2024年人工智能指数报告》&#xff1a;10大趋势&#xff0c;揭示AI大模型的“喜”与“忧” 摘…...

OpenCV轻松入门(八)——图片卷积

对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置&#xff0c;这个操作就叫卷积。 卷积需要4个嵌套循环&#xff0c;所以它并不快&#xff0c;除非我们使用很小的卷积核。这里一般使用3x3或者5x5 图像滤波 图像滤波是尽…...

鸿蒙HarmonyOS开发规范-完善中

代码规范 所有文件&#xff0c;包括自动生成的编译文件package.json都要格式化&#xff08;IDE快捷键CtrlAltL&#xff09;&#xff1b;函数命名&#xff0c;C大驼峰&#xff0c;TS、JS小驼峰&#xff0c;函数命名注意动宾结构&#xff1b;静态常量需使用全大写&#xff0c;文…...

神经网络压缩图像

简介 典型的压缩管道由四个组件组成&#xff1a; 编码&#xff1a;输入图像 x x x通过编码器函数 ε \varepsilon ε&#xff0c;将其转换为潜在表示 z z z。 量化&#xff1a;截断 z z z以丢弃一些不重要的信息 熵编码&#xff1a;使用某种形式的熵编码&#xff08;例如&…...

Catagory(rt)

继承(IMP融合):支持super命令码;继承推荐重写 分类(IMP替换):不支持super命令码;分类推荐组合 //替换(原来没了/破坏掉原来IMP/分类(替换特性)) 情况1: 自封装(组件化)开源库>分类推荐组合 情况2:逆向分析> 有意替换>分类IMP替换 #import "CatagoryViewContro…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

深入理解 React 样式方案

React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

【Pandas】pandas DataFrame dropna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值&#xff08;NaN&#xff09;DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充&#xff08;即“下一个有效观测值”&#xff09…...