在使用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的帮助中的例子)

  1.  

Action()
{

  1.  

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

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

  1.  

"Resource=0",

  1.  

"RecContentType=text/html",

  1.  

"Referer=",

  1.  

"Snapshot=t1.inf",

  1.  

"Mode=HTML",

  1.  

LAST);

  1.  

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

  1.  

web_reg_find("Text=Welcome",

  1.  

"SaveCount=Welcome_Count",

  1.  

LAST);

  1.  

// Now log in

  1.  

web_submit_form("login.pl",

  1.  

"Snapshot=t2.inf",

  1.  

ITEMDATA,

  1.  

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

  1.  

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

  1.  

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

  1.  

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

  1.  

LAST);

  1.  

// Check result

  1.  

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

  1.  

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

  1.  

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

  1.  

//在日志中输出Log on successful

  1.  

else

  1.  

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

  1.  

{lr_error_message("Log on failed");}

  1.  

//在日志中输出Log on failed

  1.  

return(0);

  1.  

}

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

下面是应用实例:

  1. #include "web_api.h"
  2.  
  3. Action()
  4.  
  5. {
  6.  
  7. web_url("www.google.cn","URL=http://www.google.cn/","Resource=0","RecContentType=text/html",
  8.  
  9. "Referer=",
  10.  
  11. "Snapshot=t1.inf",
  12.  
  13. "Mode=HTML",
  14.  
  15. EXTRARES,
  16.  
  17. LAST);
  18.  
  19. web_image_check("web_image_check",
  20.  
  21. "Src=/intl/zh-CN/images/logo_cn.gif",
  22.  
  23. "Alt=Google",
  24.  
  25. LAST);
  26.  
  27. return ;
    }

LoadRunner执行后日志记录如下:

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

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协议测试脚本如下:

  1. #include "lrs.h"
  2.  
  3. Action()
  4.  
  5. {
  6. int sc=;
  7.  
  8. lr_start_transaction("BIG1");
  9.  
  10. //建立socket链接
  11.  
  12. sc = lrs_create_socket("socket1","TCP","RemoteHost=192.168.85.247:26001",LrsLastArg);
  13.  
  14. if (sc == )
  15.  
  16. lr_output_message("Socket was successfully created ");
  17.  
  18. else
  19.  
  20. lr_output_message("An error occurred while creating the socket, Error Code: %d", sc);
  21.  
  22. //发送socket请求,接收socket返回结果
  23.  
  24. lrs_send("socket1", "buf0", LrsLastArg);
  25.  
  26. lrs_receive("socket1", "buf1", LrsLastArg);
  27.  
  28. //保存socket返回结果至参数Res_BIG1中
  29.  
  30. lrs_save_param_ex("socket1", "received", "buf1", , lrs_get_last_received_buffer_size("socket1"),NULL, "Res_BIG1");
  31.  
  32. //关闭socket链接
  33.  
  34. lrs_disable_socket("socket1", DISABLE_SEND);
  35.  
  36. lrs_close_socket("socket1");
  37.  
  38. //判断Res_BIG1参数中是否有"content-length: 10"字段
  39.  
  40. if((strstr(lr_eval_string("<Res_BIG1>"),"content-length: 10"))==NULL)
  41.  
  42. {
  43.  
  44. lr_error_message("-------%s",lr_eval_string("<Res_BIG1>"));
  45.  
  46. lr_end_transaction("BIG1",LR_FAIL);
  47.  
  48. }
  49.  
  50. else
  51.  
  52. {
  53.  
  54. lr_output_message("-------%s",lr_eval_string("<Res_BIG1>"));
  55.  
  56. lr_end_transaction("BIG1",LR_PASS);
  57.  
  58. }
  59.  
  60. return ;
  61.  
  62. }

实例2Webservie协议

Webservice性能测试脚本如下:

  1. Action()
  2.  
  3. {
  4. lr_start_transaction("SaveSession");
  5.  
  6. web_service_call( "StepName=SubmitNLSMS",
  7.  
  8. BEGIN_ARGUMENTS,
  9.  
  10. "inputXML=<mobileno>{UserNO}</mobileno><smscontent>hi </smscontent>",
  11.  
  12. END_ARGUMENTS,
  13.  
  14. BEGIN_RESULT,
  15.  
  16. "SubmitNLSMSRequestResult=SubmitSMSResult1", //保存返回结果至参数中
  17.  
  18. END_RESULT,
  19.  
  20. LAST);
  21.  
  22. //判断返回结果
  23.  
  24. if((strstr(lr_eval_string("{SubmitSMSResult1}"),"Hello World"))==NULL)
  25.  
  26. {
  27.  
  28. lr_error_message("-------%s",lr_eval_string("{UserNO}"));
  29.  
  30. lr_error_message("-------%s",lr_eval_string("{SubmitSMSResult1}"));
  31.  
  32. lr_end_transaction("SaveSession",LR_FAIL);
  33.  
  34. }
  35.  
  36. else
  37.  
  38. {
  39.  
  40. lr_output_message("-------%s",lr_eval_string("{UserNO}"));
  41.  
  42. lr_output_message("-------%s",lr_eval_string("{SubmitSMSResult1}"));
  43.  
  44. lr_end_transaction("SaveSession",LR_PASS);
  45.  
  46. }
  47.  
  48. return ;
  49.  
  50. }

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.

