1.请求headers设置
在【HTTP信息头管理器】里面添加,需要添加的信息,可以问开发要,或者自己用fiddler抓取
此处要注意传递的Accept-Language值要填写服务器支持的格式比如application/json,不然服务器返回500,极有可能就是你传递参数的格式不对
2.http请求BodyData乱码
修改jmeter.properties配置文件,在bin目录下,
jsyntaxtextarea.font.family=Hack | 这一句注释去掉hack是字体 |
3.响应消息中文显示乱码
原因:jmeter默认编码是ISO-8859-1不支持中文,
解决办法一:
添加后置处理器,让response data变为合适的编码类型
Bean Shell PostProcessor
Script: | prev.setDataEncoding("UTF-8"); |
解决办法二:
修改jmeter.properties文件,将
Sampleresult.default.encoding=ISO-8859-1 | 改为UTF-8 |
4.测试系统收到的乱码
设置http请求,或者请求默认值的,Contentencoding参数为utf-8
5.ext:
下载https://jmeter-plugins.org/downloads/all/管理插件包
6.502:
并发数过多,服务器无响应
7.301:
可能是应该协议写成https,没有填写
8.插件 :PerfMon
一、ERROR: java.io.IOException: Agentis unreachable via TCP/UDP
原因:1.运维把外部访问禁掉了,找他给打开
2.没有在被测试的服务器上安装插件serveragent
下载地址(https://jmeter-plugins.org/wiki/PerfMonAgent/),解压到服务器任意地址后进入目录,执行startAgent.sh或startAgent.bat即可启动agent。
或者 wget https://jmeter-plugins.org/downloads/file/ServerAgent-2.2.1.zip
3.serveragent端口被占用了,使用另一个端口(默认是4444)
./startAgent.sh --tcp-port 3401 --udp-port 3402 --sysinfo
二、java.net.NoRouteToHostException: Cannot assign requested address
原因:
由于linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放。
查看linux支持的客户端连接端口范围,也就是28232个端口:
cat /proc/sys/net/ipv4/ip_local_port_range
32768 -61000
解决方法:
1. 调低端口释放后的等待时间,默认为60s,修改为15~30s
echo 30>/proc/sys/net/ipv4/tcp_fin_timeout
2.修改tcp/ip协议配置,通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用。
echo 1>/proc/sys/net/ipv4/tcp_tw_reuse
3.修改tcp/ip协议配置,快速回收socket资源, 默认为0, 修改为1.
echo 1>/proc/sys/net/ipv4/tcp_tw_recycle
三、ERROR: java.net.ConnectException:Operation timed out (Connection timed out)
这个很可能就是被防火墙挡住了,要是用云服务器,可能要在云服务器的控制台开启
9、Constant Throughput Timer 的主要属性介绍:
名称 :定时器的名称
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
Calculate Throughput based on :有5个选项,分别是:
This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以矣线程的数量。
All active threads : 设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。
All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
10、压力机
需要别人的机器也安装jmeter
在别人的机器上运行jmeter-server.bat
修改jmeter.properties文件,查找remote_hosts
原始:remote_hosts=127.0.0.1
改为:remote_hosts=127.0.0.1,127.0.0.2:1099
保存重启jmeter->运行->远程全部启动
这样运行时压力机的机器上也要有运行的脚本
修改jmeter.properties的参数
要实现多台压力机并发,就必须有多台服务器上安装了jmeter程序包,首先把一台服务器作为主压力机,测试脚本放到这台机器上,主压力机与从压力机在同一局域网中,服务器之间可以ping通
第一步:在linux服务器上安装jmeter软件,上传jmeter安装包至服务器rz
第二步:解压jmeter压缩包“unzip apache-jmeter-3.0_json.zip”
第三步:修改主压力机上的配置文件,进入目录apache-jmeter-3.0/bin,修改配置文件jmeter.properties
可以添加多个压力机,正确写入“ip:端口”
第四步:上传调试好的测试脚本/home/testing/login.jmx,参数文件也需要上传,脚本中的参数文件路径要写存在在linux下的绝对路径
第六步:执行脚本并生成报告
./jmeter.sh -n -t/home/dev/testing/login.jmx -l /home/dev/result/loginresult.jtl
第七步:脚本执行结束后,下载到本地,导入jmeter中聚合报告中就可以打开了
11、http请求默认值,放在http下面,容易导致http只执行一次