• Jmeter BeanShell


    这篇文章用来记录在Jmeter中beanshell的学习以及学习beanshell过程中遇到的问题。

    一、Jmeter中的beanshell

    在Jmeter中,BeanShell有多种,其作用不同:

    BeanShell断言            //用于断言

    BeanShell前置处理器   //提前生成取样器中需使用的参数,存储在vars里。方便后续调用。

    BeanShell后置处理器   //提取返回参数,或用于后面的接口使用

    BeanShell监听器

    BeanShell定时器

    BeanShell取样器

    BeanShell断言
    import org.json.*;
    
    String response_data=prev.getResponseDataAsString();
    JSONObject responseBody = new JSONObject(response_data);
    
    String code = responseBody.get("code").toString(); 
    if(code.equals("200"))
    {	
    	Failure = false; 
    	FailureMessage = "断言通过";
    	}else{
    		Failure = true; 
    		FailureMessage = "断言不通过:返回的code不是200";
    		}
    
    
    BeanShell前置处理器
    public static String test()
    {
            //在后面可以使用${key}或vars.get("key")来获取值。下面的imgurl同理。
     	vars.put("key","${dir}/${__time(,)}.jpg");     
    	vars.put("imgurl","https://www.aliyuncs.com/"+vars.get("key"));
    
    	return "success";
    	}
    test();   //执行test方法
    
    
    BeanShell后置处理器
    import org.json.*;
    
    String response_data=prev.getResponseDataAsString();
    JSONObject responseBody = new JSONObject(response_data);
    
    String access_key_id = responseBody.get("data").get("access_key_id").toString(); 
    String policy = responseBody.get("data").get("policy").toString(); 
    String signature = responseBody.get("data").get("signature").toString(); 
    String dir = responseBody.get("data").get("dir").toString(); 
    String host = responseBody.get("data").get("host").toString(); 
    String callback = responseBody.get("data").get("callback").toString(); 
    vars.put("access_key_id",access_key_id);
    vars.put("policy",policy);
    vars.put("signature",signature);
    vars.put("dir",dir);
    vars.put("host",host);
    vars.put("callback",callback);
    

      

    二、注意事项

    注意1:BeanShell断言 和 BeanShell后置处理器 的区别

      BeanShell后置处理器不能用来断言取样器。即使代码可以像在BeanShell断言中那样写,但是不会发挥作用。举个例子,就算写了Failure = true,但是在查看结果树中也不会认为它是失败的。所以不要认为BeanShell都是一样的哦~

    注意2:一般情况下都需要取服务器返回的数据,需要用到json

          下载包地址:点击这里,下载好的json-20160810.jar包放入Jmeter安装目录/lib/ext,然后重启Jmeter即可~

    三、使用过程中问题集锦

    问题1:JSONObject not found in namespace

    流程:在beanshell下写代码如下:

    1 String response_data = prev.getResponseDataAsString();
    2 JSONObject data_obj = new JSONObject(response_data);
    3 
    4 String current_page = data_obj.get("data").get("current_page").toString();
    5 log.info("当前第几页:"+current_page)

    报错:Typed variable declaration : Class: JSONObject not found in namespace

    报错内容已经说得很明确了,在命名空间里没有找到JSONObject。而我却在使用,肯定报错。

    解决方法:点击下载jar包,放入jmeter安装目录/lib/ext即可。然后在beanshell中写入:import org.json.*; 引用即可

    问题2:Typed variable declaration

    流程:在beanshell下写代码如下:

    import org.json.*;
    
    String response_data=prev.getResponseDataAsString();
    JSONObject responseBody = new JSONObject(response_data);
    
    String code = responseBody.get("code"); 
    

    报错:Sourced file: inline evaluation of: ``import org.json.*; String response_data=prev.getResponseDataAsString(); JSONObj . . . '' : Typed variable declaration

    一开始我以为是json包里没有jsonobject的方法。经过逐行注释,发放报错的地方在于String code = responseBody.get("code"); 于是想到可能是类型不匹配;

    解决方法:修改获取code那句代码为 String code1 = responseBody.get("code").toString()

  • 相关阅读:
    Linux学习-网络管理
    Linux学习-文件权限
    Linux学习-用户管理常用命令
    python操作数据库(MySQL、redis、MD5加密函数)
    Jenkins待过的坑
    Robot framework+Jenkins
    jenkins + maven + SVN自动化集成部署
    接口测试学习笔记二
    接口测试学习笔记一
    【数据结构】为什么要使用一致性哈希算法?
  • 原文地址:https://www.cnblogs.com/youreyebows/p/11403948.html
Copyright © 2020-2023  润新知