AI赋能自动化测试:智能接口自动化测试数据生成平台设计思路

目录

1.背景

2.名词解释

3.设计目标

4.设计思路及折衷

4.1阶段性任务

4.2方案选型

4.2.1 设计方案选型

4.2.1.1 原始数据获取模块

4.2.1.2 数据构造模块

4.2.1.3 预执行模块

4.2.1.4 覆盖率反馈调整模块

4.2.1.5 预测模型

4.2.2 技术选型

5.系统设计

5.1 项目架构 

 5.2 流程图

​编辑

5.3 模块详细设计

5.3.1 原始数据获取模块

5.3.2 数据构造模块 

5.3.3 预执行模块 

 5.3.4 覆盖率反馈调整

5.3.5 预测模型 

5.3.5.1 定义问题

5.3.5.2 数据处理

5.3.5.3 训练模型

5.3.5.4 部署上线


1.背景


1)目前自动化测试用例维护成本极高且维护人员缺乏维护“兴趣”;

2)现有自动化数据生成方案,数据质量和量级难以均衡保障;

3)公司内部测试提效平台繁多,缺乏核心部件测试数据,没有测试数据就无法很好的接入使用各类提效平台。

2.名词解释


例子:根据天气情况预测是否可以打球

数据集:机器学习使用的数据集合被称为“数据集”

样本:数据集中的每一个数据

特征:像气象信息中的天气、温度、湿度这些数据

标签:“是否可以打球”就是机器学习根据当天数据做的一个概括性结论

模型:获得基于天气特征来判断是否适合打球的“理论依据”

学习/训练:从数据集中“学得”模型的过程

训练数据集:训练中使用的数据集

测试数据集:有了模型后需要评估模型的好坏和准确性,将模型应用到另一批有标签的数据上,通过训练的出结果,这批带标签的数据集就是测试数据集

3.设计目标


1)通过平台可以产出基于最小集合且符合目标覆盖率的接口测试数据;

2)产出数据支持多样化存储、调用;

3)结合流量回放机制,补充完善自动化接口测试用例;

4)引入机器学习方法,尝试在测试提效中落地;

5)全面用于接口冒烟测试、回归测试。

4.设计思路及折衷


4.1阶段性任务

平台整体开发可分三个阶段进行:http接口自动生成开发、RPC接口自动生成开发、接口录制功能开发。

4.2方案选型

4.2.1 设计方案选型

核心系统功能可分为:原始数据获取模块、数据构造模块、预执行模块、覆盖率反馈调整模块、预测模型。

4.2.1.1 原始数据获取模块

预选方案有三种,分别是:

  1. 通过动态获取代码变更状态,静态分析代码并识别接口数据;
  2. 基于开源接口管理平台开发平台站点,同步现有API管理平台的数据;
  3. 复用API管理平台,在原有功能基础上扩展所需功能

结论:由于方案3前后端均使用react编写,在此基础上复用学习成本高且考虑后期功能扩展不易改动所以选择方案2。

4.2.1.2 数据构造模块

平台输入(参考api管理平台)落库:

  1. 现有平台模式可以输入获取接口基本信息、参数信息、输出示例;
  2. 原有基础上增加参数值范围输入、输入示例填写、参数正确性是否强校验;
  3. 根据输入示例构建模板,利用参数值范围通过Cartesian product+Pairwise进行用例构造
4.2.1.3 预执行模块
  1. 利用内置执行模块,构建接口参数化进行请求,如:接口测试框架、http标准库等。
  2. 可以调用第三方执行模块,传入已构建的请求数据,如:现有自动化测试平台。
4.2.1.4 覆盖率反馈调整模块

提供目标覆盖率设置功能,通过预执行模块将生成的接口输入数据发送至目标系统,利用动态覆盖率统计得出实时覆盖率,对比覆盖率结果是否满足预设覆盖率目标,如果不满足则调整构造数据算法重的n元素对偶生成(2~n逐级上调),每次调整生成数据量级后随之增加,相应接口覆盖率也会增加。按照数据生成 -- 请求反馈覆盖率 -- 数据生成元素纬度调整形成闭环,当满足目标覆盖率后,停止元素纬度增加,即得出满足目标覆盖率的最小数据集。

4.2.1.5 预测模型
  1. 使用大量原始接口数据的输入和输出训练结果预测模型,问题:输入与输出参数较少,类型复杂且部分情况存在二义性,难以得出直接的对应关系。
  2. 在方案1基础上缩小预测目标,定位分类问题为:结果类型预测,在原始数据基础上进行特征提取和构建,利用输入特征与标签构建训练样本集,训练输出结果二分类的模型(后期可以进一步提模型效果进行多分类模型训练)。

