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;
    }
  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/lovesoo/p/7735185.html
Copyright © 2011-2022 走看看