1. 抓包确认接口数据
curl信息:
curl -H "Host: ng-apptest.transspay.net" -H "pp_req_sign: SZ4Zf5aMBn8VKgscJnTvG4ndEn9O8UVPZrphVyqfOePCN8eK%2Fy92ZWzM%2BDrSkyziOkbXkpy%2B0ozcLD5DlWMOb84s%2BgPNj1Vtzx0uaG4ilQzoku9I9oa0rEgMhe%2FPh8Rwt0p6%2Fi2W91ww3RBPPN0rJCFo7g%2B%2BOnuyQHpTYhx78NU%3D" -H "pp_timestamp: 1712129092601" -H "lastname: test" -H "birthday: 14/10/1996" -H "pp_token: cf693862-814b-48ee-a0a0-86be109c66dc" -H "pp_country_code: NG" -H "firstname: asd" -H "fullname: asd mod test" -H "nickname: way!@@#@$" -H "user-agent: PalmPay/2403291 CFNetwork/1492.0.1 Darwin/23.3.0" -H "countrycode: NG" -H "pp_client_ver: 5.5.0&2403291" -H "pp_req_sign_2: GR6UJwEhDaDW3T9jMABonFvYsw%2FjoQt7zEOTnMggRSix16CMDx%2F1EiJnRkauQWo7i7AXm%2FsEmgepqUKbYDpVZUDCarmhVclRrDH8hHHPUDuSsp4QqfxRUHBmVXUVPvM72xAFE00S42dKVIaH6%2Bm4a2BWBWRufyyn376gfegnRu4%3D" -H "phonenumber: 023409551234899" -H "email: " -H "middlename: mod" -H "accept-language: zh-CN,zh-Hans;q=0.9" -H "pp_client_ver_code: 2403291" -H "avatar: http://s3-ap-southeast-1.amazonaws.com/transsnet-android-upload-dev/A2E5AF8538D056AA0CA66261AF60D781" -H "pp_device_type: IOS" -H "accept: application/json, text/plain, */*" -H "content-type: application/json" -H "pp_device_id: A84076CC-2FC7-47C8-A1B6-0E2F5D693E52" --data-binary "{\"blackBox\":\"2IPV17120487035489ELuKeVP6\",\"billerId\":\"MTN\",\"billerName\":\"MTN\",\"icon\":\"https://s3-ap-southeast-1.amazonaws.com/transsnet-android-upload-dev/telecom/MTN3.png\",\"businessAmount\":10000,\"discountPackageId\":\"20240205030400000001\",\"sourceCategoryId\":\"11\",\"customerId\":\"023409551234911\",\"dataBundleItemName\":\"100MB-1 DAY-鈧�100.0\",\"paymentItemId\":\"s105113877047470\",\"paymentItemName\":\"100MB-1 DAY-鈧�100.0\",\"businessType\":5,\"categoryId\":\"6\",\"currency\":\"NGN\",\"fullName\":\"asd mod test\",\"familyAccountCheck\":false,\"verifyNetwork\":false,\"isBlackBox\":true,\"isClearMemberId\":true}" --compressed "https://ng-apptest.transspay.net/api/airtime/data/discountPackage/createBizOrder"
2. 调试jmeter脚本
2.1. 处理依赖jar包
需要引入的jar包放置进入jmeter的安装目录位置
路径:${jmeter安装目录}/lib 或者 ${jmeter安装目录}/lib\ext
2.2. 参数化变量数据
2.2.1. 时间戳参数化
2.2.2. 加密验签参数化
import jiami.RSAUtils;
import jiami.PalmPayUtil;
String PP_DEVICE_ID=vars.get("device_id");
String PP_DEVICE_TYPE=vars.get("device_type");
String PP_CLIENT_VER=vars.get("client_ver");
String times=vars.get("timestamp");
String token=vars.get("token");
String sign2="";
//vars.put("timestamp",times);
String sign=PP_DEVICE_ID+PP_DEVICE_TYPE+PP_CLIENT_VER+times+token;
//log.info(sign);
sign=RSAUtils.sign(sign.getBytes());
//System.out.println(sign);
vars.put("sign",sign);
if(sampler.getMethod().equals("POST") && sampler.getArguments().size()>0){
def bodyData = sampler.getArguments().getArgument(0).getValue()
// log.info(bodyData)
sign2=RSAUtils.sign(bodyData.getBytes());
}else{
sign2=sign;
}
vars.put("sign2",sign2);
2.2.3. token参数化
2.2.4. 大部分数据支持直接调用swagger域名测试
使用swagger接口域名,不走网关,直接接口请求到业务服务器
swagger链接:
说明:这个接口历史原因,服务接口直接处理的有点复杂,所以最后还是走的网关接口,手动处理验签的header逻辑。
如果简单接口,直接走swagger,直接处理 device_id 和 token 数据就好了,不用处理验签。
2.2.5. 本地调试报告
2.2.5.1. 聚合报告:
2.2.5.2. 结果树报告
超出限流的合理提示:
{"respCode":"18","respMsg":"High traffic on data flash sales now, try again later"}
限流内,正确处理的相应:
3. 上传脚本上TPS
4. 配置TPS测试策略
4.1. RPS模式
4.2. 并发模式(常用)
4.3. 支持调试脚本
查看调试日志,根据实际错误手动调整
重点关注,采样器(Sample)的相应日志:
5. 查看压测报告
5.1. 报告在线链接
6. 分析报告
6.1. 结论:
平均11 TPS 的压力,500并发,
我们配置限制的流量为:1,压测5分钟的实际平均成功率为9.28%(接近10并发成功处理1的预期),
符合我们限流的目的,
且失败的均有返回产品预定的提示:High traffic on data flash sales now, try again later - - PASS