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四、安…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...