结论:采用方案2的建模方式,通过缩小预测目标达到解决问题的准确性。

4.2.2 技术选型

机器学习框架

优点

缺点

备注

Tensorflow

  1. 高自由度

Scikit-learn

  1. 使用简单
  2. 资料多
  3. 传统机器学习库的瑞士军刀

结论:Scikit-learn

模型算法

优点

缺点

备注

决策树

  1. 决策树易于理解和解释,可以可视化分析,容易提取出规则
  2. 可以同时处理标称型和数值型数据
  3. 比较适合处理有缺失属性的样本
  4. 能够处理不相关的特征
  5. 运行速度比较快,且可以应用于大型数据集
  1. 容易发生过拟合
  2. 容易忽略数据集中属性的相关联
  3. 对于各类样本数据量不一致的数据,在决策树中进行属性划分时,不同的判定准则会带来不同的属性选择倾向

随机森林

  1. 不要求对数据预处理
  2. 集成了决策树的所有优点,弥补了其不足
  3. 支持并行处理
  4. 使用超高维度数据集、稀疏数据集、线性模型更好
  1. 生成每棵树的方法是随机的,不同的random_state会导致模型完全不同,因此要固化其值
  2. 比较消耗内存、运行速度慢。如果要节省内存和时间,建议用线性模型

KNN(K近邻算法)

  1. 简单易用,相比其他算法简洁明了
  2. 模型训练时间快
  3. 预测效果好
  4. 对异常值不敏感

  1. 对内存要求较高,因为该算法存储了所有训练数据
  2. 预测阶段可能很慢
  3. 对不相关的功能和数据规模敏感

SVM(支持向量机)

  1. 可以解决高维(大型特征空间)问题
  2. 解决小样本下机器学习问题
  3. 能够处理非线性特征的相互作用
  4. 无局部极小值问题(相对于神经网络)
  5. 不用依赖整个数据
  6. 泛化能力比较强
  1. 当观测样本很多时,效率并不是很高
  2. 对非线性问题没有通用解决方案,有时很难找到一个合适的核函数
  3. 对于核函数的高维映射解释能力不强
  4. 常规SVM只支持二分类,多分类开发稍复杂些
  5. 对缺失数据敏感

 

结论:综合比较了几种模型算法,考虑初次尝试将机器学习引入测试提效中且本次划分问题类别并非很复杂的场景,所以排除掉了非经典机器学习算法,在剩下的经典机器学习算法中,对比了决策树、随机森林、支持向量机以及K近邻算法,根据算法本身优缺点我们首先排除决策树和K近邻算法,因为决策树的易过拟合、K近邻训练耗时较高。最后对比随机森林和支持向量机,这两种算法均支持分类问题的解决,但是考虑到后面本平台需要解决的问题不仅限于二分类,支持向量机对于多分类的支持并不好,所以最终选择随机森林算法作为本次建模主要算法。

用例构造算法

优点

缺点

备注

Cartesian product

覆盖所有参数组合可能

冗余组合,形成用例爆炸

Cartesianproduct+Pairwise

不区分语言使用

需自己做算法实现

allpairs

无需自己做实现算法

python三方库,Java无法直接使用

结论:Cartesianproduct +Pairwise

5.系统设计


5.1 项目架构 

 5.2 流程图

5.3 模块详细设计

5.3.1 原始数据获取模块

5.3.2 数据构造模块 

数据构造流程图

5.3.3 预执行模块 

预执行流程图

 5.3.4 覆盖率反馈调整

覆盖率反馈调整流程图 

5.3.5 预测模型 

机器学习生命周期 

5.3.5.1 定义问题

1)是否采用机器学习

接口测试方式在整个测试生命周期中相对规范,且接口测试用例设计理论较为成熟,日常工作中QA进行接口测试产出的测试数据恰好成为机器学习的最佳原材料,传统的自动化用例生成方式无法解决预期生成问题,因此考虑引入AI赋能。

2)评估问题分类

针对接口的输入输出关系,我们可以将接口测试的输入规则与输出数据抽象成二分或多分类问题,根据接口输入数据的特征,会有强相关的输出分类,如划分输入对应正向用例以及非正向用例即二分类,输入对应正向子类别用例-1、2、3......,非正向子类别用例-1、2、3......即多分类。

 

二分类示意图 

多分类示意图

3)选择监督学习还是非监督学习

 

如图所示,接口数据非常规范,均包含输入、输出,针对接口原始数据分析我们可以提取出相关特征及标签,这种规范的数据适合监督学习的训练,因此选择监督学习。

4)业务性能考虑

由于接口测试业务对于实时性要求并不高,所以本系统采用离线训练,线上部署的方式使用机器学习模型。

