性能测试工具--Jmeter
JMeter有严格作用域。
Jmeter中所有登录都需要在HTTP请求前加上HTTP cookie管理器。
全局变量,作用于全局。用${}进行调用。
1.参数化
1) 随机值:选项→函数助手对话框(Random、Random_String)
2) 固定值:HTTP请求→添加→配置元件→CSV Data Set Config(值的传递 ${})
Sharing mode:参数化取值策略
All threads 唯一+每次迭代
Current thread group 基于每个线程组下的唯一+迭代取值(不同线程组是顺序取值,一个线程组是唯一取值)
Current thread 顺序+每次迭代
如果多线程之间值是重复的,那么就是顺序,每个线程之间没有重复,就是唯一。
- jmeter手动停止,最后一些请求会出现失败。
一定是这样,因为一些请求是在发送状态,还没有收到请求的响应,按停了,就没有办法收到响应了。
2.关联:放在请求后
左右边界是中文的略过。
正则表达式的元符号:
.* 匹配前面的子表达式0次或多次,基本上如果左右边界取的没问题,那么用.*一定能匹配到。
.+ 匹配前面的子表达式1次或多次
.? 匹配前面的子表达式0次或者1次,取一次没有取到,就不取了。
3.断言(检查点)
线程组→添加→断言→响应断言
模式匹配规则,默认选择包括即可。
测试过程一定要加断言,检查请求是否成功。
断言结果:可以知道断言结果是成功还是失败
4.思考时间
添加→定时器
添加→定时器→高斯随机定时器
5.集合点,放在操作之前
添加→定时器→Synchronizing Timer
6.事务
线程组→添加→逻辑控制器→事务控制器
7.响应时间RT
线程组→添加→聚合报告
Jmeter只有单个请求的响应时间,加了事务控制器,把多个请求放在同一个事务控制器下,统计出多个事物的平均响应时间。
8.重定向
自动重定向:只记录最后跳转请求,不记录cookie和header;
跟随重定向:会记录跳转请求的cookie和header,记录整个过程,过程请求为sub-sampler
1)DB
主从库读写分离 主库(所有写操作在主库) 从库(所有读操作在主库) 主从数据同步(二进制日志文件进行同步)
主从库解决不了大数据问题,故目前的技术是拆库分表(主从结构):一个库拆成多个库,一张表拆成多张表,还是读写分离的模式,只是数据拆分到了不同的表里。
9.JAVA请求总是有一些不稳定现象。
1) 比如一个买入操作,在页面上通过F12看买入成功的时间,通过LR模拟买操作。。。两者响应时间不一样是什么原因,LR两秒多,页面不到一秒?单用户操作时有可能加入思考时间,或者加入其它请求时间并发时间是平均值时间。这样是不正常的,有可能LR把其它的请求时间也加进去了,但是不会超过一倍的。如果不包括思考时间和其它请求时间,应该是一样的。这里只的是单用户操作的时候。
2) Jmeter和LR哪个比较靠谱些。。。。。两种软件发请求。。。他俩最后得到的数据差别大不大
3) LoadRunner结果靠谱,正常来说lr的响应时间一定会比jmeter时间短些,因为LR是C写的,jmeter是用java写的,java有一个java虚拟机,Java虚拟机是java的一个核心,jvm在jmeter内存满了以后,jmeter会回收内存。会把不要的内存回收掉,这样才能让新的请求不断运行,因为新的请求会产生新的对象,新的对象要往内存里面放,如果内存满了会放不进去,在垃圾回收的时候,GC会占用jmeter的线程。
4) 小规模并发的时候jmeter时间会短一些,怀疑是有些请求没有成功,所以在以后测试时一定要加检查点,用来判断有没有成功。大规模并发的时候jmeter比LR响应时间会长