背景
因为项目的原因与Jmeter相遇,需要从无到有,也因此有了这次神奇的学习体验。
在研究的过程中发现有些问题在网上搜到的和实际使用还是有些出入,或许也是我道行太浅,理解不够,因此按照自己的逻辑整理了一些问题的处理,也欢迎各位大佬提出宝贵意见,若有更好的处理方式,也非常欢迎大家一起交流~
ps:以下问题纯靠个人回忆,这也是个不太好的习惯,希望以后能够边做边记。
问题回顾
1.beanshell的编写
问题描述:准确的说这个也不算是个问题吧,应该算是一个困难。由于习惯了各种编程软件的自动补全提示功能,导致在beanshell中编写代码时磕磕绊绊。
解决方案:将所需要的jar包导入到idea中(或者其他编程软件都可以,此处以idea为例)。
jmeter的包在安装路径的bin目录下,ApacheJmeter.jar包中包含beanshell所需的变量(vars,prev等)的类,所以我把它看作一个jmeter的基本包。
打开idea,新建一个项目,选择“File>Project Structure>Platform Settings>SDKs”,点击加号,找到ApacheJmeter.jar包将其导入即可,其他有需要使用的jar包也按照该步骤导入即可。
相关说明:每当创建和Beanshell相关的元件时,不论是beanshell前置处理器还是beanshell断言等等,都会有可使用变量的提示。
这些变量的详细说明我是参考的小菠萝测试笔记,这是目前为止我觉得比较适合我的笔记。测试高级进阶技能系列 - Jmeter - 随笔分类 - 小菠萝测试笔记 - 博客园 (cnblogs.com)
文章中介绍了各种变量的类型,方便我们在idea中声明需要的变量。
然后就可以开始写实现逻辑啦,因为idea会有自动导包的功能,所以写完之后需要检查一下Java文件开头所有使用到的包,除了jmeter基本包以外还有没有使用其他的包,将多出来的包同步到jmeter安装路径下的lib目录下并重启jmeter,此处我多出来的就是json.jar包。
重启完成后将代码逻辑拷贝到jmeter中即可。
2.嵌套循环中下标问题
问题描述:
所有请求返回的都是json格式的,首先需要获取的是A响应中某个json数组的所有元素,并将这些元素依次作为B请求的参数发送请求B1、B2、B3...Bx,每一个B请求返回一个json格式的响应,获取这些响应中的某个json数组,并将这些数组元素作为C请求的参数,且每个B请求返回的json数组中的元素个数不定,即B1可能对应C1、C2、C3,而B2可能对应C1。
解决方案:
在“Debug PostProcesser”中寻找合适的可作为下标的参数,计数器配合循环控制器仅适用于每个B请求响应的json数组的元素数量一致的情况,而以上情况中B请求的响应中json数组的元素个数不一定一致,所以需要使用变量,而不是固定的计数器,后来摸索了很久,目前发现的一个方法就是使用循环控制器自带的下标,配合beanshell使用,从而实现变量获取。(不过总感觉会有别的方法,但是我目前只找到了这种实现方式,希望有大佬可以指教一下)
3.计数器不重置问题
问题描述:
在循环控制器下增加了计数器,想使用计数器的值作为循环中请求入参的index,然而发现嵌套循环时,计数器并不会重置,好像是以线程组为单位。
解决方案:
使用beanshell前置处理器,因为我需要index从1开始,这是由于json提取器提取的数组后缀下标都是从1开始,所以为了方便取用,在beanshell前置处理器中处理一下循环控制器的下标即可。