5)机器学习模型结果评定及缩小误差

由于机器学习模型的设计方案选型为随机森林,且接口原始数据可利用特征数量能够很好地满足我们要求,所以在模型优化方面我们可以采用超参调优以及优化训练集的方式来保证模型可信度。

5.3.5.2 数据处理

1)数据采集

接口数据采集来源清晰,本系统主要采集来源有两个: 1、平台页面端用户输入,经由原始数据获取模块持久化存储;2、通过服务端流量录制,由agent传回至原始数据获取模块,处理后做持久化存储

2)数据预处理

针对API管理平台获取数据中的空数据做缺失值处理

3)特征创造

 

通过原始数据获取模块的第一种数据采集来源我们可以得到如上表示例的接口信息数据,但是这样的文本内容数据无法很好地直接作为训练样本使用,需要做一定的处理。

在特征创造部分,主要针对请求参数进行处理,根据请求参数的属性以及实际数据的关系,我们可以做如下转化。

 

在实际样特征据编写时,为下图所示: 

4)特征选择

通过(3、特征创造)中的表格可以看出,可用特征数据很多,但是实际模型训练中,由于特征重要性的因素存在,所以并不是每个参与训练的特征数据都被用到,即便是用到了,权重也不都是非常均衡(有些占比极低)。所以结合我们问题的实际场景以及sklearn提供的模型训练特征重要性接口,从所有原始数据中选出请求参数分组的:参数类型、是否必填、参数错误是否强校验、参数长度、参数是否唯一作为基本特征。

通过sklearn的api获取训练后特征的重要性权重,以此来过滤低重要性的特征。

 5)样本数据构造

5.3.5.3 训练模型

1)调参

控制基评估器的参数 

参数

含义

criterion

不纯度的衡量指标,有基尼系数和信息熵两种选择

max_depth

树的最大深度,超过最大深度的树枝都会被剪掉

min_samples_leaf

一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生

min_samples_split

一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生

max_features

max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,默认值为总特征个数开平方取整

min_impurity_decrease

限制信息增益的大小,信息增益小于设定数值的分枝不会发生

n_estimators:基评估器数量,即森林中树木的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators 越大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林 的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来 越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡,如图所示使用demo数据的n_estimators在0~200范围内的学习曲线(X轴:n_estimators取值,Y轴:模型分数)

 

如单一参数调整可以使模型达到预期效果则不需要考虑其他基评估器参数,如果无法达到要求继续调整。参数影响程度优先级:

n_estimators > max_depth > min_samples_leaf = min_samples_split > max_features 

2)评估

5.3.5.4 部署上线

Flask提供模型服务 or 打包模型Java调用

目前项目一期已落地,更多内容欢迎大家私信沟通交流 。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode669:修剪二叉搜索树

题目描述 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应…

vivo怎么录屏?玩转手机新体验!(2024最新)

“最近新入手了一款vivo手机,感觉用起来真的很顺手,各种功能都很强大。昨天和朋友一起打游戏,突然想到要记录下精彩瞬间,但是找遍了手机,都没有找到录屏功能。我想请教一下各位vivo手机用户,你们通常在哪里…

解决动态规划问题

文章目录 动态规划的定义动态规划的核心思想青蛙跳阶问题解法一:暴力递归解法二:带备忘录的递归解法(自顶向下)解法三:动态规划(自底向上) 动态规划的解题套路什么样的问题考虑使用动态规划&…

转录组上游分析,Count计算

本期教程原文链接:转录组定量,最简单的操作,你会吗? 本期教程 第六章 转录本定量分析 定量软件有RSEM,eXpress,salmoe,kallisto,featureCounts。在网络中吗,都有比较详细的教程,大家可以自己去…

最新UI发卡盗U,支持多语言,更新UI界面,支持多个主流钱包,附带系统搭建教程

环境:Linux系统 进入宝塔安装环境:Nginx 1.22.1 MySQL 8.0 php7.4 phpMyAdmin 5.2 按照说明去安装环境,如果没有找到MySQL8.0版本去"软件商店"搜索Mysql切换至8.0 1.上传开源源码 2.上传数据库文件 3.上传猴导入数据库文件 4.修…

SpringBoot+FreeMaker

目录 1.FreeMarker说明2.SpringBootFreeMarker快速搭建Pom文件application.properties文件Controller文件目录结构 3.FreeMarker数据类型3.1.布尔类型3.2.数值类型3.3.字符串类型3.4.日期类型3.5.空值类型3.6.sequence类型3.7.hash类型 4.FreeMarker指令assign自定义变量指令if…

HTML学习笔记:(一)基础方法

