基于语义感知SBST的API场景测试智能生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

**摘要:**面对庞大服务接口群,完备的接口测试覆盖和业务上下文场景测试看护才有可能保障产品服务的质量和可信。如果你想低成本实现产品和服务的测试高覆盖和高质量看护,这篇文章将为你提供你想要的。

本文分享自华为云社区《基于语义感知SBST的API场景测试智能生成【智能云测】》,作者:DevAI。

1 背景

据2022年统计数据,华为云已发布商用的云服务达到220+。以单个服务500+接口数量计算,已商用的云服务的接口总数高达10W+。每接口参数数量更是平均超过20个,全组合测试会带来组合爆炸,费时费资源,是不可完成的任务。为在有限的测试投入下保障有效的问题拦截和测试覆盖,通常需要投入专职测试人员人工设计测试逻辑和测试数据组合,门槛高,依赖业务经验和自动化开发经验。而当前主流的API测试自动生成工具,基本采用传统的随机测试、Fuzz测试、基于代码覆盖目标引导的SBST等,不感知接口业务语义,只能较好地解决单接口测试生成,对于多服务、多组件接口功能交互、协议交互时序场景、状态相关场景,生成有效性极差,误报高,效率低下,导致用户E2E业务场景看护不足,易遗漏功能交互场景、异常调用等测试场景,导致现网问题时有发生,甚至服务中断。

面对庞大基数的接口群,需要完备的接口测试覆盖和业务上下文场景测试看护才有可能保障产品服务的质量和可信。

2 API场景级测试智能生成

(总体流程图)
Semantic-aware & search-based API场景级高度自动生成方法,基于正向API接口定义文档和逆向现网、类生产脱敏导流数据,挖掘接口操作上下文语义依赖和入参数据约束,生成接口操作依赖(概率)图(ODG),和接口参数约束字典,基于接口定义生成显性测试oracle, 基于脱敏导流数据挖掘生成隐性业务测试oracle。覆盖操作依赖图和字典批量迭代生成实例化测试序列下发SUT测试执行,准实时收集测试response并自动判定。依据前序迭代response结果,动态修正更新ODG图和参数字典以及测试oracle。实现API场景级测试全自动生成、判定、修正、再生成。

迭代过程中辅助以代码覆盖为导引,定向加速测试序列种子变异和优化。全过程极少需要人工介入和确认,是一种L4-L5全自动测试生成方法,能够实现低成本、低代码、低误报、高质量的覆盖增强测试能力。

术语解读:

**ODG图:**基于Swagger2.0和OpenAPI3.0.0规范的Rest接口定义文档,正向挖掘API接口操作上下文依赖ODG图;

**OTPG图:**基于现网业务请求流量数据,以用户、时间、环境等维度,逆向挖掘API接口调用时序业务转移概率图;

动态修正: 基于动态执行响应码和响应结果,实现执行时动态更新修正ODG和参数字典,解决静态依赖数据中的错挖和漏挖问题;

测试oracle挖掘: 自动挖掘测试断言,包括响应参数统计分布和接口入参 vs出参的requires、relational、only one、zero one……数值关系或蕴含关系等常见约束关系,实现响应异常(状态码、返回码、接口定义schema violation)自动检测和业务依赖违反自动判定。

2.1 测试设计和执行交互模式变革


AS IS是当前测试设计和执行交互模式,多数环节需要人工理解设计文档,测试方案设计(测试逻辑时序设计、测试数据组合设计、测试判定点设计)和测试自动化实现开发,且要求参与人员熟知被测产品或服务业务、接口文档,熟练掌握测试技术、测试自动化框架、测试自动化方法开发。依据经验先设计、实现、调试、固化基线化测试用例,再批量按需执行,最后出报告、提单、反馈开发。。。

To Be是API场景测试智能生成技术带来的测试变革之后的交互模式,测试人员只需简单配置生成需要的数据来源(哪些接口定义,哪个时间段的导流数据)即可,其余测试设计活动、执行活动和判定活动均交由生成工具服务自主挖掘探索完成。最终只需少量人工批量确认结果,按需固化、基线化用例,以便后续回归测试。


