zoukankan      html  css  js  c++  java
  • Loadrunner 11检查点使用方法总结

    在使用Loadrunner 11进行性能测试中,有时需要对性能测试中的功能是否全部正确进行判断。这里就需要用到“检查点”,本文总结了常用三种协议下检查点的使用方法,希望阅读本文后的小伙伴们能够掌握其使用方法,并灵活应用在实际项目中。

    1. HTTP协议

    HTTP协议中检查点有两种:图片和文字。这两种检查点可用以下三个函数实现:web_find()、web_reg_find()和web_image_check(),下面介绍三种函数的使用方法。

    1.1  web_find()函数

    函数的作用是“在页面中查找相应的内容”,常用参数及含义如下:

    web_find("web_find",   //定义该查找函数的名称

    "RightOf=a",      //定义查找字符的右边界

    "LeftOf=b",       //定义查找字符的左边界

    "What=name",     //定义查找内容

    LAST);

    使用该函数注意以下事项:

    • 位置

    该函数在页面内容显示出来以后,在页面中进行查找,所以只能写在要查找内容之后

    • 录制模式

    该函数只能在基于HTML模式录制的脚本中进行查找

    • 必须启用内容检查选项

    在Runtime setting->Preferences里面,把Enable image and text check选中,否则不执行该查找函数

    启用内容检查选项

    • 在VB和JAVA语法中不支持该函数

    该函数还有以下缺点:

    •  执行效率较低
    •  不返回查找结果情况,如果想在执行该函数后根据查找结果做进一步操作时,没有返回值可以依据。
    • 例如:在页面中查找“登录成功”的字符串,如果找到该字符串在日志中输出“登录成功”,如果找不到该字符串,则在日志中输出“登录失败”,此时使用该函数没有依据来做此判断,但使用web_reg_find()函数,使用它其中的SaveCount可以进行判断,具体方法我们下面介绍。

    1.2 web_reg_find()函数

    函数的作用是“在缓存中查找相应的内容”,常用参数及含义如下:

    web_reg_find("Search=Body",  //定义查找范围

    "SaveCount=count",            //定义查找计数变量名称

    "Text=test",                 //定义查找内容

    LAST);

    使用该函数注意以下事项:

    • 位置

    该函数写在要查找内容的请求之前,通常情况下写在如下六个函数之前:Web_castom_request();web_image();web_link();web_submit_data();web_submit_form();web_url()

    • 使用技巧

    该函数中的“SaveCount”参数可以记录在缓存中查找内容出现的次数,我们可以使用该值,来判断要查找的内容是否被找到,下面举个例子来说明:(引用LR的帮助中的例子)

    
    

    Action()
    {

    
    

    // Run the Web Tours sample
    web_url("MercuryWebTours",

    "URL=http://localhost/MercuryWebTours/",

    
    

    "Resource=0",

    
    

    "RecContentType=text/html",

    
    

    "Referer=",

    
    

    "Snapshot=t1.inf",

    
    

    "Mode=HTML",

    
    

    LAST);

    
    


    // Set up check for successful login by looking for "Welcome"

    
    

    web_reg_find("Text=Welcome",

    
    

    "SaveCount=Welcome_Count",

    
    

    LAST);

    
    


    // Now log in

    
    

    web_submit_form("login.pl",

    
    

    "Snapshot=t2.inf",

    
    

    ITEMDATA,

    
    

    "Name=username", "Value=jojo", ENDITEM,

    
    

    "Name=password", "Value=bean", ENDITEM,

    
    

    "Name=login.x", "Value=35", ENDITEM,

    
    

    "Name=login.y", "Value=14", ENDITEM,

    
    

    LAST);

    
    


    // Check result

    
    

    if (atoi(lr_eval_string("{Welcome_Count}")) > 0)

    
    

    //判断如果Welcome字符串出现次数大于0

    
    

    { lr_output_message("Log on successful."); }

    
    

    //在日志中输出Log on successful

    
    

    else

    
    

    //如果出现次数小于等于0

    
    

    {lr_error_message("Log on failed");}

    
    

    //在日志中输出Log on failed

    
    

    return(0);

    
    

    }

    1.3  web_image_check()函数

    函数作用:在页面中查找一个具体的图片,常用参数及含义如下:

    web_image_check("web_image_check", //函数标题

    "Alt=", //图标说明

    "Src=", //图片链接地址

    LAST);

    使用该函数注意以下事项:

    • “Alt”和“Src”的值直接取该图片在网页源代码中相应参数的值
    • 该函数是在缓存中查找相应的内容,所以要放在查找内容之前
    • 使用该函数时,同样需要在Vuser->Run-Tme Settings中勾选Enable Image and text check

    下面是应用实例:

    #include "web_api.h"

    Action()

    {

    web_url("www.google.cn","URL=http://www.google.cn/","Resource=0","RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", EXTRARES, LAST); web_image_check("web_image_check", "Src=/intl/zh-CN/images/logo_cn.gif", "Alt=Google", LAST); return 0;
    }

    LoadRunner执行后日志记录如下:

    Action.c(20): "web_image_check" succeeded (1 occurrence(s) found. Alt="Google", Src="/intl/zh-CN/images/logo_cn.gif")   [MsgId: MMSG-27192]Action.c(20): web_image_check was successful   [MsgId: MMSG-26392]

    1.4 插入函数的方法

    • 手工写入,在需要插入函数的位置手工写入该函数
    • 光标停留在要插入函数的位置,在INSERT菜单中,选择New step,在列表中选择或查找要插入的函数,根据提示填写必要的参数
    • 在Tree view模式下,在树状菜单中选中要插入函数的位置,右键,选择Insert after或Insert before,根据提示填写必要的参数

    1.5小结

    • WEB_FIND与WEB_REG_FIND函数类型不同,WEB_FIND是普通函数,WEB_REG_FIND是注册函数
    • WEB_FIND使用时必须开启内容检查选项,而WEB_REG_FIND则不没有此限制
    • WEB_FIND只能只用在基于HTML模式录制的脚本中,而WEB_REG_FIND没有此限制
    • WEB_FIND是在返回的页面中进行内容查找,WEB_REG_FIND是在缓存中进行查找
    • WEB_FIND在执行效率上不如WEB_REG_FIND

    2.    SocketWebservice协议

    由于Socket协议与Webservice协议中检查点设置方法基本一致,本文主要以实例来逐一说明。

    实例1Socket协议

    Socket协议测试脚本如下:

    #include "lrs.h"
    
    Action()
     
    
    {
        int sc=0;
    
        lr_start_transaction("BIG1");
        
        //建立socket链接
        
        sc = lrs_create_socket("socket1","TCP","RemoteHost=192.168.85.247:26001",LrsLastArg);
        
        if (sc == 0)
        
        lr_output_message("Socket  was successfully created ");
        
        else
        
        lr_output_message("An error occurred while creating the socket, Error Code: %d", sc);
        
        //发送socket请求,接收socket返回结果
        
        lrs_send("socket1", "buf0", LrsLastArg);
        
        lrs_receive("socket1", "buf1", LrsLastArg);
        
        //保存socket返回结果至参数Res_BIG1中
        
        lrs_save_param_ex("socket1", "received", "buf1", 0, lrs_get_last_received_buffer_size("socket1"),NULL, "Res_BIG1");
        
        //关闭socket链接
        
        lrs_disable_socket("socket1", DISABLE_SEND);
        
        lrs_close_socket("socket1");
        
        //判断Res_BIG1参数中是否有"content-length: 10"字段
        
        if((strstr(lr_eval_string("<Res_BIG1>"),"content-length: 10"))==NULL)
        
        {
        
        lr_error_message("-------%s",lr_eval_string("<Res_BIG1>"));
        
        lr_end_transaction("BIG1",LR_FAIL);
        
        }
        
        else
        
        {
        
        lr_output_message("-------%s",lr_eval_string("<Res_BIG1>"));
        
        lr_end_transaction("BIG1",LR_PASS);
        
        }
        
        return 0;
    
    }

    实例2Webservie协议

    Webservice性能测试脚本如下:

    Action()
    
    {
        lr_start_transaction("SaveSession");
         
        web_service_call( "StepName=SubmitNLSMS",
        
        BEGIN_ARGUMENTS,
        
        "inputXML=<mobileno>{UserNO}</mobileno><smscontent>hi </smscontent>",
        
        END_ARGUMENTS,
        
        BEGIN_RESULT,
        
        "SubmitNLSMSRequestResult=SubmitSMSResult1", //保存返回结果至参数中
        
        END_RESULT,
        
        LAST);
        
        //判断返回结果
        
        if((strstr(lr_eval_string("{SubmitSMSResult1}"),"Hello World"))==NULL)
        
        {
        
        lr_error_message("-------%s",lr_eval_string("{UserNO}"));
        
        lr_error_message("-------%s",lr_eval_string("{SubmitSMSResult1}"));
        
        lr_end_transaction("SaveSession",LR_FAIL);
        
        }
        
        else
        
        {
        
        lr_output_message("-------%s",lr_eval_string("{UserNO}"));
        
        lr_output_message("-------%s",lr_eval_string("{SubmitSMSResult1}"));
        
        lr_end_transaction("SaveSession",LR_PASS);
        
        }
        
        return 0;
    
    }

    2.1 小结

    使用“检查点”,首先需要得到“返回结果”,将该返回结果保存至参数中

    对返回结果进行判断,这里可能需要用到lr_eval_string(), atoi(), strstr()等函数

    相关函数说明:

    • lr_eval_string()函数作用是取得参数值,将字符串变量中的参数值替换为当前的参数值并将这个字符串返回
    • atoi()函数的作用是将一个ASCII字符串转换为整型
    • strstr()函数格式为strstr(str1,str2),其中str1: 被查找目标string expression to search,str2:要查找对象The string expression to find.该函数返回str2第一次在str1中的位置,如果没有找到,返回NULL.
  • 相关阅读:
    使用 Dockerfile 定制镜像
    UVA 10298 Power Strings 字符串的幂(KMP,最小循环节)
    UVA 11090 Going in Cycle!! 环平均权值(bellman-ford,spfa,二分)
    LeetCode Best Time to Buy and Sell Stock 买卖股票的最佳时机 (DP)
    LeetCode Number of Islands 岛的数量(DFS,BFS)
    LeetCode Triangle 三角形(最短路)
    LeetCode Swap Nodes in Pairs 交换结点对(单链表)
    LeetCode Find Minimum in Rotated Sorted Array 旋转序列找最小值(二分查找)
    HDU 5312 Sequence (规律题)
    LeetCode Letter Combinations of a Phone Number 电话号码组合
  • 原文地址:https://www.cnblogs.com/lovesoo/p/7727042.html
Copyright © 2011-2022 走看看