Loadrunner检查点使用总结的更多相关文章

  1. LoadRunner检查点学习实例

    LoadRunner只会检测脚本中事务的执行状态,而实际的事务执行结果则需要通过检查点来完成. 例如一个登录事务,LR只关心事务本身的执行状态,也就是说哪怕实际操作密码错误产生登录失败的业务操作,其事 ...

  2. LoadRunner ---检查点

    判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的HTTP状态为 200 OK ,那么VuGen 就认为脚本正确地运行了,并且是运行通过的.在绝大多数系统出错时会返回错误页面码? 不 ...

  3. 【转】loadrunner检查点设置

    转自:http://www.cnblogs.com/fnng/archive/2013/03/10/2953257.html 判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的HTT ...

  4. LoadRunner检查点实战

    码农博客 即将到期,现将博客中部分文章转载到博客园.转载时略有删减. 一.为什么要使用检查点 为什么要使用检查点,那就要说明一下LR如何判断脚本是否执行成功. LR判断脚本是否执行成功是根据服务器返回 ...

  5. 转:LoadRunner检查点使用小结

    LR中检查点有两种:图片和文字. 常用检查点函数如下: 1)web_find()函数用于从 HTML 页中搜索指定的文本字符串: 2)web_reg_find()函数注册一个请求,以在下一个操作函数( ...

  6. LoadRunner检查点实战之运行查看器

    一.为什么要使用检查点 为什么要使用检查点,那就要说明一下LR如何判断脚本是否执行成功.LR判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的HTTP状态为 200 OK ,那么Vu ...

  7. loadrunner检查点设置失败,日志中SaveCount无法被正常统计出来

    在脚本正确的情况下的web_reg_find检查点检查失败,SaveCount无法被正常统计出来. 在检查项Text为中文的情况下, ******(我是被录制下来的代码) web_reg_find(& ...

  8. LoadRunner检查点使用小结

    LR中检查点有两种:图片和文字. 常用检查点函数如下: 1)web_find()函数用于从 HTML 页中搜索指定的文本字符串: 2)web_reg_find()函数注册一个请求,以在下一个操作函数( ...

  9. LoadRunner检查点

    web_reg_find("Text=ABC", "SaveCount=abc_count", LAST);51Testing软件测试网V?2Rs.J Gmdw ...

随机推荐

  1. 12个Sublime Text应用技巧和诀窍

    本文为您提供Sublime Text编辑器的12个技巧和诀窍,深入挖掘这个看似简洁的代码编辑器,背后所隐藏的实现各种高级功能的无限可能. 1) 选择 以下是一些Sublime Text选择文本的快捷键 ...

  2. 201521123051《Java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. Java多线程同步的方法: (1)同步方法:即有synchronized关键字修饰的方法. 由于java的每个对象 ...

  3. Java课程设计—学生成绩管理系统(54号童欢)

    1. 团队课程设计博客链接 http://www.cnblogs.com/wufuckshuo/p/7063183.html 2.个人责模块或任务说明 负责模块/任务:主函数(调用其他的功能函数),添 ...

  4. 201521123001《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...

  5. java数据类型与二进制

    在java中 Int 类型的变量占 4个字节 Long 类型的变量占8个字节 一个程序就是一个世界,变量是这个程序的基本单位. Java基本数据类型 1.        整数类型 2.        ...

  6. RSA原理、ssl认证、Tomcat中配置数字证书以及网络传输数据中的密码学知识

      情形一:接口的加.解密与加.验签 rsa不是只有加密解密,除此外还有加签和验签.之前一直误以为加密就是加签,解密就是验签.这是错误的! 正确的理解是: 数据传输的机密性:公钥加密私钥解密是密送,保 ...

  7. Struts2第六篇【文件上传和下载】

    前言 在讲解开山篇的时候就已经说了,Struts2框架封装了文件上传的功能--..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前,我们在we ...

  8. 《MySQL必知必会》[03] 表数据的增删改

    1.增:插入数据 INSERT关键字可以插入新的行到数据库表中: 插入完整的行 插入行的一部分 插入多行 插入某些查询的结果 基本的INSERT语句是: INSERT INTO R(A1, A2, . ...

  9. web网站更换新域名

    第一步.绑定新的域名到单独的空间 一般我们都是用的VPS或者不限制建站数量的虚拟主机,尽量的保持原有的IP不变,我这边在老站点同IP的VPS主机下新建一个新域名站点,这样我们可以确保原有的站点IP不变 ...

  10. 树状数组(Binary Indexed Tree,BIT)

    树状数组(Binary Indexed Tree) 前面几篇文章我们分享的都是关于区间求和问题的几种解决方案,同时也介绍了线段树这样的数据结构,我们从中可以体会到合理解决方案带来的便利,对于大部分区间 ...