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

一、GET方法测试

  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 ;

二、POST方法测试

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

脚本可以自行编码,也可以:

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

    Action()

    {

    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 表单;
    3、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:被转换的源字符串。

      fromEncoding:转换前的字符编码。

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

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

      常量和值得关系:

      Constant

      Value

      LR_ENC_SYSTEM_LOCALE

      NULL

      LR_ENC_UTF8

      "utf-8"

      LR_ENC_UNICODE

      "ucs-2"

三、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:替换整个页面。

LoadRunner HTTP+Json 接口性能测试的更多相关文章

  1. Loadrunner模拟JSON接口请求进行测试

    Loadrunner模拟JSON接口请求进行测试     一.loadrunner脚本创建 1.Insert - New step -选择Custom Request -  web_custom_re ...

  2. Loadrunner测试json接口

    1. loadrunner + json说明 使用lr测试json接口,向服务端发送json格式请求,接收处理返回响应数据. 主要用到函数: 1)web_custon_request 2)web_re ...

  3. Loadrunner Http Json接口压力测试

    前天接到了一个测试任务,要求测试一下ES(elsticsearch)在不同并发下的查询效率.如图: 业务场景是在客户端根据具体车牌查询相关车辆信息,结果返回前10条记录. 从图中可以看到,接口的请求参 ...

  4. LoadRunner模拟REST接口的json请求

    LoadRunner模拟REST接口的json请求 现在很多手机应用的性能测试,REST接口调用通过json格式,在用loadrunner模拟这些json请求时,需要开发提供 1.供接口地址 2.提交 ...

  5. Loadrunner Webservice接口性能测试脚本编写优化总结

    本文主要介绍使用Loadrunner Webservice接口性能测试脚本编写及优化总结. 1.Webservice协议脚本编写流程 下面介绍使用Loadrunner 11调用Webservice接口 ...

  6. 使用Loadrunner进行http接口压力测试

    业务描述: 在业务系统里进行查询操作,查询的结果是通过请求http接口,从系统中处理并将结果以json字符串返回. 本文就讲述使用Loadrunner对此类接口进行压力测试并记录相关的性能指标数据: ...

  7. LoadRunner调用Java程序—性能测试-转载

    LoadRunner调用Java程序—性能测试   为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunn ...

  8. 如何高效的进行WebService接口性能测试

    版权声明:本文为原创文章,转载请先联系并标明出处 关于接口测试的理解,主要有两类,一类是模块与模块间的调用,此类接口测试应该归属于单元测试的范畴,主要测试模块与模块之间联动调用与返回.此类测试大多关注 ...

  9. JMeter之Http协议接口性能测试

    一.不同角色眼中的接口 1.1,开发人员眼中的接口    1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...

随机推荐

  1. vue组件之间的通信

    1.父组件给子组件传递数据 <body> <div id="app"> 父组件:{{total}} <br> <son-component ...

  2. salesforce apex class call exteral webservice

    在项目中需要调用外面的Webservice,  从Salesforce往外写入其他系统.目前一般有两种方法. 1. 根据对方提供的wsdl文件生成apex class,直接实例化后调用其方法(测试成功 ...

  3. sprigboot recontroller 是responsebody与controller结合 这样 就使每个方法默认返回json

    sprigboot   recontroller 是responsebody与controller结合 这样 就使每个方法默认返回json

  4. Android技术文章收集

    Android高工必备技能! 我的 Android 开发实战经验总结 Android开发在路上:少去踩坑,多走捷径 //微信 微信Android客户端架构演进之路 微信Android版智能心跳方案 / ...

  5. java获取文件行数

    public long getLineNumber(File file) { if (file.exists()) { try { FileReader fileReader = new FileRe ...

  6. AVIER Racing Drone App Privacy Policy

    Personal Data collected for the following purposes and using the following services: Device permissi ...

  7. Day058--django--app

     1. 完整的登录示例    form表单使用的注意事项:   1. action="" method="post"     action 提交的地址  met ...

  8. 结构体addrinfo, sockaddr, sockaddr_in的区别

    struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 一.sockaddr sockaddr在头文件#include <sys/socket. ...

  9. consul实现分布式锁

    分布式一致性问题: 分布式的CAP理论告诉我们"任何一个分布式系统都无法同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tole ...

  10. CMakeList.txt(2):CMakeLists.txt编写规则

    #project namePROJECT(test_math)    指定生成的工程名为test_math #head file path     INCLUDE_DIRECTORIES(includ ...