apifox持续集成+java+企微机器人+xxljob定时推送

news2024/9/29 11:38:16

总览:

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
替换后也可以运行的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spark分布式内存计算框架——Spark SQL】8. Shuffle 分区数目、Dataset(上)

4.4 Shuffle 分区数目 运行上述程序时&#xff0c;查看WEB UI监控页面发现&#xff0c;某个Stage中有200个Task任务&#xff0c;也就是说RDD有200分区Partition。 原因&#xff1a;在SparkSQL中当Job中产生Shuffle时&#xff0c;默认的分区数&#xff08;spark.sql.shuffle.p…

基于STM32采用CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试

一、前言 在STM32项目开发中&#xff0c;经常会用到存储芯片存储数据。 比如&#xff1a;关机时保存机器运行过程中的状态数据&#xff0c;上电再从存储芯片里读取数据恢复&#xff1b;在存储芯片里也会存放很多资源文件。比如&#xff0c;开机音乐&#xff0c;界面上的菜单图…

Selenium + python自动化测试环境搭建

selenium 是一个web的自动化测试工具&#xff0c;不少学习功能自动化的同学开始首选selenium &#xff0c;相因为它相比QTP有诸多有点&#xff1a; 免费&#xff0c;也不用再为破解QTP而大伤脑筋 小巧&#xff0c;对于不同的语言它只是一个包而已&#xff0c;而QTP需要下载安…

JSON字符串解析

目录 依赖 方法 示例 判断JSON是否合格 依赖 方法 JSON.parseObject() JSON.parseArray() 示例 Data public class OrderVo {public String name;public Integer price;public Integer count; } JSON数据 { "name": "苹果手机", "pric…

BIT.8_Linux 多线程

目录Linux线程概念什么是线程线程的优点线程的缺点线程异常线程用途Linux进程VS线程进程和线程总结Linux线程控制POSIX线程库创建线程线程ID及进程地址空间布局进程和线程ID区别内核层面&#xff1a;pid & tgid线程终止线程等待__thread 和 pthread_self()分离线程Linux线程…

《爆肝整理》保姆级系列教程python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

简介 有些 post 的请求参数是 json 格式的&#xff0c;这个前面发送post 请求里面提到过&#xff0c;需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理&#xff0c;所以绝大多数返回数据也是 json 格式的&#xff0c;我们在做判断时候&#xff0c;往往只…

Guava常用工具类总结

-“Null的含糊语义让人很不舒服。Null很少可以明确地表示某种语义&#xff0c;例如&#xff0c;Map.get(key)返回Null时&#xff0c;可能表示map中的值是null&#xff0c;亦或map中没有key对应的值。Null可以表示失败、成功或几乎任何情况。使用Null以外的特定值&#xff0c;会…

每日学术速递2.17

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.LG 1.Decoupled Model Schedule for Deep Learning Training 标题&#xff1a;深度学习训练的解耦模型时间表 作者&#xff1a;Hongzheng Chen, Cody Hao Yu, Shuai Zheng, Zhen Zhang,…

快速识别台式机的内存条

拿上一根内存条&#xff0c;让一个喜欢IT的识别一下&#xff0c;很多人不一定能说出点内容。 这很正常&#xff0c;IT细分领域太多了&#xff0c;很多搞IT的包括写代码的人可能都没有接触内存条。 硬件的集成度随着硬件技术的提升越来越高&#xff0c;成本也下来了&#xff0c;…

支付宝支付详细流程

1、二维码的生成二维码生成坐标 <!-- zxing生成二维码 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>co…

nvm 控制 node版本

nvm 官网 https://nvm.uihtm.com/ 1、卸掉nodejs&#xff0c;根据官网操作 2、如果之前安装过的nodejs,且安装的目录改变了&#xff0c;需重新配置系统环境 第一步&#xff1a;打开此电脑 > 右键属性 > 高级系统设置 > 环境变量 第二步&#xff1a; 在系统变量中选中…

新手健身准备哪些物品,健身必备蓝牙运动耳机分享

第一次运动健身应该准备什么&#xff1f;运动耳机是一款必备的装备&#xff0c;可以让我们坚持运动的动力源泉&#xff0c;在健身当中远离枯燥乏味&#xff0c;有音乐的加持下健身能够让我们更具动力&#xff0c;有哪些值得入手的蓝牙运动耳机分享呢&#xff1f;看看下面这写分…

Java反射概述

2 反射 2.1 反射概述 Java反射机制&#xff1a;是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展 2.2 反射获取Class类的对象 …

企业的知识文档管理系统需要注重什么?安全和共享能力很重要!

编者按&#xff1a;本文指出了企业的文档管理系统比较注重的能力&#xff0c;并从知识共享和文档安全两方面介绍了老厂商天翎是如何在这块实践的。关键词&#xff1a;知识共享&#xff0c;知识安全&#xff0c;标签分类&#xff0c;智能检索&#xff0c;资料分享&#xff0c;在…

element ui 下拉菜单组件 结合springboot 实现省市区简易三级联动 动态查询 并修改地点的省市区

目录 前言&#xff1a; 一.数据库表结构&#xff1a; 二.下拉菜单组件 2.1 效果展示 2.2下拉菜单的组件代码&#xff1a; 前言&#xff1a; 本篇博客&#xff0c;通过官网的学习&#xff0c;实现下拉菜单动态数据的传递与点击事件&#xff0c;如果只是按部就班的按照官网来…

29岁从事功能测试被辞,面试2个月都找不到工作吗?

最近一个28岁老同学联系我&#xff0c;因为被公司辞退&#xff0c;找我倾诉&#xff0c;于是写下此文。 他是14年二本毕业&#xff0c;在我的印象里人特别懒&#xff0c;不爱学习&#xff0c;专业不好&#xff0c;毕业前因为都没找到合适工作&#xff0c;直接去创业了&#xf…

03:入门篇 - CTK Plugin Framework 基本原理

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 CTK Plugin Framework 技术是面向 C++ 的动态模型系统。该系统允许插件之间的松散耦合,并且提供了设计良好的方式来进行功能和数据的交互。此外,它没有预先对插件施加限制,这样就可以很容易地将插件的相关…

研报精选230217

目录 【行业230217毕马威】奢侈品行业新气象【行业230217国信证券】医药生物行业2023年2月投资策略&#xff1a;持续关注疫后复苏和创新两大主线【行业230217国金证券】航空锻造&#xff1a;稳定格局筑专业化壁垒&#xff0c;顺势而为拓产业链深度【个股230217西南证券_招商轮船…

javaEE 初阶 — 传输层 TCP 协议 中的延迟应答与捎带应答

文章目录1. 延迟应答2. 捎带应答TCP 工作机制&#xff1a;确认应答机制 超时重传机制 连接管理机制 滑动窗口 流量控制与拥塞控制 1. 延迟应答 延时应答 也是提升效率的机制&#xff0c;也是在滑动窗口基础上搞点事情。 滑动窗口的关键是让窗口大小大一点&#xff0c;传输…

LabVIEW监控实时嵌入式目标上的CPU和内存使用情况

LabVIEW监控实时嵌入式目标上的CPU和内存使用情况NI实时&#xff08;RT&#xff09;控制器上有不同的用于监测CPU和内存使用情况的不同选项。可用内存量取决于多个因素&#xff0c;包括已安装的软件和用户应用程序内存要求。本文将介绍从Windows操作系统访问此信息的不同方法&a…