接口的请求参数和返回结果均是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. hdu-4635(tarjan缩点)

    题意:先给你一个n个点,m条边的有向图,问你最多能够增加多少条边,使得这个图不是一个强连通图 解题思路:考虑最多要添加的边数,所以如果能把初始图划分成两个部分,每个部分都是完全图,这两个部分分别用单向 ...

  2. (简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程

    就在我们使用Pc接通安卓手机的时候,如果手机没有开启usb开发者调试模式,Pc则无办法成功检测到我们的手机,在一些情况下,我们使用的一些功能较强的app好比之前我们使用的一个app引号精灵,老版本就需 ...

  3. Oracle 12c CDB PDB 安装/配置/管理

    Oracle安装参考:https://www.cnblogs.com/zhichaoma/p/9288739.html 对于CDB,启动和关闭与之前传统的方式一样,具体语法如下:     STARTU ...

  4. OpenLayers学习笔记(十一)— 飞机速度矢量线预测

    在机场使用的空管系统中,飞机的速度矢量线差不多是这样的: 模拟飞机飞行时的速度矢量线,这里就大概做个类似效果: 什么叫速度矢量线呢,个人理解就是根据飞机当前速度和航向预测它在未来一段时间内的飞机轨迹, ...

  5. java线程池与五种常用线程池策略使用与解析

    背景:面试中会要求对5中线程池作分析.所以要熟知线程池的运行细节,如CachedThreadPool会引发oom吗? java线程池与五种常用线程池策略使用与解析 可选择的阻塞队列BlockingQu ...

  6. 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0

    [简介] Lighten PDF Converter OCR 是一款Mac上强大的PDF格式转换工具,可以将PDF文档快速批量的转换为Office (Word, Excel, PowerPoint), ...

  7. macbook配置xdebug+vscode

    1.从xdebug官网下载xdebug 地址:https://xdebug.org/index.php,如果你不知道你要下载哪个版本的话可以下载它建议的版本.使用方法是在 https://xdebug ...

  8. [Android] Android 支持下拉刷新、上拉加载更多 的 XRecyclerview

    XRecyclerView一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView.使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊 ...

  9. count

    select deptno as 部门,count(*) as 人数from emp group by deptno;  --统计各个部门的人数

  10. input下拉带输入框

    html5 自带的datalist实现 html代码: <input list="students"> <datalist id="students&q ...