jmeter使用BeanShell断言

1. 首先存储一个接口的响应结果,如在http请求的BeanShell PostProcessor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.UnsupportedEncodingException;
 
 
System.out.println(prev.getResponseCode());
String str = prev.getResponseDataAsString();
/*
String result = ${__urldecode(str)};
System.out.println("------------"+result);
*/
String result = "";
try {
            result = java.net.URLDecoder.decode(str, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
System.out.println("--------"+result);
 
vars.put("result",result);
log.info(result);

 或者是jdbc request中BeanShell PostProcessor:

1
2
columnValue = vars.getObject("testresultvariable").get(0).get("app_id");
vars.put("value",columnValue);

 

变量存储好后,再需要断言的接口后面添加BeanShell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:

1
2
3
4
5
6
7
8
String result = vars.get("result");
 
if(!result.contains("\"result\":2")) {
    Failure = true
    FailureMessage = "分润查询失败";
}else{
    FailureMessage = "分润查询成功";
    }

  

断言结果是:

 

使用第三方jar包,结合fastjar的JSON解析如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.*;
import com.jmeter.*;
 
 
listexc = new ArrayList();
listexc.add(351);
listexc.add(301);
listexc.add(302);
listexc.add(304);
listexc.add(305);
listexc.add(306);
list = new ArrayList();
flag = "false";
 
 if ((prev.getResponseCode() != null) && (prev.getResponseCode().equals("200") == true)) {
        String json = prev.getResponseDataAsString();
        JSONObject  jo = JSON.parseObject(json);
        if(jo.containsKey("events")) {
            JSONArray  ja = jo.getJSONArray("events");
            if(ja.size()>0) {
                flag = "true";
                for(int i = 0;i<ja.size();i++) {
                    System.out.println(ja.get(i));
                    JSONObject joe = ja.getJSONObject(i);
                     System.out.println(joe.get("eventId"));
                     list.add(joe.get("eventId"));
                }
                System.out.println(list.size());
                 System.out.println(new EventCompare().compare(listexc,list)); 
                 if(!new EventCompare().compare(listexc,list)){
                    Failure = true;
                    FailureMessage = "事件校验失败,预期结果和实际结果不一致,预期事件:"+listexc+" ,实际事件:"+list;
                 }
            }else{
                flag = "false";
                Failure = true;
                FailureMessage = "事件校验失败,轮询接口返回没有eventId";
            }
            vars.put("result",flag);
            System.out.println(list.size());
            /*
            System.out.println(listexc.containsAll(list));
            if(listexc.containsAll(list)) {
                Failure = true;
                FailureMessage = "事件校验失败";
                }
    */
        }else {
            Failure = true;
            FailureMessage = "事件校验失败,轮询接口返回没有events";
            }
 }else {
    Failure = true;
    FailureMessage = "事件校验失败,轮询接口返回空";
    }

  

posted on   乔叶叶  阅读(6749)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2015-06-08 selenium处理滚动条
2015-06-08 selenium处理div生成弹框

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示