jmeter模拟web端登
# jmeter模拟web端登
# 1、jmeter模拟web端登陆实例演示
此部分为操作演示内容,连接地址为: [//]: <> (http://test2.xhqb.com/mobile/activity/JDcard/index.html。)
- charles录制
- jmeter录制
- 完善jmeter脚本
- 重跑观察并分析失败原因
- 分析需要关联的参数
# 2、jmeter常见组件介绍
jmeter组件非常多,大的类别有线程组、逻辑控制器、配置元件、定时器、前置处理器、Sample、后置处理器、断言、监听器。常用的其实并不多如下:
- 线程组
线程数:
Ramp-up Period(in seconds):
循环次数:
调度器:
- 用户自定义变量
就是通过变量来引用数据。通常提取一些公共的变量。方便后期修改数据和参数化使用。引用方式${变量名}
HTTP Cookie 管理器
web端浏览器有cookie机制,jmeter通过HTTP Cookie 管理器来模拟浏览器的cookie管理行为,如果不添加可以会造成回放失败。
HTTP信息头管理器
管理http请求头信息,放在和http请求同一层级对当前层级http请求都生效,http请求下一层级仅对当前层级生效。其他组件也有类似的作用范围概念,大家可自行实验总结。
HTTP请求
http请求是众多sample中的一种,如图sample下的组件,就是jmeter所支持的一些协议。是jmeter接口运行的核心组件。最常用的就是http请求。
正则表达式提取器
正则表达式提取器的主要功能是提取响应报文中的数据,可以对响应头、响应体等进行提取。一般的做法是通过左右边界来提取。复制响应数据中包含要提取参数、及能唯一定位到该数据的左右边界数据,然后把要提取的参数改成
(.*?)
,即为通用正则表达式。引用同变量${变量}
。jmeter通过正则表达式提取器实现了关联参数化的操作,当然还有其它组件也可以实现类似功能。
JSON Path Extractor
json path语法
{ "employees":[ { "firstName":"Bill", "lastName":"Gates" }, { "firstName":"George", "lastName":"Bush" }, { "firstName":"Thomas", "lastName":"Carter" } ] }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16$.employees[0].firstName
import groovy.json.JsonSlurper def jsonSlurper = new JsonSlurper() def j = '''{"employees":[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"},{"firstName":"Thomas","lastName":"Carter"}]}''' def o = jsonSlurper.parseText(j) print(o.employees[0].firstName)
1
2
3
4
5
6结果是:Bill,通过json path语法这种语法,我们可以很方便的对响应体是json格式的数据进行操作。
Debug Sampler
调试时使用,可以查看过程中产生变量的值。非调试情况下,需要禁用。
察看结果树
可以对请求详细结果进行查看。
响应断言
jmeter自身会认定http异常响应码为失败,比如4XX,5XX等。断言可以从业务层面对响应是否成功进行判断。
固定定时器
Synchronizing Timer
Backend Listener
# 3、常用内置变量
jmeter不管是通过用户自定义变量、参数化、关联以及其它方式获取的变量,对于测试线程都是局部变量,引用方式为${变量名}
,变量名大小写敏感。并且通过jmeter的一些内置静态变量可以很方便的来处理。常用的内置变量如下:
vars
本质上是一个map类型,可以取到已经存在的变量的值,也可以对变量的值进行修改、创建等操作。
vars.get("") vars.put("",XXX)
1
2log
在jmeter.log中打印信息
log.info("xxx")
1ctx
上下文,用的比较少,但是功能强大,有待于探索。
api文档:https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html
ctx.getThreadNum()
1props
和vars一样,区别在于可以跨线程传递数据。
props.put("sampleresult.default.encoding","utf-8") encoding = props.get("sampleresult.default.encoding") log.info("sampleresult.default.encoding="+encoding)
1
2
3prev
previuos SampleResult
注意使用时要放在sample之后,比如后置处理器、断言等。
//获取响应信息 prev.getResponseDataAsString() //获取响应code prev.getResponseCode()
1
2
3
4
jmeter官方api文档:
http://jmeter.apache.org/api/org/apache/jmeter/
Q:
- ramp up对性能的影响?
- 怎么判断哪个请求是重定向的起点?
- 正则表达式提取器和jsonPath提取器的区别?