背景:小程序前端研发接后台研发写的接口,后台研发实现后面的逻辑。每次后台一改动就在手机上面去点点相对应的流程,那有没有什么可以减少这些重复的操作呢?为此做了一个简化版的小程序接口流程测试。顺便还可以做下压力测试。
示例是一个商城小程序部分步骤:
-
添加线程:
image.png
image.png -
添加常用的变量
image.png
image.png -
添加http默认值
image.png
image.png -
手机用fiddler或者是charles抓包,将所有的接口都汇集在jmeter中
image.png
image.png
image.png - 将此接口的返回参数提取出来作为后续接口请求参数使用
image.png
格式:$.result[0].goodsSpec[${i}].price
取此接口返回的result列表的第一个,goodsSpec列表的取我自定义变量设置的值的第几个+1(从0开始,如果设置的i是1,那就是取列表的第2个值)下面的price字段的值
image.png
image.png -
下个接口使用上个接口返回的参数示例:
image.png -
beanshell 前置处理器,对数据(格式和值)进行处理
image.png
根据自己的需要设置,一般取默认值就行:
image.png
// 导入相关的包
import java.text.*;
import java.util.Date;
import java.text.DecimalFormat;
import java.util.HashMap;
// 生成按年月日时分秒和随机数的订单号
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyMMddHHmmss");
String dateString = formatter.format(currentTime);
String orderNo = "on" +dateString + (int)(1+Math.random()*(99999-1+1));
vars.put("orderNo",orderNo);
// 购买数量 取自定义变量参数
quantity = Integer.parseInt(vars.get("quantity"));
// 销售价 取前面接口返回的变量参数
price = Double.parseDouble(vars.get("price"));
// 会员价
memberPrice = Double.parseDouble(vars.get("memberPrice"));
// 优惠金额
totalFavorPrice = Double.parseDouble(vars.get("totalFavorPrice"));
// 统一配送费
goodsPackFee = Double.parseDouble(vars.get("goodsPackFee"));
// 总计金额
totalAmount = memberPrice * quantity + goodsPackFee;
// 支付金额
payAmount = totalAmount - totalFavorPrice
// 折扣金额
discountAmount = (price - memberPrice) * quantity;
// 下单商品属性 按需要修改参数的格式
name = vars.get("name");
specInfo = name.replace('"','\\"');
log.info("______________________________");
//log.info(memberPrice.toString());
//将处理完的参数放到变量里面去供后续参数化使用
vars.put("totalAmount",totalAmount.toString());
vars.put("discountAmount",discountAmount.toString());
vars.put("specInfo",specInfo.toString());
vars.put("payAmount",payAmount.toString());
-
有的接口请求格式是json格式,需要进行设置:
image.png
image.png
-
设置查看结果树(看具体请求返回数据),汇总报告(看相关结果)
image.png
image.png
image.png
好了,后续后台一改动就可以运行一下所有接口,保证基本流程是对的了。
如果需要简单的压测,设置线程数和时间就好了,看结果。
网友评论