jmeter之那些年踩过的坑(持续更新)

一、使用jmeter发送post请求有两种方式,并不是只能通过消息体传递

1.post请求数据为map格式

Map 键、值的形式存储 输出时用“=”链接
{key1=value, key2=value}
当post请求数据为map格式,即参数名、参数值为key-value键值对,请求的参数添加在Parameters参数表中即可
jmeter之那些年踩过的坑(持续更新)_第1张图片
2.post请求数据为json格式

JSON的规则很简单:对象是一个无序的“K–V’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。
规则如下:
1、映射用冒号(":")表示。名称:值
2、并列的数据之间用逗号(",")分隔。名称1:值1,名称2:值2
3、映射的集合(对象)用大括号("{}“”)表示。此格式对应Java中的JsonObject。标准的json可以对应一个JsonObject
下面值1,值2可以是“4”中的格式JsonArray {name:JsonArray,name:JsonArray,name:JsonArray}
{
名称1:值1,
名称2:值2
}
4、并列数据的集合(数组)用方括号(“[]”)表示。此格式对应Java中的JsonArray
[
{名称1:值,名称2:值2},
{名称1:值,名称2:值2}
]
注意:json是一种格式,传输的过程中是String类型的,需要使用对应的方法把其转化成JsonObject对象或JsonArray对象。
使用jmeter时,将json格式的请求数据加入到http请求BodyData中
jmeter之那些年踩过的坑(持续更新)_第2张图片
总结:map格式就类似于键值对,这个很好判断,这一类请求数据需要放在parameters中;json格式是一个完整的对象,最简单的判断方法就是看form data 中是否有{},如果有,并且请求头中有"Content-Type: application/json; charset=UTF-8",那么这就是json格式,请求要放在body data中。

经询问,前端没有map对象,只有json,map属于后台的用语,以上两种都属于json。第一种是因为使用了form
data,浏览器支持的form表单提交。

数据类型是:multipart/form-data,以键值对的方式发送数据,会自动构建数据结构,无需手工拼接成json对象。

因此,看到是form 表单提交的json数据,可以将请求写在parameters中,否则用json格式写在body data中(暂且这么理解,后面如有新的体会,再附加)。

二、jmeter 之parameters里面的编码该不该勾?

Http请求中Url编码勾选与否,应用于两个场景:

1)一种是传递的参数中含有特殊字符,比如=,?,空格,&。例如,有个参数是aa=bb=cc,这到底是“aa” = “bb=cc”这样的表达,还是“aa=bb” = “cc”这样的表达,服务器会误解。勾选url编码后,表达式被编码成aa=bb%xxcc,其中一个=号转换掉,这样就不会误解了。

2)另一种就是中文。
对应到java中的方法是urlencoding。
在这里插入图片描述
起因:接口测试中的上传字段为汉字时需要进行什么形式的转码?

方法一:需要把编码复选框勾选,才能正常通过接口查询数据(参数化值如“${name}”也需要勾选“编码”复选框)
方法二:在配置文件jmeter.properties,修改sampleresult.default.encoding=UTF-8

此外,密码的value框,得看抓包或者接口文档中给出的密码值(一般都是经过加密后的),jmeter只能识别经过前端加密的密码,如果输入原始密码,会提示密码错误。

三、单用户并发1000次对某页面进行查询,察看结果树全部正常,但聚合报告中存在0.2%的异常

jmeter之那些年踩过的坑(持续更新)_第3张图片
测试机的资源并不是无限的,压测时需要对压测机的CPU等指标进行监控。

察看结果树体现的是发送到服务器的请求的结果,因此无法监测到本机的错误。

假设你打算切换到多任务模型,可以先做1分钟语文,再切换到数学作业,做1分钟,再切换到英语,以此类推,只要切换速度足够快,这种方式就和单核CPU执行多任务是一样的了,以幼儿园小朋友的眼光来看,你就正在同时写5科作业。
但是,切换作业是有代价的,比如从语文切到数学,要先收拾桌子上的语文书本、钢笔(这叫保存现场),然后,打开数学课本、找出圆规直尺(这叫准备新环境),才能开始做数学作业。操作系统在切换进程或者线程时也是一样的,它需要先保存当前执行的现场环境(CPU寄存器状态、内存页等),然后,把新任务的执行环境准备好(恢复上次的寄存器状态,切换内存页等),才能开始执行。这个切换过程虽然很快,但是也需要耗费时间。如果有几千个任务同时进行,操作系统可能就主要忙着切换任务,根本没有多少时间去执行任务了,这种情况最常见的就是硬盘狂响,点窗口无反应,系统处于假死状态。
所以,多任务一旦多到一个限度,就会消耗掉系统所有的资源,结果效率急剧下降,所有任务都做不好。

未完待续。。。

你可能感兴趣的:(软件测试基础知识,Jmeter,项目经验积累)