zoukankan      html  css  js  c++  java
  • Loadrunner Http接口Get/Post方法性能测试脚本解析

    最近使用LoadRunner 11进行了一次完整的Http WEB接口性能测试,下面介绍下Http接口Get/Post方法性能测试脚本通用编写方法。

    1. Http接口性能测试基本流程

    首先定义了一个参数用以保存Http请求返回码,之后调用Get / Post方法,最后通过校验返回码参数来判断事务成功或失败。

    2. 常用函数解析

    完整的Action脚本见本文下方附录,简单解析如下(具体函数的详细解释可百度或查看LoadRunner帮助文件):

    2.1 web_reg_save_param

    这个函数注册一个请求,以在检索到的网页中查找并保存一个文本字符串。它只有在执行了下一个操作函数(如web_url)后才会执行。

    语法:

    int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);

    参数说明:

    1) ParamName:存放得到的动态内容的参数名称

    2) LB和RB:要抓取文本的左/右边界

    注意:

    1) web_reg_save_param必须在获取返回值的操作前面注册,在获取返回值的操作后面使用

    2) 保存参数最大不能超过256字节,如果超过256字节请使用int web_set_max_html_param_len (const char *length )函数扩大参数保存范围。

    如:web_set_max_html_param_len (1024); //扩大参数最大保存范围为1024字节

    3) LB和RB:如果不指定一个LB/RB值,它会使用数据开头/结尾的所有字符作为边界,且默认是区分大小写的,若加上"/ic",则大小写不敏感

    如:web_reg_save_param("IsRight","LB/ic=cache-control: private ","RB/ic=|",LAST);

    2.2 web_url

    发送Http GET请求函数,比较简单,一般只需修改url地址即可

    函数形式:web_url( const char *StepName, const char *url, , [EXTRARES, ,] LAST ); 

    示例如下:

    web_url("www.baidu.com", 
        "URL=http://www.baidu.com/", 
        "TargetFrame=", 
        "TargetBrowser=Mercury Technologies", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Snapshot=t1.inf", 
        "Mode=HTML", 
        LAST );

    2.3 web_submit_data

    WEB表单提交函数,它用来生成表单的GET或POST请求,一般修改URL地址、请求方式(POST/GET)、参数名称和参数值即可

    函数语法:Int web_submit_data ( const char *StepName, , ITEMDATA, , [ EXTRARES, ,] LAST );

    参数如下:
    1. Action:Form中的ACTION属性,指定了完成Form中的操作用到的URL
    2. Method:表单提交方法:POST或GET(默认是POST)
    3. EncType:编码方式
    4. EncodeAtSign:是否使用ASCII值对符号“@”编码。Yes或No
    5. TargetFrame:包含当前链接或资源的Frame。参见List of Attributes的同名参数
    6. Referer、Mode:参见List of Attributes的同名参数
    7. ITEMDATA:数据域和属性的分隔符
    8. List of Data:数据域列表定义了表单提交的内容。由于此请求是上下文无关的,因此数据域包含了所有的隐含域。使用Form的编码规则组织数据域
    数据域列表可以使用下面任意一种格式:
    "name=n1", "value=v1", ENDITEM,
    "name=n2", "EncryptedValue=qwerty", ENDITEM,
    9. EXTRARES:分隔符,标记下一个参数将是资源属性的列表。
    10. List of Resource Attributes:参见List of Resource Attributes。
    11. LAST:结束标记符。

    示例如下:

    web_submit_data("default.aspx",
    
    "Action=http://lazarus/flightnet/default.aspx",
    
    "Method=POST",
    
    "TargetFrame=",
    
    "RecContentType=text/html",
    
    "Referer=http://lazarus/flightnet/",
    
    "Snapshot=t7.inf",
    
    "Mode=HTML",
    
    ITEMDATA,
    
    "Name=grpType", "Value=radRoundtrip", ENDITEM,
    
    "Name=btnAvailableFlights", "Value=Next >", ENDITEM,
    
    LAST );

    2.4 参数化及其他常用函数

    1. 对于Http接口中调用的参数还可以进行参数化,模拟多种用户场景,方法都是一样的,在此恕不赘述

    2. 脚本中还有lr_start_transaction,根据判断返回码来确定lr_end_transaction pass或fail

    3. http接口性能测试脚本示例(包括Get及Post方法)

    Action()
    {
    lr_start_transaction("TestGet");
     
    web_reg_save_param("TGCode",
    "LB/IC={"returnCode":"",
    "RB/IC=","",
    LAST);
     
    web_url("TestGet",
    "URL=http://192.168.1.1:8080/GetPage",
    "Resource=0",
    "RecContentType=text/html",
    "Mode=HTML",
    LAST);
     
    if((strstr(lr_eval_string("{TGCode}"),"0000"))==NULL)
        {
        lr_end_transaction("TestGet", LR_FAIL);
        lr_error_message("TestGet Failed! ReturnCode:%s",lr_eval_string ("{TGCode}"));
        }
    else
        {
        lr_end_transaction("TestGet", LR_PASS);
        lr_output_message("TestGet Sucess! ReturnCode:%s",lr_eval_string ("{TGCode}"));
        }
     
    lr_start_transaction("TestPost");
     
    web_reg_save_param("TPCode",
    "LB/IC={"returnCode":"",
    "RB/IC=","",
    LAST);
     
    web_submit_data("TestPost",
    "Action=http://192.168.1.1:8080/TestPost",
    "Method=POST",
    "RecContentType=text/html",
    "Mode=HTML",
    ITEMDATA,
    "Name=param1", "Value=param1", ENDITEM,
    "Name=param2", "Value=param2", ENDITEM,
    LAST);  
     
    if((strstr(lr_eval_string("{TPCode}"),"0000"))==NULL)
        {
        lr_end_transaction("TestPost", LR_FAIL);
        lr_error_message("TestPost Failed!ReturnCode: %s",lr_eval_string ("{TPCode}"));
        }
    else
        {
        lr_end_transaction("TestPost", LR_PASS);
        lr_output_message("TestPost Sucess! ReturnCode: %s",lr_eval_string ("{TPCode}"));
        }
     
    return 0;
    }
  • 相关阅读:
    20155305 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计
    20155305乔磊2016-2017-2《Java程序设计》第八周学习总结
    20155305 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)
    20155305乔磊2016-2017-2《Java程序设计》第七周学习总结
    20155305乔磊2016-2017-2《Java程序设计》第六周学习总结
    2017-2018-1 20155302 《信息安全系统设计基础》第3周学习总结
    20155302 第二周课堂实践
    2017-2018-1 20155302 《信息安全系统设计基础》第1周学习总结
    20155302杨效宸《Java程序设计》课程总结
    20155302实验五 网络编程与安全
  • 原文地址:https://www.cnblogs.com/lovesoo/p/7735185.html
Copyright © 2011-2022 走看看