接口间参数传递的一种解决方案

引言

做过接口自动化测试的同学肯定都熟悉在全链路测试过程中,很多业务场景的完成并非由单一接口实现,而是由很多接口组成的一条链路实现。例如你在淘宝上购物场景。

不同于单接口测试,这种链路型的接口自动化测试,由于接口间有参数依赖关系,往往不能将链路中的接口入参固定写死,而是要依赖“上游”的响应中的某个字段值,因此需要提取出来动态地传递给下个接口,如下图。

解决链路间参数传递的问题可以简化为解决接口间的参数传递问题。当然我上图举例是比较简单的,下游对上游的依赖关系为1对1这种类型。实际业务场景中,更多的是多对一这种场景,即下游依赖上游的多个接口的返回结果。

当然,针对这个问题的解决方案,其实还是蛮多的。就以JMeter工具为例,它就提供了通过后置处理器的多种参数提取方法。

其解决方案是,通过正则、JSON Extracor等提取的结果作为变量,动态传递数值给下游(变量)使用。

当然,这种解决方案对于JMeter工具来说,是个不错的解决方案,而且这个解决方案也具备普适性,就算你开发自己的接口测试框架,也是可以使用这种解决方案的(实际上,我在前东家参与研发的接口测试框架,当时解决接口间参数传递的问题就是借鉴的这种思路。开发了一个类似JMeter正则提取器的正则提取工具包,引用工具包可以允许你输入要提取的字段key便可匹配到其字段值value,如果提取不到就返回默认值,如果有响应体中一个key存在多个value,则返回最后一个匹配到的value;下游接口则使用Java replace()方法替换掉请求体中的${xx}。)。

如果只追求可以用,这个方案没问题。但是这个方案缺点就是接口用例开发效率比较低,增加了写接口测试用例的成本。这也是我当时遇到的一个问题,大家写自动化测试用例的时间很大一部分花在接口间参数提取和调试上。此外,这个方案也会增加维护成本,导致用例的“稳定性”比较低。是因为如果上游接口的响应体结构变化可能会影响提取结果,下游的接口请求体中的${xx}也需要手动维护。总结下来,自动化用例的维护和开发成本主要集中在接口间参数传递的维护上面。

是否有更优的解决方案呢?

试想一下,我们能否将整条链路可能使用到的字段集合作为一个池子,在上游接口的响应结果提取出key-value并扔到池子里。下游的接口request体模版化,以${xxx}表示需要替换的变量,利用模板引擎(例如Java的velocity/FreeMarker)将${xxx}替换成“池子”中存在的value。实现的简图如下。

动手做

下面就以Java语言实现为例,写两个方法A、B,且B依赖方法A的返回结果。

我们只需要开发 上下文类、模版组装工具、模拟场景代码即可。

