JMeter实现动态关联——两个接口在不同的线程组

【业务场景】

用户输入正确的用户名及密码登录系统,若该登录用户存在多个公司则需要选择相应的公司进入系统(若仅有一家公司则直接进入系统),可浏览公司相关产品信息。

【实现逻辑】

用户登陆成功后首先会获取一个token值,出于安全机制会同步提供一个access_token。登录时选择公司及进入系统后的操作,如浏览产品会校验token值与access_token值是否正常。

两者均正常,则可操作成功,但未传token值与access_token值或其失效的话,后续操作失败。

【两个接口在同一个线程组】

如果两个接口在同一个线程组中,JMeter实现动态关联比较简单,通过添加Http信息头管理器可以完成。

如下图所示,登录选择公司时没有传相应token及access_token,导致选择公司接口执行失败,后续产品浏览相关操作也同样失败。

 我们看下HTTP信息头管理器中的内容,通过变量${token}获取登录请求下的token值,通过${token_tpye}${access_token}获取AccessToken请求下对应token类型及access_token值。

 启用HTTP信息头管理器后,再次执行可以正常通过。

_________________________________________________________________________________分割线_______________________________________________________________________________________________________

【思考】

如果登录系统与浏览产品不在一个线程组下,那如何实现参数的动态关联呢?

今天在学到这块的时候,总结了下大致思路,不足之处希望大家指正。

【两个接口不在同一个线程组】

现在登录系统与浏览产品不在同一个线程组下,如果按照之前那种处理方式,添加一个HTTP信息头管理器执行发现仍然报401错误,如图所示。

 【解决思路】

1.先提取上一个接口中的token与access_token值;

2.将提取出来的token与access_token设为全局变量;

3.同时需要用到Beanshell取样器,目的用来执行一段java代码;

4.这里需要用到函数助手__setProperty将token与access_token设为全局变量,将生成的代码

${__setProperty(Token,${token},)}

${__setProperty(Token_Type,${token_type},)}

${__setProperty(Access_Token,${access_token},)}

 放入Beanshell取样器中;

5.在下一个接口中通过函数助手__property 生成代码

${__property(Token,,)}

${__property(Token_Type,,)}

${__property(Access_Token,,)}

6.在下一个接口中,HTTP信息头管理器中通过第5步生成的代码获取响应的token与access_token值。

【操作步骤】

1.通过函数助手__setProperty将token,token_type,access_token设置为全局变量,并放入BeanShell取样器中;

2.通过函数助手__property生成可被调用的Token、Token_Type、Access_Token表达式和对应名称,在下一个接口中,HTTP信息头管理器中调用相应的值。

 至此,接口已经调试通过。

 该文章仅作为个人学习过程的总结,如有理解错误的地方欢迎大家指正,避免误人子弟,哈哈哈。

猜你喜欢

转载自www.cnblogs.com/mrgavin/p/12762446.html