Html格式 里面文件使用平台为&#xff1a;w3school 1、基础功能&#xff1a; <html><head> <title>这是我的第一个html页面,会显示在浏览器的标题栏中</title> </head> <!--修改背景颜色 --> <body bgcolor"yellow"> …

QtQuick 学习笔记(二)按钮组件

1. QPushButton 功能 按压按钮&#xff0c;用于接受用户点击事件&#xff0c;可显示设定的字符串提示信息&#xff0c;但需要父组件作为容器&#xff0c;多用以执行命令或触发事件 常用函数 QPushButton&#xff1a;&#xff1a;QPushButton&#xff08;const QString &…

RHCE1

unit1.定时任务和延迟任务项目 1.在系统中设定延迟任务要求如下: 在系统中建立easylee用户&#xff0c;设定其密码为easylee 延迟任务由root用户建立 要求在5小时后备份系统中的用户信息文件到/backup中确保延迟任务是使用非交互模式建立 再使用chmod修改权限&#xff1a; 确保…

HarmonyOS真机调试页面运行卡顿/黑屏解决方法,亲测有效

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 用mate40等发行时间相对较早但系统是HarmonyOS4.0的真机调试 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 程序点击容易卡顿或黑屏 原因分析&#xff1a; CPU兼容问题导致屏幕…

Text2sql的一些技巧

最近看到了一篇关于text2sql的文章&#xff0c;以及一些论文。对使用模型做text2sql给了一些不错的建议。 参考文章&#xff1a;24年大模型潜力方向&#xff1a;大浪淘沙后的Text-to-SQL和Agent - 知乎 论文&#xff1a;https://arxiv.org/pdf/2403.09732.pdf 关于模型的建议 …

STM32H7定时器TIM1-TIM17中断、PWM实现

STM32H7定时器TIM1-TIM17中断、PWM实现 高级定时器硬件框图定时器模式时基输出PWM定时器输入捕获 TIM1-TIM17的中断配置TIM1-TIM17的PWM输出 STM32H7 支持的定时器有点多&#xff0c;要简单的区分下。STM32H7 支持 TIM1-TIM8&#xff0c;TIM12-TIM17 共14 个定时器&#xff0c;…

使用API有效率地管理Dynadot域名,锁定账户中的域名

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

Zynq7000系列中的时钟管理

PS&#xff08;处理系统&#xff09;时钟子系统生成的所有时钟都源自三个可编程PLL&#xff08;锁相环&#xff09;中的一个&#xff1a;CPU、DDR和I/O。时钟子系统的主要组件如图25-1所示。 在正常工作期间&#xff0c;PLL被启用&#xff0c;并由PS_CLK时钟引脚驱动。在启用P…

6.6Python之集合的基本语法和特性

集合&#xff08;Set&#xff09;是Python中的一种无序、不重复的数据结构。集合是由一组元素组成的&#xff0c;这些元素必须是不可变数据类型&#xff0c;但在集合中每个元素都是唯一的&#xff0c;即集合中不存在重复的元素。 集合的基本语法&#xff1a; 1、元素值必须是…

24卫生高级职称报名时间汇总⏰报名全流程

⏰卫生高级职称&#xff08;网上报名&#xff09;时间汇总 ✔️陕西&#xff1a;4月23日-5月24日 ✔️上海&#xff1a;4月23日-5月24日 ✔️重庆&#xff1a;4月23日—5月24日 ✔️黑龙江&#xff1a;4月23日-5月24日 ✔️浙江&#xff1a;4月23日-5月24日 ✔️云南&#xff1…

面试自救指南:女生如何巧答私密问题

在面试过程中&#xff0c;女性应聘者可能会遇到一些私人问题&#xff0c;这些问题可能涉及婚姻、家庭、生育等方面。面对这些问题&#xff0c;如何回答才能既保持真实又不失礼节呢&#xff1f; 当遇到关于婚姻状况的问题时&#xff0c;您可以选择回答&#xff1a;“我目前的婚姻…

【Python深度学习系列】网格搜索神经网络超参数:权重初始化方法(案例+源码)

这是我的第262篇原创文章。 一、引言 在深度学习中&#xff0c;超参数是指在训练模型时需要手动设置的参数&#xff0c;它们通常不能通过训练数据自动学习得到。超参数的选择对于模型的性能至关重要&#xff0c;因此在进行深度学习实验时&#xff0c;超参数调优通常是一个重要的…

2024全新快递平台系统独立版小程序源码|带cps推广营销流量主+前端

本文来自&#xff1a;2024全新快递平台系统独立版小程序源码|带cps推广营销流量主前端 - 源码1688​​​​​ 应用介绍 快递代发快递代寄寄件小程序可以对接易达云洋一级总代快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&am…

【leetcode面试经典150题】57. 环形链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…
最新文章