上一篇中对JMeter做了初步的介绍,接下来认识下配置元件
1、添加HTTP请求默认值
路径:添加--配置元件--HTTP Requests Defaults
可以设定一些缺省值,假设有10个请求,访问域名和端口都是一样的,那HTTP请求中就不再需要单独配置了,比较方便(增加脚本的移植性)
2、HTTP信息头管理器
内容为空,有需要的时候进行添加,否则无需处理
一般的请求格式:
1、类似form表单
2、参数json格式,添加Content-Type:application/json,utf-8
3、参数是XML,添加text/xml
注:HTTP请求下的【HTTP信息头管理器】,有些值是发送请求必须的头信息,比如Referer、X-Requested-With、Content-Type(目前发现这几个可能会影响请求是否成功)
3、添加HTTP Cookie管理器
储存在用户本地终端上的数据,主要用于默认cookie管理
通常情况下,当用户结束浏览器会话时,系统将终止所有的cookie,当web服务器创建了Cookie后,只要在其有效期内,当用户访问同一个Web服务器时,浏览器首先要检查本地的cookies,并将其原样发送给web服务器
作用:
1)发送请求,经常要校验cookies信息
2 )录制时使用的cookie管理器,只能在指定的域下面使用,如果服务器地址切换,发现发送请求时,就会出现no cookies
最典型的应用:
(1)判断注册用户是否已经登录网站,用户可能会收到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续
(2)购物车之类的处理,用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入cookies,以便在最后付款时提取信息
如图,禁用了cookie,登录成功,但访问其它页面时仍跳转到了登录页面
如何设置:
1、自动管理cookies,jmeter配置文件中设置(bin目录)CookieManage.save.cookies=true,去掉前面的#,然后重启jmeter
2、手动添加cookies,可以利用Firefox中导出cookies之后,再导入Jmeter中轻松完成(浏览器需安装Firebug)
4、添加HTTP请求
路径:线程组右击—>添加—>Sampler—>HTTP请求
如上图路径中?号后面的可以写在url中,也可以写在Parameters中
- 名称:用于标识一个取样器,可以使用一个有意义的名称,方便快速识别
- 注释:记录用户可读的注释信息
- 协议:向目标服务器发送HTTP请求时的协议,可以是HTTP或者是HTTPS ,默认值为HTTP
- 服务器名称或IP :HTTP 请求发送的目标服务器名称或IP地址
- 端口号:目标服务器的端口号,默认值为80
- 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE,通过下拉选择
- 路径:目标URL 路径(不包括服务器地址和端口)
- Content encoding :内容的编码方式,默认值为iso8859
- 自动重定向:如果选中该选项,当发送HTTP 请求后得到的响应是302/301 时,JMeter 自动重定向到新的页面
- 跟随重定向:如果请求中涉及到了类似session id的变化,就选择这个
- Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用Keep-Alive 方式进行HTTP 通信,默认选中。
- Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,可以使用表单形式发送,默认不选中。
- Parameters,同请求一起发送参数: 在请求中发送URL 参数,用户可以将URL 中所有参数设置在本表中,表中的每一行是一个参数值对(Name、Value值)
PS:如果是POST请求,数据以Json的格式传的,那么可以把参数写在Body Data里面,格式:{"XXX":"XXX"},若不是Json格式的话就直接写xx=xx,多个参数中间用&
以公司OA系统加班管理来演示下:
通过Fiddler工具抓包分析得到这个页面有5个参数,图中用申请编号进行搜索,有2个参数值是空值,因此我以为是没什么用,请求脚本中就没有填写申请日期和状态的值,只维护了3个参数,运行后发现数据是0,但页面是有一条数据的,心想难不成没有值的2个参数也是必填的吗,加上去一试,果不其然,运行成功了
5、HTTP授权管理器(用的较少)
可以理解为用户名和密码的验证过程,也是一种验证机制,比如说客户端或浏览器与服务端发生交互、发生请求时,需要提供凭证(URL、用户名、密码),提交后服务端通过后才会继续后续的请求或者交互
- clear auth on each iteration:是不是每次迭代时都清空,不勾验证一次可能就不再去验证了,一般不勾
6、用户定义的变量
具体用法在变量参数化章节有提到
7、计数器:数字记录
- 启动(Starting value):开始值
- 递增:即步长,以多少进行增长,若值为2,起始值为1,那么第二个请求执行时就是3
- 最大值(Maxinum value):一直递增到最大值时停止增长
- Number format:python-00000000,0表示占位符
- 引用名称:存储递增后的值,如num
- 与每用户独立的跟踪计数器:每个线程都去独立计数,互不干扰,准确性会更高一点
PS:如果遍历一次后已经达到最大值了,但还达到线程的循环数,此时又会重头开始遍历
为了看起来更直观一点,把线程数改成15,重新运行,结果如下: