原创

常用的jmeter脚本以及思路分享

一、随机取数据内的数组

有些请求参数在参数化时,仅仅要求取其中数组内一条数据,有些类似与数据库中设计的enum枚举类型。比如付款状态有:已付款和付款中

String[] sale_status = new String[] {"DONE", "PAID"};
int index_s=(int)(Math.random()*sale_status.length);
String saleStatus = sale_status[index_s];
vars.put("saleStatus",saleStatus);

二、获取不重复的ID

有些字段在参数化时要求不能重复,特别在高并发下时怎么办呢,这里列表一些jmeter自带的函数

${__time(MMddHHsss,)}${__Random(111111111,999999999,)}   -------生成一个ID数字串

${__time(yyyy-MM-dd HH:mm:ss,)}       -----按照时间格式获取当前时间

String snapshotItemCode = String.valueOf("${__V(item_code_${index})}");     -----JDBC请求获取的数据,通过循环控制器和计数器(index)

${__groovy(${total}==0)}    -----如果(if)控制器,输入条件时。

三、接口返回结果Json解析

很多情况下,我们需要做数据的提取或者结果的断言,那么我们应该怎么办呢,其中一种办法可以通过Json提取器来做。还可以通过beanshell来做。

import org.json.*;
String response_data = prev.getResponseDataAsString();
JSONObject jsonObject = new JSONObject(response_data);
JSONObject data_obj=jsonObject.getJSONObject("data");
JSONArray jsonArray = data_obj.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject  lineobject = jsonArray.getJSONObject(i);    
    String id = "a"+lineobject.get("id").toString();
    if("${tagid}".equals(id)){
        String coverage = lineobject.get("coverage").toString();    
        vars.put("sucesstagsql",String.valueOf("${tagsql}"));
        vars.put("covernum",coverage);
    }
}

四、数字如何进行计算

如果我们要针对商品的价格综合进行计算,那我们应该怎么写呢

import java.text.DecimalFormat;
import java.math.BigDecimal;
String totalAmount1 = vars.get("totalAmount");
String freight1 = vars.get("freight");
payAmount =  String.valueOf(Double.parseDouble(freight1)+Double.parseDouble(totalAmount1));
log.info("实际金额为"+payAmount);
vars.put("payAmount",payAmount);

String temp = String.valueOf(${balance});
log.info("temp======"+temp);
int adjustmentAfter = Integer.parseInt(temp)+999;
log.info("adjustmentAfter======"+adjustmentAfter);
vars.put("adjustmentAfter",String.valueOf(adjustmentAfter));

五、获取结果并保存到本地文件中

有时候我们拿到测试结果,需要输出到文件中,提供给开发人员,或者我们写入测试报告中作为测试结果。

import org.json.*;
import com.cmcc.*;
import java.util.*;

String file_name = "C:/test/"+"lists.txt";
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file,true);
String response = prev.getResponseDataAsString().toString();
JSONObject jsonObject = new JSONObject(response);
JSONObject mdata=jsonObject.getJSONObject("data");
JSONArray jsonarray = mdata.getJSONArray("list");
String list = jsonarray.toString();
log.info("list=========="+list);
int size = jsonarray.length();

if(size>0){
    for(int i=0;i<size;i++){
        JSONObject  line = jsonarray.getJSONObject(i);
        String balance = line.get("balance").toString();
        String skuCode = line.get("skuCode").toString();
        line.put("adjustmentNumber",999);
        String x = StringUtil.dotnum(balance);
        int afternum = Integer.parseInt(x) + 999;
        log.info("afternum="+afternum);
        line.put("adjustmentAfter",afternum);
        
        String lines =  line.toString();
        log.info("lines=========="+lines);
        out.write((lines+",").getBytes());
        out.write("\r\n".getBytes());   //换行
//        vars.putObject("lists",lists);     //写入到变量中 
    }
}
out.close();

六、Beanshell断言

这种断言的话,可以把异常日志给输出到HTML报告中,方便问题定位

String response = "";
String Str = "\"message\":\"SUCCESS\"";
response = prev.getResponseDataAsString();

if(response.contains(Str)==false){
Failure = true;
FailureMessage = response;
log.error("返回报文异常:"+response);
}

七、获取今天和明天

比如你要预约隔日的,也就是明天的,你要怎么办

import java.text.SimpleDateFormat;
import java.util.Date;
import com.cmcc.*;

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String datetime = df.format(new Date());
log.info("number==============="+${number});
String today = TimeCalc.todayTime(datetime,${number});
String tomorrow = TimeCalc.nextDay(datetime,1);
log.info("==============="+today);
log.info("==============="+tomorrow);

vars.put("today",today);
vars.put("tomorrow",tomorrow);



















正文到此结束
本文目录