您的位置 首页 java

「技术分享」Jmeter之上下游接口传参实践

阅读原文:

点击关注“八戒技术团队”,阅读更多技术干货

Apache Jmeter 是Apache组织基于 Java 开源的压力测试工具,可用于对各类软件做压力测试。同时,也广泛应用于接口测试、分布式压力测试、 Restful 风格的API测试。下面通过一个注册登录的实例来学习下Jmeter如何在上下游接口间进行参数传递。

通常在软件测试中,会遇到web网站注册、登录业务场景的测试,一般会涉及多个接口间的数据传递。

场景描述:模拟某网站注册账户时,需输入手机号码,且每次注册时,输入的手机号码不能重复;登录网站时明文密码需加密,登录后获取当前用户的基本信息。这时,需要用到Jmeter内置的强大函数助手来实现这些操作了。

使用Random函数生成随机号码

random函数的作用是生成一个随机数,用于生成随机的手机号码。

「技术分享」Jmeter之上下游接口传参实践

检查生成的手机号码数据无异常后,把函数直接粘贴到请求体中。

「技术分享」Jmeter之上下游接口传参实践

察看结果树-用户注册,已生成了随机手机号码。

「技术分享」Jmeter之上下游接口传参实践

使用digest函数对输入的密码进行加密

发送登录请求时,我们需要将登录明文密码进行MD5加密。

「技术分享」Jmeter之上下游接口传参实践

把函数直接粘贴到请求体中。

「技术分享」Jmeter之上下游接口传参实践

察看结果树-用户登录,可以看到,明文密码已进行加密

「技术分享」Jmeter之上下游接口传参实践

Jmeter上下游接口传参

「技术分享」Jmeter之上下游接口传参实践

场景中登录接口返回的结果,需将返回结果中的data设为变量。

基本原则:在需要进行参数传递的地方,添加 Json 提取器,提取到上游接口返回的结果,设置为变量,传递给下一个请求。

察看结果树-用户登录-JsonPathTester视图,在 JSON Path Expression中输入$.data,测试json路径表达式结果是否匹配正确,pass就可以将该路径表达式提取的值通过json提取器设置为上游变量。

$是Jmeter中内置的,表示整个服务器返回的结果。

$.data返回结果中对应的data值。

「技术分享」Jmeter之上下游接口传参实践

设置json提取器

用户登录成功之后可以获取到用户的token值,需将获取的token值传递到下游的其他接口中使用。打开用户登录,右键添加JSON提取器,配置如下:

① Apply to(应用范围),选默认的main sample only就可以了。

② Names of created variables,接收提取值的变量名设置为token。

③ JSON Path expressions,设置为$.data,表示服务器返回的结果,用于登录成功后将token值提取出来。

④ Match No.,配置匹配为1,即取第一个值。

「技术分享」Jmeter之上下游接口传参实践

执行脚本,察看结果树-调试取样器中,可以看到,token值已正确提取。

「技术分享」Jmeter之上下游接口传参实践

下游接口引用

下游的获取用户信息接口,需使用token,将token值放入HTTP信息头管理器中

「技术分享」Jmeter之上下游接口传参实践

运行脚本,察看结果树-获取用户信息,可以看到接口中拿到了最新的token值

「技术分享」Jmeter之上下游接口传参实践

还可添加json断言,判断获取的用户信息是否和当前登录用户一致。

「技术分享」Jmeter之上下游接口传参实践

以上我们通过一个简单的网站注册登录场景,学习了在单个 线程 组中如何使用json提取器提取上游接口变量,并在后面的接口中进行引用。

若是两个不同的线程组,该怎样将第一个线程组中json提取器设置的变量,传递给第二个线程组呢,即线程组间如何动态传参?关键在于 BeanShell

① 在上游的线程组中通过json提取器或正则表达式提取为变量;

② 上游接口中添加beanshell后置处理程序,将其设置为属性;

③ 然后在我们的测试计划上添加beanshell预处理程序,获取到该属性值并设置为变量;

④ 下游其他线程组的接口即可引用变量。

案例总结

使用Jmeter进行接口测试时,经常需要处理一些特殊数据,这些都可以用到Jmeter强大的函数助手,可以帮助我们生成相应的测试数据,如使用Random函数、digest函数等生成随机数据及对相关数据进行MD5加密。

在Jmeter接口测试中进行上下游传参时,需根据业务确定接口执行的先后顺序,上游接口中使用json提取器,将返回值中的相关字段设置为变量,根据层级关系来递进取值,下游接口中直接引用该变量即可。同时还可添加相应的json断言,进行判断。当接口传参复杂时,比如可能需提取多个值,或入参名称动态变化,或需提取特定条件下的参数值,也可使用正则提取器、JmesPath提取器以及更强大的BeanShell来完成不同线程组上下游的参数传递。

希望以上内容能对有需要的人有所帮助

欢迎大家留言写下自己希望了解的技术方向

欢迎大家一起探讨交流

文章来源:智云一二三科技

文章标题:「技术分享」Jmeter之上下游接口传参实践

文章地址:https://www.zhihuclub.com/179189.shtml

关于作者: 智云科技

热门文章

网站地图