为有效衡量和举证测试生成服务的测试生成质量和生成效率,API场景测试智能生成服务提供了有效性、缺陷拦截、覆盖率三大维度的指标和趋势数据

2.2 关键技术

2.2.1 API接口操作上下文依赖ODG图静态挖掘

API接口操作依赖图(ODG图)反映了接口间的操作时序以及接口间参数依赖。通过遍历ODG图,可以生成完备的业务场景,以实现业务场景功能交互测试覆盖。因此,ODG图的准确性和有效性定了测试生成的质量。

下图为ODG图生成的流程图:


本技术采用两种规则进行ODG图的挖掘:

  1. 基于接口间出参-入参依赖挖掘

参数匹配:根据参数名称、类型是否完全一致来建立依赖关系

子串匹配:参数A的名称是参数B名称的子串

分词匹配和编辑距离匹配: 存量接口中存在大量接口的参数命名不符合规范,或关键信息在url资源路径中,需通过分词、编辑距离等方式来发现潜在的关系

参数黑名单:部分无实际业务意义但多个接口都包含的参数,如page分页信息等,采用添加黑名单的方式过滤

  1. 基于对同一资源对象的CRUD操作语义顺序依赖挖掘

符合restful规范:Post->Get->Put->Delete的挖掘

不符合restful规范:对URI信息构建方法映射,如“add-”-> “Post”, “query/get-” -> “Get”, “remove-” -> “Delete”, 对URL的路径分词识别是否对同一资源的操作,以实现CRUD语义的依赖挖掘


(以真实业务为例生成的ODG图)

2.2.2 API接口操作时序上下文依赖OTPG图挖掘


OTPG图是对业务场景挖掘的有效补充,我们对脱敏后的导流数据,以用户/时间/环境等维度,按API接口操作时序及接口间出入参的取值匹配,计算转移概率,生成OTPG图。

2.2.3 动态修正技术

在测试生成任务执行过程中,根据场景测试序列sequence实例的结果反馈,动态更新ODG图和参数字典,更正错挖和漏挖,进一步提升生成成功率和场景序列的成功请求长度。

Top-Down: 分解请求不通的sequence成多个sub sequence,直到sub sequence请求成功,并更新参数字典

Bottom-Up: 重组请求成功的sub-sequence和字典取值,实现更长长度的sequence的请求成功


(动态修正示意图)

基于动态修正技术,我们在ICSE 2022发表了题为《MOREST: Model-based RESTful API Testing with Execution Feedback》的会议文章。

2.2.4 测试Oracle挖掘

鉴于随机参数的生成效率低下,我们引入参数约束,提升参数生成效率。同时为了验证返回结果,我们引入Oracle挖掘。参数约束是指请求参数间存在的约束关系,如参数A要大于参数B;Oracle是指对于返回结果的约束,如request中的某个参数值等于response中某个参数值。

常见的约束类型如下:


API测试用例生成的在测试oracle挖掘的流程示意图:


(参数约束&Oracle挖掘示意图)

现有全自动生成方案只能探测非业务功能相关的显性问题,例如黑盒oracle:应用crash,白盒oracle: 空指针、内存溢出等问题,或者只能通过对比测试的方法来判定结果,不能解决业务相关复杂oracle的生成问题,因此当前对于业务相关oracle仍需大量人工投入设计、补全。

该模块旨在解决测试oracle的生成难题,基于接口定义文件和现网脱敏导流数据实现接口内/间2-wise 乃至n-wise参数蕴含、数值关系等约束挖掘(隐性oracle),以及状态码、schema violation等显性测试Oracle生成和自动判定。

3 小结

面对云化产品版本的快速迭代,应用场景日益丰富,产品功能渐趋复杂,完全基于经验人工设计的接口测试在云化产品质量保障上越来越捉襟见肘。因此基于接口文档和现网流量数据的智能API测试生成技术应运而生,实现了单接口与多接口业务场景的双覆盖,做到真正帮助测试人员提高工作效率,并有力保障了云化产品质量。

