业务场景:
用户输入正确的用户名及密码登录系统,若该登录用户存在多个公司则需要选择相应的公司进入系统(若仅有一家公司则直接进入系统),可浏览公司相关产品信息。
实现逻辑:
用户登陆成功后首先会获取一个token值,出于安全机制会同步提供一个access_token。登录时选择公司及进入系统后的操作,如浏览产品会校验token值与access_token值是否正常。
两者均正常,则可操作成功,但未传token值与access_token值或其失效的话,后续操作失败。
两个接口在同一个线程组:
如果两个接口在同一个线程组中,JMeter实现动态关联比较简单,通过添加Http信息头管理器可以完成。
如下图所示,登录选择公司时没有传相应token及access_token,导致选择公司接口执行失败,后续产品浏览相关操作也同样失败。
我们看下HTTP信息头管理器中的内容,通过变量 t o k e n 获取登录请求下的 t o k e n 值,通过 {token}获取登录请求下的token值,通过 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信息头管理器中调用相应的值。
至此,接口已经调试通过。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
人生犹如航行的船只,每一次奋斗都是向前扬帆的力量。不要畏惧风浪,勇往直前,相信自己的努力和坚持,终将驶入成功的港湾,让梦想的旗帜翻飞,展示奋斗的光芒与荣耀!
奋斗是梦想的翅膀,拼搏是实现的起点。不论前路有多崎岖,只要心怀勇气和坚定,脚下就有一条通向成功的道路。相信自己,勇往直前,用汗水浇灌理想,终将绽放出辉煌的人生之花!
梦想是奋斗的指南针,汗水是成就的滋养剂。不论身处何境,怀揣信念前行,每一步坚定向前,都是自己人生的勇敢注脚。奋斗的路上创造辉煌。