import com.alibaba.fastjson.JSONObject;import org.apache.commons.beanutils.BeanUtils;import java.util.Map;public class Client {public static JSONObject login(){        JSONObject result = new JSONObject();        result.put("token","xsjkjdskdjsksjfksjfksjk");        return result;    }// pay接口,依赖login接口public static JSONObject pay(String request){        JSONObject result = new JSONObject();// 就简单写了if (request.contains("xsjkjdskdjsksjfksjfksjk")){            result.put("order", "122324434335");            result.put("status", "success");        } else {            result.put("status", "fail");        }return result;    }// 场景模拟public static void main(String[] args) {// 首先调用登陆接口        JSONObject loginResponse = login();// 步骤1.将结果写入上下文        Context context = new Context();        context.setToken(loginResponse.getString("token"));// 创建一个pay接口的request模版String request = "{\"token\":\"${token}\"}";try {// 步骤2.利用Apache BeanUtils工具 BeanToMap方法 将上下文转化为keyValues            Map<String,String> keyValues=null;            keyValues = BeanUtils.describe(context);// 步骤3.组装模版,将${token}替换为上下文中的其key存在的valueString out_request = VelocityUtils.parse(request, keyValues);            System.out.println("组装request请求模版:" + out_request);// 发起下单支付            JSONObject result = pay(out_request);// 打印接口返回结果            System.out.println("打印响应结果:" + result.toString());        }catch (Exception e){            System.out.println("异常退出");        }    }}

这种方案的优点:

我们只需要care步骤1即可(将上游的响应结果写入上下文),后面的组装模版这些可以写成同样的工具,只需要传入模版+上下文内容即可,无需关注其他,能大大节省自动化用例开发和维护的成本。

当然,本文只是抛砖引玉,如果有其他方案,也希望大家多多发散,多多交流沟通。

工具清单:

commons-beanutils

org.apache.velocity

com.alibaba.fastjson

org.projectlombok.lombok

往期推荐

多项目管理实践论坛定于12月11-12日通过云端分享

经验分享|测试工程师转型测试开发历程

技术面必考:多线程、多进程

接口测试框架开发实践2:接口自动化测试框架设计思路

接口自动化测试框架实践1:接口测试概述

我在阿里做测开

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

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

相关文章

计算机应用设计大赛获奖信息,北京大学第六届“计算机应用设计大赛”圆满落幕...

6月6日下午&#xff0c;北京大学创新创意系列赛事颁奖典礼在英杰交流中心月光厅举行&#xff0c;会上颁发了计算机应用设计大赛、“挑战杯”系列竞赛、数学建模与计算机应用竞赛和“禁毒教育”创意大赛四项赛事的各类奖项。信息科学技术学院2013级本科生王迪作为获奖代表上台领…

魔物学院计算机,测试 | 你属于魔法学校什么学院的?

原标题&#xff1a;测试 | 你属于魔法学校什么学院的&#xff1f; 本Part长年主持&#xff1a;绿茶 本Part今日主人公&#xff1a;心理测试 如果你有机会在霍格沃茨魔法学校读书,依据你的性格,分院帽会把你分到哪个学院呢?你适合哪个学院呢?是高贵的斯莱特林,还是勇敢的格兰芬…

uniapp 微信小程序通过 wx.openCustomerServiceChat对接客服。

直接上解决方案&#xff0c;直接在绑定的方法中调用wx.openCustomerServiceChat 方法即可。 需要注意的几点。 hbuilder x 需升级到 3.4.3 版本以上。使用的&#xff0c;微信开发者工具中是看不到效果的&#xff0c;需要打包后&#xff0c;在微信中扫码查看。&#xff08;体验…

微软丢出王炸:微软发布重磅更新Windows Copilot

在今天凌晨结束的微软 Build 2023 大会上&#xff0c;微软发布了重磅更新Windows Copilot. 微软此前把 GPT-4 接入Office 套件而推出的 Copilot&#xff0c;将全面集成到 Windows 系统。 Windows Copilot 注册直通&#xff1a; https:/forms.office.com/pages/responsepage.asp…

仿QQ聊天程序

仿QQ聊天程序 转载请标明出处&#xff1a;牟尼的专栏 http://blog.csdn.net/u012027907 一、设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件&#xff0c;基本功能和QQ类似。首先&#xff0c;系统分为两大部分&#xff0c;第一部分是…

仿微信语音聊天

如上图&#xff0c;是常见的仿微信的聊天程序&#xff0c;实现的效果如上图所示&#xff0c;由于项目太大&#xff0c;本文只讲录音部分。本项目示例代码&#xff1a;https://github.com/xiangzhihong/weixinAudio 主要用到4个核心类&#xff1a; 自定义录音按钮&#xff08;R…

Android 仿微信实现语音聊天功能

在此感谢鸿洋大神&#xff0c;因为我这是在慕课上看大神的视频做出来的。 代码中我已经添加了很多很多注释&#xff0c;不光是为了大家&#xff0c;也是为了自己能够更加透彻的理解该功能 支持原创&#xff0c;也不算原创了哈哈~ http://blog.csdn.net/lhk147852369/article/…

【Unity人物动画】SALSA With RandomEyes (语音生成嘴型/人物说话) 使用

SALSA使用探索 之前做项目时想实现人物说话的效果&#xff0c;因为我们的语音是AI合成的&#xff0c;有很多片段&#xff0c;如果能根据语音生成嘴部的动画&#xff0c;那将极大便利我们的工作。后面是找到了SALSA的这款插件&#xff0c;并摸索出使用方法。 1 插件介绍 官方网…

仿QQ聊天程序(java)

简易版qq聊天&#xff1a;qq聊天[简易版] (resourcecode.cn) 推荐java最新聊天项目&#xff08;java仿微信聊天&#xff09;: java 简单仿微信聊天(springboot)_Garry1115的博客-CSDN博客_springboot 模拟微信 转载请标明出处&#xff1a;牟尼的专栏 牟尼的博客_CSDN博客-算法…

LaTeX数学公式输入初级入门

LaTeX最强大的功能就是显示美丽的数学公式&#xff0c;下面我们来看这些公式是怎么实现的。 1、数学公式的前后要加上 $ 或 \( 和 \)&#xff0c;比如&#xff1a;$f(x) 3x 7$ 和 \(f(x) 3x 7\) 效果是一样的&#xff1b; 如果用 \[ 和 \]&#xff0c;或者使用 $$ 和 $$&a…

《LaTex》LaTex数学公式简介

LaTex数学公式简介 文章目录 一、引用数学公式的方法二、LaTex数学公式的基本代码1. 符号1.1. 常规的数学符号&#xff1a;直接从键盘输入1.2. 任何1.3. 存在1.4. 属于1.5. 小于等于1.6. 大于等于1.7. 约等于1.8. 更多数学符号 2. 希腊字母2.1. 阿尔法2.2. 贝塔2.3. 伽马2.4. 希…

LaTex数学公式简介

LaTex数学公式简介目录 一、引用数学公式的方法二、LaTex数学公式的基本代码1. 符号1.1. 常规的数学符号&#xff1a;直接从键盘输入1.2 标志符1.3 希腊字母1.4 运算符1.4.1 三角函数1.4.2 极限1.4.3 项数和指数1.4.4 积分1.4.5 矩阵 三、补充四、参考文献 一、引用数学公式的方…

常用数学公式,推导记录

1 组合数计算公式 组合公式的推导由排列公式去掉重复的部分得来。 排列是&#xff0c;从n个不相同元素中取出m个排成一列&#xff08;有序&#xff09;&#xff0c;第一个位置可以有n个选择&#xff0c;第二个位置可以有n-1个选择&#xff08;已经有1个放在前一个位置&#xff…

CMU 开源数学神器,可快速将数学公式转为精美图表!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 转自机器之心 在有些人眼里&#xff0c;数学公式就是一堆数字和符号&#xff0c;但在另一些人看来&#xff0c;这些数字和符号是可以动的&#xff0c;而且极富美感。为什么会有这种差距&am…

Markdown / KaTex数学公式汇总

目录 【LaTex和KaTex】【软件推荐 Mathpix】一、如何插入公式二、上下标三、常用运算符四、高级运算符五、常用数学符号六、特殊符号6.1 箭头6.2 公式序号 七、括号使用八、矩阵九、集合运算十、希腊字母十一、字符大小 【LaTex和KaTex】 LaTeX是一种基于ΤΕΧ的排版系统&…

Latex数学公式表

1. Latex的两种公式模式 行间(inline)模式&#xff1a;即在正文中插入数学内容。行间公式用$ … $ 独立(display)模式&#xff1a;独立成行&#xff0c;可以有或没有编号。无编号用\ [ … \ ] 2.基本元素 希腊字母 标注 上下标 分数 运算符 求和&#xff08;\sum&#xff09;&…

陶哲轩预言成真!MIT加州理工让ChatGPT证明数学公式,数学成见证AI重大突破首个学科

来源 | 新智源 ID | AI-era 大语言模型&#xff0c;可以用来证明数学定理了&#xff01; 「数学天才」陶哲轩曾在一篇博客中称&#xff0c;2026年&#xff0c;AI将与搜索和符号数学工具相结合&#xff0c;成为数学研究中值得信赖的合著者。 这个预言&#xff0c;如今已经成…

Typora数学公式大全

Typora数学公式大全 typora做笔记时候经常要插入数学公式&#xff0c;但是好多符号难以记忆&#xff0c;所以该文总结个人常用符号便于查找 1 常见希腊字母 公式代码公式代码公式代码\alphaα\xiξ\omegaω / Ω\betaβ\zetaζ\phiΦ / φ\deltaδ / Δ\DeltaΔ\piπ\epsilo…

福布斯发布2023全球亿万富豪榜

中国内地亿万富豪人数仍位居全球第二&#xff0c;仅次于美国。 对于全球富豪们来说&#xff0c;过去的一年充满挑战。利率骤增、股价承压、独角兽估值受挫&#xff0c;无一不对全球企业经营造成巨大影响。 2023福布斯全球亿万富豪榜的上榜人数较去年下降28位&#xff0c;总人…

智能音箱来了,语音交互设计的一点认知

语音用户界面&#xff08;或VUI&#xff09;是一种交互模型&#xff0c;在该模型中&#xff0c;人与机器进行交互&#xff0c;并至少部分通过使用语音来执行一组任务。 实际上&#xff0c;这种方式的交互式语音应答&#xff08;IVR&#xff09;系统在银行业和旅游业中已经得到了…