该生成服务的应用前景:

  1. 对于小规模测试团队或无专职测试人员的全功能团队或测试小白,可基本实现少人参与或无人参与的无代码化高度自动化Rest 接口正常场景级测试用例生成,自动化执行和判定。

  2. 对于有专职测试人员、测试专家的测试团队,可低成本提升测试场景覆盖率、缺陷拦截效率,减少测试设计投入。

  3. 可以正常场景API测试基础上实现异常场景 (可靠性测试)和并发场景(性能压力模型)的全自动化生成,完全替代现有接口fuzz测试,实现接口全场景测试无代码化。

点击关注,第一时间了解华为云新鲜技术~

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

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

相关文章

2015 CALLED THE INTERFACE OF 2014

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket豆瓣:BYSocketReprint it anywhere u want. ”Hi , Happy New Year.Written in Stupid Enlish,Dont push me *.* ” 2014 System 2015 is coming.But 2014 is not over.…

论文解读(MERIT)《Multi-Scale Contrastive Siamese Networks for Self-Supervised Graph Representation Learni

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

Fiddler抓包9-保存会话(save)

前言 为什么要保存会话呢?举个很简单的场景,你在上海测试某个功能接口的时候,发现了一个BUG,而开发这个接口的开发人员是北京的一家合作公司。你这时候给对方开发提bug, 如何显得专业一点,能让对方心服口服…

『现学现忘』Git基础 — 17、Commit对象

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

Spring/MVC映射WEB-INF下的文件(img、css、js等)

学过Mvc的都知道并且会访问该目录下面的jsp 页面&#xff08;这是最基础的&#xff09; 但我们想访问里面的图片什么的&#xff0c;又该怎么去访问呢&#xff0c; 一句代码&#xff1a; <mvc:resources mapping"/img/**" location"/WEB-INF/img/"/> …

《HelloGitHub》第 73 期

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

typora + EasyBlogImageForTypora直接上传图片到博客园

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

20155320 第十一周课堂总结

20155320 第十一周课堂总结 未及时提交原因&#xff1a; 对代码掌握的不熟练&#xff0c;并且由于起初不知道自己电脑浏览器不支持蓝墨云图片提交&#xff0c;尝试几次后只能把图片传到手机上导致截图没有及时提交 1,。测试题目 1.修改教材P74 一行代码 NineNineTable.java, 让…

.NET混合开发解决方案14 WebView2的基本身份验证

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

MyEclipse10破解详细说明

MyEclipse10破解详细教程 1.先安装好jdk&#xff0c;再安装好myeclipse10&#xff0c;并关闭该软件(jdk下载安装教程 http://blog.csdn.net/qq_36330228/article/details/75268398) 2.下载破解工具&#xff0c;打开me_active.jar 3.输入任意用户名&#xff0c;点击Systemid按…

中国电子云数据库 Mesh 项目 DBPack 的实践

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

(百度、谷歌)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏

使用方法&#xff1a; 1、假设原始gps数据为&#xff08;73.528888&#xff0c;39.368888&#xff09; 2、查询数据库&#xff1a;SELECT * FROM offset where lng73.52 and lat39.36&#xff0c;得出offsetlat、offsetlng 3、用原始的lat加上offsetlat&#xff0c;lng加上offs…

国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(中)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

(数据科学学习手札136)Python中基于joblib实现极简并行计算加速

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

date数据要在前台显示

date数据要在前台显示&#xff0c;如果要截取一部分使用&#xff0c;最好用SimpleDateFormat不要用toString不牢靠。 转载于:https://www.cnblogs.com/king12345678/archive/2012/12/07/2807604.html

被迫开始学习Typescript —— class

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

ASP.NET实现二维码(QRCode)的创建和读取

一、项目引用QRCode的DLL文件&#xff08;ThoughtWorks.QRCode.dll&#xff09; 二、ASPX页面&#xff08;两个jquery的js文件请自行去官网下载&#xff09;&#xff1a;[html] <html xmlns"http://www.w3.org/1999/xhtml"> <head runat"server"…

杨玉基:知识图谱在美团推荐场景中的应用

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Redis进阶知识一览

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

UI代码练习-视图的层次关系

2019独角兽企业重金招聘Python工程师标准>>> // // AppDelegate.h // 视图的层次关系 // // Created by on 14-12-17. // Copyright (c) 2014年 apple. All rights reserved. //#import <UIKit/UIKit.h> #import <CoreData/CoreData.h>interface Ap…