自动化得方式解决性能测试中得问题之一(超大入参进行大量参数化处理)

场景1: 当存在数组变量需要替换到入参中, 数组个数过大如几十上百个时, 可以通过程序替换好后贴进去:

1, 将要处理参数化的请求body贴入文件ss中放到src/main/resources目录下,

2, 使用正则匹配到到替换的值, 如下代码时要替换body中PGGradePlan2ProviderRecordGUID字段的value值, 那么就把起value通过正则表达式写好,括号括起来,分组;

3, 通过正则匹配获取所有符合条件的value的值, 存入到list中

4, 再用list中的值,逐一查询替换body中相同的所有值为目标变量名

String str = "";
try {
    str = new String(Files.readAllBytes(Paths.get("src/main/resources/ss")));
} catch (Exception e) {
    e.printStackTrace();
}
String s = "PGGradePlan2ProviderRecordGUID\\\\\",\\\\\"changed\\\\\":true,\\\\\"value\\\\\":\\\\\"([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\\\\\"";
Pattern pattern = Pattern.compile(s);
Matcher matcher = pattern.matcher(str);
List<String> list = new ArrayList<>();
while (matcher.find()) {
    String value = matcher.group(1);
    list.add(value);
}
System.out.println(list);
System.out.println(list.size());
for (int i = 1; i <= list.size(); i++) {
    str = str.replace(list.get(i-1), "{PGGradePlan2ProviderRecordGUIDs_" + i + "}");
}
//System.out.println(str);
try {
    Files.write(Paths.get("src/main/resources/ss2.txt"), str.getBytes());
} catch (IOException e) {
    throw new RuntimeException(e);
}

场景2:参数拼接, 每次要取10行数据, 将10行数据中的某一字段拼接到入参中

//1, 放在init中
char * aa; //用于临时存储格式化1好的guid
char * straa; //用于存储拼接好的guid字符串1
char * ProviderGUIDs; //存储最终的guid字符串1,给lr

//2, 放在对应的action中
int i;
if ((aa = (char *)calloc(2048, sizeof(char))) == NULL) { 
        lr_output_message ("Insufficient memory available"); 
        return -1; 
    }     
    
    if ((straa = (char *)calloc(2048, sizeof(char))) == NULL) { 
        lr_output_message ("Insufficient memory available"); 
        return -1; 
    }     
    if ((providerRecordGuids = (char *)calloc(2048, sizeof(char))) == NULL) { 
        lr_output_message ("Insufficient memory available"); 
        return -1; 
    } 
    
    //不需要循环拼接的赋值一次
    lr_save_string(lr_eval_string("{BUGUID}"),"buguid1");

    //循环拼接供应商GUID
    for (i=1;i<=9;i++) {
        //取值将{ProviderGUID}取出,赋值给ProviderGUID1
        lr_save_string(lr_eval_string("{ProviderGUID}"),"ProviderGUID1");
        sprintf(aa,"\"%s\",",lr_eval_string("{ProviderGUID1}"));
        //拼接字符串
        strcat(straa,aa);        
    }

       //结尾没有,号;所以结尾的要单独拼接格式;
        lr_save_string(lr_eval_string("{ProviderGUID}"),"ProviderGUID1");
        sprintf(aa,"\"%s\"",lr_eval_string("{ProviderGUID1}"));
        strcat(straa,aa);

    
    //将拼接好的字符串变量,赋值给lr变量ProviderGUIDs6
    lr_save_string(straa,"ProviderGUIDs");
    
    //变量使用{ProviderGUIDs}

(错误1)再设置:

(错误2)并发执行一直有问题, 每次第一个迭代都是好的, 后面的迭代拼接的数据guid都是重复的10个guid, 后来把, 设置改成这样就好了:理论上这么改没什么意义,但就是好了

(正确)还是有问题, 3个迭代, 后面的两个迭代重复第一个迭代的数据, 因为分区数量设置不对, 分区数量应该是: 一次使用用例使用数*迭代数: 一次选10个, 有3个迭代所以填30.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值