apifox持续集成+java+企微机器人+xxljob定时推送
总览:
apifox做接口测试后,把用例合并组装成测试套件,然后apifox-cli通过终端命令实现把套件执行后,输出本地文件的测试报告html或json。本地解析后拿到有用的解决通过定时执行推送到企微群里。 然后把html一起推到群里。
这个html文件点击打开,就是你本地跑的那个html。
一、安装
1、安装Node.js
yum install -y nodejs
2、安装npm
yum install -y npm
3、安装Apifox CLI
npm install -g apifox-cli
Apifox CLI 是 Apifox 的命令行运行工具,主要用来做持续集成。支持实时运行在线数据和导出数据运行2 种方式。因为后续套件可能去增加用例,所以我们选择使用在线数据进行调用。
本地测试一下,测试套件中,点击持续集成后,生成命令,然后复制后,在终端命令行运行在线数据。
命令类似长这样 apifox run http://xxx/api/v1/api-test/ci-config/xxxx/detail?token=xxxx -r html,cli
但是要了解下其他伴随指令,我只列了目前需要用到的,其他的可以这里去找更多选项 apifox持续继承
https://www.apifox.cn/help/cli/#apifox-run-file-source-options
-r, --reporters [reporters] 指定测试报告类型, 支持 cli,html,json (default: ["cli"])--out-dir <outDir> 输出测试报告目录,默认为当前目录下的 ./apifox-reports--out-file <outFile> 输出测试报告文件名,不需要添加后缀,默认格式为 apifox-report-{当前时间戳}--database-connection <path> 指定 [数据库配置] 的所处文件路径,使用 URL 测试的时候必须指定
4、apifox测试用例中,如果有对数据库的校验,肯定在后置里已经添加了数据库连接的信息,那么在运行时也就需要下载数据库配置文件。如果没有数据库校验则忽略。
二、Java代码部分
1、通过调用终端类执行,生成对应的json报告,报告生成默认路径为./apifox-reports,可以通过加指令指定生成的路径-out-dir /tmp/apifox-reports
String command = apifox run https://api.apifox.cn/api/v1/api-test/ci-config/359896/detail?token=xlH8c24skOlIwGWN08O-d2 -r json,cli --database-connection ./database-connections.json
2、通过调用终端类执行,生成对应的html报告,类比步骤1,因为html方便查看,会把html也发到群里。html的报告可以单独弄个文件夹,好读取区分。–out-dir /tmp/apifox-htmlReports
apifox run https://api.apifox.cn/api/v1/api-test/ci-config/359896/detail?token=xlH8c24skOlIwGWN08O-d2 -r html ,cli --database-connection ./database-connections.json
命令行执行,是在网上找到工具类方法,主要依赖方法是 process = Runtime.getRuntime().exec(command);
CmdUtil类
public static String run(String command,int waitTime) throws IOException {Scanner input = null;String result = "";Process process = null;try {process = Runtime.getRuntime().exec(command);try {// 等待命令执行完成process.waitFor(waitTime, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();logger.info("CmdUtil- run(String,int)遇到异常1");}InputStream is = process.getInputStream();input = new Scanner(is);while (input.hasNextLine()) {result += input.nextLine() + "\n";}result = command + "\n" + result; //加上命令本身,打印出来} catch (Exception e){e.printStackTrace();logger.info("CmdUtil- run(String,int)遇到异常2");}finally {System.out.println("---finally---");if (input != null) {input.close();}if (process != null) {process.destroy();}}return result;
}
三、拿到json报告并解析
拿到报告,解析json报告字段,拿到想要的字段。例如套件名称、总请求数、失败数、失败接口的名称
为了简化拿文件的方式,我是每次新生成报告文件,读取和解析后,就删除文件。这样每次文件夹下只有1个文件。 当然也可以自定义生成文件的名称,apifox执行命令选项中也是支持的。
File reports = new File("json报告的地址");
File[] fileArray = reports.listFiles();
String reportPath = fileArray[0].getAbsolutePath();
String jsonString = new String(Files.readAllBytes(Paths.get(reportPath)));
JSONObject reportObject= JSONObject.parseObject(jsonString);
//测试套件名称
String TJName = reportObject.getJSONObject("collection").getJSONObject("info").getString("name");
logger.info("测试套件名称 = "+ TJName);
四、通过企微机器人把json解析内容和html文件发到群里
a、把json解析的内容,通过企微机器人推送消息方法推送到企微群里。 text或markdown自己选择。
b、把html文件通过企微机器人的上传文件方法推送上去,会返回一个media_id。— 注意:这里按照官方文档要求的formdata把刚才的html文件
c、根据企微机器人的推送方法,把media_id推上去,html文件就可以推送到群里了。
企微机器人的方法,不再赘述,可以去官网这里去查看。企微机器人文档
https://developer.work.weixin.qq.com/document/path/91770
五、删除生成的json报告和html。
为了方便读取文件,我是每次生成读取数据后,会去删除文件。这样保证文件夹下只有1个子文件。
//删除json文件
logger.info("执行删除json文件 ----"+reportPath + "---" + new File(reportPath).delete());
//删除html文件
logger.info("执行删除html文件 ----"+htmlFile.getAbsolutePath() + "---" + htmlFile.delete());
六、定时任务的话,就搭配xxljob负责调度调试就行了。
参考我前边写过的文档
https://blog.csdn.net/wang391752/article/details/118019722?spm=1001.2014.3001.5502
其他问题:
1、如果你需要部署到线上,那么先要看看自己线上的数据库是否可以通过数据库地址直连,如果不行,要么去掉数据库校验部分,要么就别部署到线上,部署到你数据库连接地址对应环境。(如果你直连数据库地址是qa的,你就部署到qa机器上)
2、需要部署到机器上,你就需要去机器上下载之前的依赖,可以看公司用的什么方式部署机器,把node,apifox-cli下载命令放到构建参数里即可。
3、在步骤2中,如果有数据库database-connections.json需要扔到机器上,可以用公司前端文件存储的域名,把json文件放上去,跟着构建参数下载到某个路径下去。
对于步骤2和3,我是修改了机器构建部分配置,重点看下这里
dockerfile中前几行
FROM docker.17usoft.com/base/tomcat-node:v8
#FROM docker.17usoft.com/base/tomcat:v8-jdk1.8.0_191
RUN npm install -g apifox-cli
RUN cd /tmp/ && curl -O https://xxxstatic.com/database-connections.json
4、如果机器上安装了apifox-cli,但是无法访问apifox命令(可以进到机器上运行下试试),也可以尝试使用完整路径去运行
预期这样写
apifox run https://api.apifox.cn/api/v1/api-test/ci-config/359896/detail?token=xlH8c24skOlIwGWN08O-d2 -r json,cli --database-connection ./database-connections.json
可以找到apifox-cli的安装地址改成这样写
node /usr/local/node-v12.13.0-linux-x64/lib/node_modules/apifox-cli/bin/cli.js run https://api.apifox.cn/api/v1/api-test/ci-config/359896/detail?token=xlH8c24skOlIwGWN08O-d2 -r json,cli --database-connection ./database-connections.json
上方apifox命令 等价于 node /usr/local/node-v12.13.0-linux-x64/lib/node_modules/apifox-cli/bin/cli.js
替换后也可以运行的。
相关文章:

apifox持续集成+java+企微机器人+xxljob定时推送
总览: apifox做接口测试后,把用例合并组装成测试套件,然后apifox-cli通过终端命令实现把套件执行后,输出本地文件的测试报告html或json。本地解析后拿到有用的解决通过定时执行推送到企微群里。 然后把html一起推到群里。 这个…...

盘点Linux内核网络知识100道题,这篇就够了
计算机网络模型 1、五层因特网协议栈和七层OSI(Open System Interconnections)参考模型分别是什么? 5层:应用层、传输层、网络层、数据链路层、物理层 7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理…...
数据库敏感字段脱敏
文章目录什么是脱敏脱敏后带来什么问题解决方案一解决方案二具体实施方案一方案二存量数据处理什么是脱敏 如果你有申请过一些软件资质,应该会被要求敏感数据进行加密,比如密码不能明文,用户的手机号,身份证信息,银行…...
skynet 游戏服务器探索(1)--熟悉skynet(网络)
因为做游戏服务器开发,大多数都跟脚本打交道,要么是lua,要么是python,要么是php,方便热更新的只有lua与php, php相关的游戏服务器开发,参考我另外的文章https://blog.csdn.net/guoyilongedu/article/details/121049511lua脚本相关的ÿ…...
select、poll、epoll
select、poll、epoll select int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int nfds:被select管理的文件描述符的个数,最大描述符编号1fd_set *readfds:读文件描述符集合fd_se…...
rollup的基本使用 基本配置与处理各种文件
rollup rollup是一个javascript的模块化打包工具 可以帮助我们编译小的代码到一个大的负载的代码中 比如一个库或者一个应用 rollup与webpack的区别 rollup主要针对ES Module进行打包 另外webpack通常可以通过各种loader处理各种各样的文件 以及处理他们的依赖关系 rollup更多…...
ubuntu-debian系-redhat系
debian系 包类型:.deb包 本地安装包安装工具:dpkg 本地包管理命令:dpkg -i package 安装包 dpkg -r package 卸载包 dpkg -l package 查看已安装包 远程安装包安装工具:apt / apt-get 远程包管理命令:apt-get apt-cac…...

Altium Designer 18中原理图DRC编译和PCB DRC检查-AD DRC
一、原理图编译 原理图检查的主要内容有: 1、元件位号冲突。也即多个元件编号相同,例如两个电容在原理图中都被命名为C2,显然肯定是无法生成PCB的。 2、网络悬浮。也即网络标号没有附着在电气走线上,一般这种是人操作失误&…...
zipfile — 访问 ZIP 压缩文件
zipfile — 访问 ZIP 压缩文件 1.概述 zipfile 模块可用于操作 ZIP 存档文件,.zip 是 PC 程序 PKZIP 推广的格式 2.测试数据 为了演示用,你需要创建以下三个文件 1.README.txt 内容如下,注意最后一行为空行 The examples for the zipfil…...

检查nmos管是否损坏
NCEP85T14 功率mos管为例 以NMOS举例,只用万用表二极管档测量MOS管的好坏-电子发烧友网 NMOS的D极和S极之间有一个寄生二极管,方向为S到D,利用二极管单向导电性以及MOS管导通时寄生二极管截止的特性,可以快速测量MOS好坏。 1、测…...

第七章 - 聚合函数(count,avg,sum,max,min)和一些数学函数
第七章 - 聚合函数使用别名 ascount() 计数avg() 平均值sum() 求和max() 最大值min() 最小值一些数学计算函数Abs()Cos()Exp()Mod()Pi()radians()Sin()Sqrt()Power()Ceil()Floor()使用别名 as 在SQL中可以使用 as 来为一个字段或者一个值设置新的别名下面聚合函数的使用中就会…...

Typescript的原始据类型和Any类型
最新的ECMAScript标准定义了8中数据类型: 7种原始类型: BooleanNullUndefinedNumberBigintStringSymbol和 Object 除 Object 以外的所有类型都是不可变的 (值本身无法被改变》。例如,与C语言不同JavaScript 中字符串是不可变的 (译注: 如,Ja…...
[python入门㊼] - python类的高级函数
目录 ❤ 类的高级函数 ❤ __str__ ❤ __getattr__ ❤ __setattr__ ❤ __call__ ❤ 类的高级函数 今天来为大家介绍几个类中的高级函数,它们也是类中的内置函数。通过使用它们, 会让我们在进行类开发的时候更加的顺手,接下来我们就…...

【Windows】使用Fiddler 工具对手机进行接口监听
目录 工具下载 配置Fidder 手机端获取证书 过滤指定接口 工具下载 CSDN下载地址 其他下载地址 配置Fidder 安装后,打开进入如下界面 在fiddler菜单项选择Tools -> Options -> HTTPS 勾选【Decrypt HTTPS traffic 】 下拉框默认:【from al…...

SpringCloudAlibab-nacos
一、介绍注册中心配置中心的整合SpringCloudAlibaba中文地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md下载地址:https://github.com/alibaba/nacos/访问:http://localhost:8848/nacos/二、使用1、添加依赖&…...

从一致性角度考虑推荐冷启动长尾推荐问题(二)
前言:在推荐系统中user&item emb往往是最重要的特征之一,在冷启动和长尾优化的工作中,往往也是优化的重点,相当一部分工作是围绕着emb优化展开,所以这里单独开了一章。4)emb分布一致性主要思路在于冷启内容emb和高…...

电脑c盘满了怎么清理,c盘空间清理
电脑c盘满了怎么清理?电脑C盘满了可能是因为您的操作系统、程序文件、下载文件、临时文件、垃圾文件等占用了太多的存储空间。所以,我们就需要进行一些操作和清理。 一.清理电脑C盘的方法 清理临时文件和垃圾文件。在Windows上,您可以使用系…...
vite的基本使用
vite 浏览器原生支持模块化 浏览器原生加载的缺点 1.必须明确的写上后缀名 2.如果某一个模块 加载跟多其他的js文件 那么这些js文件都需要被依次加载 浏览器需要将所有的js文件请求下来 发送跟多的http请求(效率也是非常低的) 3.如果代码中由typescrip…...
JavaScript 字符串(String) 对象
JavaScript 是一种流行的编程语言,可以用于开发各种 Web 应用程序和移动应用程序。在 JavaScript 中,字符串是一种非常常见的数据类型,可以使用 JavaScript 字符串(String)对象来处理。本文将详细介绍 JavaScript 字符…...

小知识点:Mac M1/M2 VMware Fusion 安装 Centos 7.9(ARM 64 版本)
最近换了 Mac M2 芯片的笔记本,用原来的 Centos 镜像安装虚拟机直接报错 “无法打开此虚拟机的电源,因为它需要使用 X86 计算机架构,而该架构与此 Arm 计算机架构主机不兼容。” 安装流程前置一、下载镜像二、安装虚拟机三、配置静态 IP四、安…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...