一、jmeter工具介绍
gui界面
- 一切都在右键掌握之中。
- 测试计划:工作中测试计划:什么时间什么人做什么事情。
- 线程组:接口、自动化测试时,基本不会去改动。
- 配置元件
- 监听器
- 取样器:根据不同的协议,使用不同的取样器编写脚本。
- 逻辑控制器。
- 前置处理器:
- 后置处理器:对取样器进行控制。
- 定时器。
- 性能测试,这个是用于进行性能场景设计的。
- 线程组:进行性能场景设计。
- setup线程组。
- teardown线程组。
- 优先级是最高的,正式干活时,急先锋。
- 最先被执行的配置元件是:用户定义变量。
- 对性能结果进行监控,展示结果数据。
- 不同的元件,是从不同的角度,展示结果数据。
- 重点关注:用户参数。
- jmeter里面的测试计划是脚本的根文件。
- 元件
二、jmeter写脚本
- 特别注意事项:
- Accept:在请求头里面可加可不加,因为这个东西是开发所控制的,我们是无法修改的。
- 请求行
- 请求头
- 空一行
- 请求体
- 请求方法,请求地址URI。
- Content-Type
- cookie
- User-Agent
- 参数类型:表单。
- 消息体数据类型:
json
、xml
。 - 当你的接口请求参数为json格式时,一定要写请求头,请求头中一定要有
Content-Type:application/json
(如果没有这个信息,100%报错,不局限于jmeter)。 - 衍生:http请求包括哪些部分?
- json格式:
{"key":"value","key1":1}
- 开发人员接口中定义的返回码
code
,和http
中的response_code
不一样。- 3xx:重定向相关。301
- 4xx:请求URL地址有问题。400、404
- 5xx:服务器内部异常。500、
502bad gatway
- http中的
response_code
: - 开发人员在接口中定义的code,是响应代码。
每家公司定义的code
的含都不一样的,是为了方便定位某些问题的(一个code
值代表某一种意思而已)。
- 写脚本
- 测试计划上右键, 添加线程组。
- 线程组上右键,添加取样器-->http请求(http协议簇)。
- 线程组上右键,添加监听器-->查看结果树。
一个最简单的jmeter脚本,包括:线程组、取样器、监听器。
线程组:性能测试中用于场景设计的,写脚本阶段不用改动。
取样器:根据不同的协议,编写不同的脚本。
监听器:调试脚本时使用,性能测试执行时禁用监听器。
不管哪种监听器,都是对结果数据进行不同维度的展示。
这些展示是需要消耗本地资源的,从而导致资源不能足够得分配到性能测试中去。
8080端口,是tomcat的默认端口。
http协议的默认端口:80
https协议默认端口: 443
jmeter的默认保存路径,jmeter的bin文件夹。
在性能测试中,这种非必传的参数,我们也写上:
把这些非必传的参数都传了,代码对这些参数都进行了计算。
这样做性能测试,测试出的结果基本就是跟实际情况最接近的。
请注意:
1、当请求体为json, 一定要有请求头 Content-Type:application/json
2、json格式有问题。
3、协议:当协议为http时,可以不写。如果是https,那就必须写。
4、服务器名称或IP:不能带有/
。
注意:浏览器的url地址里面只能执行get方法,不能执行post方法。
5、路径:不要带域名、ip和端口。
路径开头:用/
。
不要带有空格,带有空格的请求的URL会出现urlencoded
的编码:
。
URI:资源地址。
URL:带domain。带有域名去访问资源的地址。
6、内容编码:utf8。
请求内容出现乱码处理方法:
1)内容编码:utf8。
2)请求头的Content-Type
的值中加上:charset=utf-8
3)请求体为参数类型:勾选参数“编码”,编码:urlencoded
编码。
在参数值为非字符(汉字、特殊符号) ,都需要勾选编码。
给大家的建议:不管什么类型的参数值,都建议勾选编码。
响应内容出现乱码处理方法:
不是简单的设置为utf8
、 gbk
、gb2312
、big5
,需求修改jmeter.properties
中的sampler.result.encoding
。
同一个接口,用postman请求,响应是正常的。用jmeter请求,响应就有中文乱码?
原因是:jmeter的编码是根据操作系统编码来的。
在国内,中文windows
系统的字符集编码是gbk936
,mac
、linux
系统中文编码utf8
。
在写这个系统的代码的时候,给它设置的字符集为utf-8
,而我的系统是gbk
,出现编码不一致的问题,就出现乱码。
唯独在中文的windows
系统中出现响应乱码的问题。
7、参数、消息体数据类型选择
当我们的请求接口文档中说,请求体为json
格式,那么我们就选择用消息体数据来写json
。
soap=http xml
,xml
也是写在消息体里面。
参数: 请求体是form-data
、Content-Type: application/x-www-form-urlencoded
、不指明请求体类型、请求的方法是get
,就用参数。
8、自动重定向:不会显示中间重定向过程,无法从过程中,提取信息。
跟随重定向: 会自动显示重定向过程,能从过程中提取想要的信息,用于后面的接口请求,这叫做关联。
使用keepAlive:保持连接, 长连接。
因为现在用http协议版本为1.1,长连接的开关默认是打开的。
所以,默认勾选keepAlive,但是在性能测试中,我们会根据需要,去掉这个勾。
做性能测试时,请求量是非常大的。大量的人一直在请求,一直保持着连接不放。
发过去一个请求,本地要消耗一个端口的,一个端口对应一个连接池。
需要及时的释放,不然这大量的人,不能灵活得用。