性能测试之二:行动篇之设计发压脚本

开始写脚本!
常用插件:
jp@gc - Ultimate Thread Group:梯度加压

jp@gc - Stepping Thread Group (deprecated)步长加压,一般用于高并发找到极值并发数。

bzm - Concurrency Thread Group:启动n个线程在t时间段达到最大线程,其中经过m次阶梯增长,并在最大线程持续tt时间

bzm - Arrivals Thread Group:QPS概念 在t时间段达到最大QPS设置值,其中经过m次阶梯增长,并在最大QPS处持续tt时间

bzm - Free-Form Arrivals Thread Group:QPS概念,较随意

HTTP Request Defaults:可以放置host、post全局变量

HTTP Header Manager、HTTP Cookie Manager:header、cookie处理

JSR223 PreProcessor:前置处理器,借助groovy语言,设置脚本。

import java.util.Random;

String pre = "171";

String timeStamp = String.valueOf(System.currentTimeMillis());

Random random = new Random();

int rand1 = random.nextInt(10);
int rand2 = random.nextInt(10);

String ends = String.valueOf(rand1) + timeStamp.substring(7)+ String.valueOf(rand2);
        
vars.put("pthone_no",pre + ends);

问题:对请求数据加密解密算法要不要放在脚本里?

建议不要,会影响性能。

测试方式:
不考虑加解密实时性的情况下,跟开发沟通去掉加解密算法先,或者;或者事先将数据做好加密处理,并参数化处理。
考虑加解密实时性的情况,可以考虑加解密算法异步校验的方式,单独的机器进行异步校验;另一种方式可以与开发协商绕过校验步骤,采用test标识、万能token、通用token,计算加解密结果但服务不做校验,cpu性能尽量不受加解密影响

MD5加密算法演示:

导入相关的jar包Apache Commons Codec放在lib/ext目录下

import org.apache.commons.codec.digest.DigestUtils;

String username = '${user_prefix}${user_id}';
String password = '${paaword}';

String str = "username="+username+"&password="+password;

String sign = DigestUtils.md5Hex(str);;

vars.put("sign",sign);

实际工作中,各个公司的加密方式各有不同,将相应的加密jar包导入,放在lib/ext目录下,使用groovy脚本调用其加解密函数。

JSR223 PostProcessor:后置处理器
在这里插入图片描述

def out = new File("D:/project/jmeterproject/token").append('${token}'+'\n')

注意:使用该后置处理器谨慎勾选图上圈出来选项。

Debug Sampler:帮助排错,注意发压时去掉

View Results Tree:查看结果树,注意发压时去掉

Aggregate Report:聚合报告,注意发压时去掉。

  • 缺点:数据实时展示,不能保存回看;只能本机测试人员查看,项目组其他人数据共享不方便
  • 解决方案:采用influxDB+Grafana,将压测数据保存入库,并且以监控平台的形式展现出来,方便数据保存与共享。

JSON Extractor:正则匹配取值

JSON Assertion:json断言,一些复杂的校验会影响发压机的性能,比如:正则,可以尽量避免。

Counter:递增产生数据,适用于有规律的命令字段。

设计场景流程比例:Loop Controller【循环控制器】、If Controller【if控制器】

${__groovy(${__counter(true)}%2 == 0 )}

设置事务:Transaction Controller

插件:jp@gc - AutoStop Listener 设置error错误率、平均响应时间、平均延迟达到某值,自动停止执行,去分析原因

get请求:获取数据
post请求:提交数据,落库。
脚本运行排错:1.jmeter本身自带日志;2.查看服务器Spring.log
脚本运行产生的数据验证:mysql、Oracle,避免因为编码问题产生大量脏数据、异常数据。

关于请求IP地址不可重复的问题
在这里插入图片描述

发布了16 篇原创文章 · 获赞 0 · 访问量 583

猜你喜欢

转载自blog.csdn.net/LittleGirl_orBoy/article/details/104640434