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


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

    本文分享自华为云社区《基于语义感知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分页信息等,采用添加黑名单的方式过滤

    2. 基于对同一资源对象的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测试,实现接口全场景测试无代码化。

     

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

  • 相关阅读:
    2021 华数杯全国大学生数学建模竞赛B题-进出口公司的货物装运策略(附带赛题解析&获奖论文及Python代码)
    C语言字符函数和字符串函数详解
    【Redis进阶】Redis单线程模型和多线程模型
    python Jupyter程序之Matplotlib数据可视化
    Hadoop -- NN和2NN的工作机制
    Cholesterol-PEG-FITC,Fluorescein-PEG-CLS,胆固醇-聚乙二醇-荧光素水溶性
    CC++中深浅拷贝(map、vector)与内存释放
    【面试宝典】39道C++内存管理高频题库整理(附答案背诵版)
    基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的高校企业员工公寓后勤管理系统
    C语言编写简易图书管理系统
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/16189034.html