写点什么

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

  • 2022 年 4 月 25 日
  • 本文字数:3092 字

    阅读完需:约 10 分钟

本文分享自华为云社区《基于语义感知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 测试,实现接口全场景测试无代码化。


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


发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
基于语义感知SBST的API场景测试智能生成_测试_华为云开发者社区_InfoQ写作社区