LoadRunner HTTP+Json 接口性能测试

接口的请求参数和返回结果均是JSON字符串,请求能够用POST或者GET方法。先说GET方法:web

1、GET方法测试json

  1. Insert - New step -选择Custom Request - web_url
  2. 填写参数;
  3. 生成脚本,进行脚本相应修改;
    Action()
    {
        //添加集合点
        lr_rendezvous("jihedian");
        lr_start_transaction("getTop10");
        //插入检查点,检查返回值是否包含testName
        web_reg_find(
           "Search=Body",
           "Text=testName", 
            LAST ); 
       //发送get请求
        web_url("www.xxx.com",     
            "URL=http://192.168.3.33:9200/_search?{\"query\":{\"bool\":{\"must\":[{\"term\":{\"plateNumNond\":\"<NewParam>\"}}]}", 
            "TargetFrame=",     
            "Resource=0",     
            "RecContentType=application/json",    
            "Snapshot=t1.inf",     
            "Mode=HTML",     
            LAST ); 
        lr_end_transaction("getTop10", LR_AUTO);
       //打印本次参数
        lr_output_message( "the platenum is #%s", lr_eval_string( "{NewParam}" ) ); 
        return 0;
    }
    说明:查看服务器返回的结果需在Vuser-Runtime-settings的log选项下,勾选Enable-logging、Extended log、Data returned by server ;


2、POST方法测试数组

    post方法有两种:web_submit_date和web_custom_request函数,web_submit_date不支持json串:服务器

   脚本能够自行编码,也能够:app

  1. Insert - New step -选择Custom Request - web_custom_request
  2. 填入相应参数
  3. 生成脚本,并修改以下(参数中的引号"前须要加斜杠\转译)

    Action()函数

    {post

    web_submit_data("login",
    "Action=http://xxx/login?",
    "Method=POST",
    "TargetFrame=",
    "RecContentType=application/json",
    "Snapshot=t5.inf",
    "Mode=HTTP",
    ITEMDATA,
    "Name=params","Value={\"param\":{\"userAccount\":\"{UserName}\",\"passWord\":\"e10adc3\",\"device\":\"IOS\"},\"version\":\"v1.0\",\"loginLog\":\"{testTimeParam}\"}",ENDITEM,
    LAST );
    或者:测试

    lr_start_transaction("querybypost");
        //插入检查点,检查返回值是否包含t_query_data
        web_reg_find(
           "Text=max_score", 
            LAST ); 
        web_custom_request("querybypost",                           //VuGen中树形视图中显示的名称
            "Url=http://192.168.3.33:9200/_search",   //请求url
            "Method=POST",
            "Resource=0",                               
            "Mode=HTTP", //请求方式
            "Referer=",        
            "EncType=application/json",                   //指定响应头的Content-Type,这里是JSON
            "RecContentType=application/json;charset=UTF-8",            //指定请求头的Content-Type,这里是JSON
            "Body={\"query\":{\"bool\":{\"must\":[{\"term\":{\"plateNumNond\":\"<PlateNumNond>\"}}],\"must_not\":[],\"should\":[]}},\"from\":0}",    //body的内容
             LAST);
        lr_end_transaction("querybypost", LR_AUTO);
        lr_output_message( "PlateNumNond on iteration #%s", lr_eval_string( "<PlateNumNond>" ) );
        //响应中文乱码转换
    lr_convert_string_encoding(lr_eval_string("{
    PlateNumNond
    }"), “utf-8”,LR_ENC_SYSTEM_LOCALE,"BM");
    lr_error_message(lr_eval_string("{BM}"));
    }
    说明:在LR中参数化标志是{},接口参数body里面也是{},因此在body里面参数化的时候用<>代替,
    设置方法:Tool - General Options - Parameterization 中将Parameter Braces 改成<>便可
    post请求参数有三种格式:1.application/x-www-form-urlencoded 键值对;2.multipart/form-data 表单;
    三、application/json Json串,根据本身的须要修改就EncType值能够;
    键值对和表单写法一致:
    1.  ITEMDATA,  
    2.         "Name=Name1", "Value=Value1", ENDITEM,  
    3.         "Name=Name2", "Value=Value2", ENDITEM,  
    4.         LAST);  
      再来认识下lr_convert_string_encoding
      //响应中文乱码解决
      int lr_convert_string_encoding( const char *sourceString, const char *fromEncoding,const char *toEncoding, const char *paramName);

      参数解释:编码

      sourceString:被转换的源字符串。url

      fromEncoding:转换前的字符编码。

      toEncoding:要转换成为的字符编码。

      paramName:转换后的目标字符串。

      常量和值得关系:

      Constant

      Value

      LR_ENC_SYSTEM_LOCALE

      NULL

      LR_ENC_UTF8

      "utf-8"

      LR_ENC_UNICODE

      "ucs-2"

3、web_custom_request和web_submit_data区别  

  • web_custom_request方法能够发送POST和GET类型的请求;
  • web_submit_data只能发送POST类型的请求;
  • 全部web_submit_data方法发送的请求均可以使用web_custom_request来实现
  • web_custom_request能够实现web_submit_data没法实现的请求,好比“查询全部邮件并删除”这个案例中,查询时咱们使用关联把全部邮件对应的标识抓取成一个数组,若是使用web_submit_data来完成这个删除的请求,须要不少个web_submit_data请求才能完成,但使用web_custom_request就能够经过一个请求完成,方法是本身写代码拼一个eb_custom_request 
  • 方法POST请求的Body值。
    这两种实现请求的方法还有一个须要注意的地方就是web_custom_request中body中的属性值若是包含一些特殊字符,必须经过URL编码,不然Web服务器会返回500错误,一个典型的例子是若是Body中包含ViewState,ViewState中经常有“=”之类的特殊字符,此时必须经过URL编码,LoadRuner中提供了一个这样的编码转换函数:
      web_convert_param(“vs1″,
      “SourceEncoding=HTML”,“TargetEncoding=URL”, LAST);  
      3.web_custom_request函数详解
       A.语法:
      intweb_custom_request( const char
      *RequestName, ,
      [EXTRARES, ,] LAST );
       B.返回值:返回LR_PASS(0)表明成功,LR_FAIL(1)表明失败。
       C.参数:
      (1)RequestName:步骤的名称,VuGen中树形视图中显示的名称。
      (2)List of Attribute:属性列表,支持的属性有如下几种:
      a.URL:页面地址。
      b.Method:页面的提交方式,POST或GET。
      c.EncType:编码类型。
      d.TargetFrame:当前连接或资源所在Frame的名称。
      除了Frame的名字,还能够指定下面的参数:
      _BLANK:打开一个空窗口。
      _PARENT:把最新更改过的的Frame替换为它的上级。
      _SELF:替换最新更改过的的Frame。
      _TOP:替换整个页面。
相关文章
相关标签/搜索