zoukankan      html  css  js  c++  java
  • jmeter使用基础

     

    1参数关联

     

     一、Jmeter关联的方式:

      Jmeter中关联可以在需要获取数据的请求上 右键-->后置处理器 选择需要的关联方式,如下图有很多种方法可以提取动态变化数据:  

      

    二、正则表达式提取器:

       1、比如需要提取如下响应文本中的 “<title>百度一下,你就知道</title>” 里面的 “百度一下,你就知道”:

      

      2、设置正则表达式提取器:

      

       说明:

      (1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。

      (2)正则表达式:

        ():括起来的部分就是要提取的。

        .:匹配任何字符串。
        +:一次或多次。
        ?:不要太贪婪,在找到第一个匹配项后停止。

      (3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值

      (4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0

      (5)缺省值:如果参数没有取得到值,那默认给一个值让它取。

      3、使用2中获取到的值:

      

    三、关于正则表达式的举例说明:

      1、提取单个字符串:
        假如想匹配Web页面的如下部分:name = "file" value = "readme.txt">并提取readme.txt。一个合适的正则表达式:name = "file" value = "(.+?)">。
          ():封装了待返回的匹配字符串。
          .:匹配任何单个字符串。
          +:一次或多次。
          ?:不要太贪婪,在找到第一个匹配项后停止。

      2、提取多个字符串:
        假如想匹配Web页面的如下部分:name = "file.name" value = "readme.txt">并提取file.name和readme.txt。一个合适的正则表达式:name = "(.+?)" value = "(.+?)"。这样就会创建2个组,分别用于$1$和$2$

      比如:

        引用名称:MYREF
        模板:$1$$2$

       如下变量的值将会被设定:
        MYREF:     file.namereadme.txt
        MYREF_g0:   name = "file.name"value = "readme.txt"
        MYREF_g1:  file.name
        MYREF_g2:  readme.txt

      在需要引用地方可以通过:${MYREF}, ${MYREF_g1进行使用。

    1:Json后置处理器提取结果作为下一个sampler的传入参数

    1.1:【线程组】->【简单控制器】->【HTTP sampler】->【Beanshell后置取样器】->【查看结果树】

    1.2:Beanshell后置取样器获取HTTP请求1所有响应数据returnData和其中单独的数据

    log.info(returnData)可以在Log中输出returnData的值

    1.4:添加第二个sampler

    1.5:查看结果树 HTTP请求1的响应数据作为HTTP请求2的POST Data传入服务器

    2:Beanshell对Json数据的增删改查

    2.1:Beanshell后置处理器对响应数据的查询

    2.1.1:eclipse的httpclient获取接口返回数据

    Maven导入的Jar包

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
    <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
    </dependency>
    package Test.Json;

    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.junit.Test;

    import com.alibaba.fastjson.JSONObject;

    public class GetJsonData {

    private String URL = "http://mobile.weather.com.cn/data/sk/101010100.html";

    // Get方法获取 http://mobile.weather.com.cn/data/sk/101010100.html
    @Test
    public void GetMethodData() {

    HttpGet httpGet = new HttpGet(URL);

    CloseableHttpClient httpClient = HttpClients.createDefault();

    try {
    CloseableHttpResponse response = httpClient.execute(httpGet);

    int code = response.getStatusLine().getStatusCode();// 获取返回状态码

    System.out.println(code);

    String returnData = EntityUtils.toString(response.getEntity());// 获取接口返回的text格式数据

    System.out.println(returnData);
    //======================================================================
    // 将text格式数据转换成JSON格式数据
    JSONObject jsonObject = JSONObject.parseObject(returnData);
    // sk_inf为Json的一个节点 节点下采薇key value键值对
    JSONObject data = jsonObject.getJSONObject("sk_info");
    System.out.println(data);
    //======================================================================
    //增
    data.put("phone", 110);
    System.out.println(data);
    //======================================================================
    //删除
    data.remove("cityName");
    //======================================================================
    //改
    data.put("phone", 120);
    //======================================================================
    //查询
    data.get("phone");

    } catch (Exception e) {
    System.out.println(e);
    }
    }
    }

    2.1.2:Beanshell对响应Json数据的删除

    Beanshell后置处理器脚本

    //导入Json jar包
    import com.alibaba.fastjson.JSONObject;

    String returnData = prev.getResponseDataAsString();
    log.info(returnData);
    //将获取的数据放入 方便下面的sampler取值
    JSONObject jsonObject = JSONObject.parseObject(returnData);
    JSONObject data = jsonObject.getJSONObject("sk_info");
    //eclipse里面不用toString Jmeter中需要
    log.info(data.toString());//这里输出有“北京”
    data.remove("cityName");
    log.info(data.toString());//这里输出没有"北京"

    vars.put("returnData",returnData);
    vars.put("data",data.toString());//data不是string形式变量 需要toString转换

    HTTP请求2

    查看结果树

    2.1.3:Beanshell对响应Json数据的增

    //导入Json jar包
    import com.alibaba.fastjson.JSONObject;


    String returnData = prev.getResponseDataAsString();
    log.info(returnData);
    //将获取的数据放入 方便下面的sampler取值
    JSONObject jsonObject = JSONObject.parseObject(returnData);
    JSONObject data = jsonObject.getJSONObject("sk_info");
    //eclipse里面不用toString Jmeter中需要
    log.info(data.toString());
    data.put("name","Anndy");
    log.info(data.toString());//这里输出增加"name":"Anndy"


    vars.put("returnData",returnData);
    vars.put("data",data.toString());//data不是string形式变量 需要toString转换

    2.1.4:Beanshell对响应Json数据的改

    //导入Json jar包
    import com.alibaba.fastjson.JSONObject;


    String returnData = prev.getResponseDataAsString();
    log.info(returnData);
    //将获取的数据放入 方便下面的sampler取值
    JSONObject jsonObject = JSONObject.parseObject(returnData);
    JSONObject data = jsonObject.getJSONObject("sk_info");
    //eclipse里面不用toString Jmeter中需要
    log.info(data.toString());//cityName:北京
    data.put("cityName","南京");
    log.info(data.toString());//这里输出增加"cityName":"南京"


    vars.put("returnData",returnData);
    vars.put("data",data.toString());//data不是string形式变量 需要toString转换

    2.1.5:Beanshell对响应Json数据的查

    //导入Json jar包
    import com.alibaba.fastjson.JSONObject;


    String returnData = prev.getResponseDataAsString();
    log.info(returnData);
    //将获取的数据放入 方便下面的sampler取值
    JSONObject jsonObject = JSONObject.parseObject(returnData);
    JSONObject data = jsonObject.getJSONObject("sk_info");
    //eclipse里面不用toString Jmeter中需要
    log.info(data.toString());
    String city = data.get("cityName");


    vars.put("returnData",returnData);
    vars.put("city",city);

    2.1.6:放入list集合

    //导入Json jar包
    import com.alibaba.fastjson.JSONObject;


    String returnData = prev.getResponseDataAsString();
    log.info(returnData);
    //将获取的数据放入 方便下面的sampler取值
    JSONObject jsonObject = JSONObject.parseObject(returnData);
    JSONObject data = jsonObject.getJSONObject("sk_info");
    //eclipse里面不用toString Jmeter中需要
    log.info(data.toString());
    //beanshell不能使用泛型
    List list = new ArrayList();
    list.add("AAA");
    list.add("BBB");
    list.add("CCC");
    data.put("nameList", list);
    //vars只能放入基础类型数据
    vars.put("data",data.toString());//data不是基础类型 所以需要转换 否则会报错

  • 相关阅读:
    mysql 模糊查询LIKE 在tp中使用
    json字符串与 js对象互相转换
    1431. Kids With the Greatest Number of Candies
    1481. Least Number of Unique Integers after K Removals
    560. Subarray Sum Equals K
    1476. Subrectangle Queries
    1475. Final Prices With a Special Discount in a Shop
    网速和流量有什么关系
    计算网速的计算公式是什么
    php file_put_contents 函数的使用
  • 原文地址:https://www.cnblogs.com/mensiler/p/14127939.html
Copyright © 2011-2022 走看看