原文从http://blog.163.com/venus-yhj/blog/static/95688270200962991842582/转来。

正在学习LR录制web登录脚本,十分有用,故转之。

或许对其他初学者有些用处。

本文中我将介绍LOADRUNNER对事务操作的几个函数,并通过一个例子,说明LOADRUNNER中事务是否成功是如何判断的,同时也介绍如何判断在脚本执行过程中脚本是否真实的执行成功。

1.先问个问题,我们带着问题继续

录制一个登陆脚本,对登陆用户和密码进行参数化,使前2个用户名正确,第三个用户名错误,设置脚本迭代3次,分别使用第一个、第二个、第三个用户登陆,此时在脚本中对登陆的提交操作加一个事务TR_LOGIN,现在提出问题:运行脚本时

第一个用户登陆成功,事务TR_LOGIN是否成功?

第二个用户登陆成功,事务TR_LOGIN是否成功?

第三个用户登陆失败,事务TR_LOGIN是否成功?

答案是:TR_LOGIN事务三次执行时均成功

那有人会问,登陆失败为什么事务成功?我们一起来看下面的例子,相信在做过例子后就会得到答案!

我这个例子录制的是LOADRUNNER自带的mercuryWebTours

录制方法在这里就不介绍了,录制完成并对用户名和密码参数化后的脚本如下:(参数化时其中第三个用户名是错误的)

Action()
{
    double trans_time;
    int status;

web_url("mercuryWebTours",
"URL=http://127.0.0.1:1080/mercuryWebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
    lr_start_transaction("tr_login");
    trans_time=lr_get_transaction_duration( "tr_login" );

//lr_get_transaction_duration这个函数可以得到事务执行所消耗的时间
    web_reg_find("Text=Error",
                 "SaveCount=login_Count", LAST);

//web_reg_find这个函数可以在相应的范围内找到要找的内容,和检查点类似,但这个函数被WEB_FIND多一个参数返回结果,那就是savecount这个值可以记录在指定范围内找到指定内容的个数,这个例子中我们就是通过这个值来判断用户是否真正的登陆成功

//说明:在登陆失败后,登陆页面会有一个“ERROR”的字符串,所以我们认为如果出现该字符串代表登陆失败,这个判断登陆成功或失败的条件,根据具体的项目不同而不同,根据实际情况而定

status = web_submit_form("login.pl",
"Snapshot=t2.inf",
ITEMDATA,
"Name=username", "Value={name}", ENDITEM,
"Name=password", "Value={password}", ENDITEM,
"Name=login.x", "Value=51", ENDITEM,
"Name=login.y", "Value=12", ENDITEM,
LAST);

//我们把web_submit_form函数执行的结果赋给status这个变量,如果成功返回0,不成功返回大于0的数

if (status == 0) //如果成功

lr_end_transaction("tr_login", LR_PASS);//如果提交成功,设置事务状态为PASS
else
lr_end_transaction("tr_login", LR_FAIL);//如果提交失败,设置事务状态为FAIL

if (trans_time) //如果该事务消耗了时间输出该时间
lr_output_message("tr_login事务耗时 %f 秒", trans_time);
else            //如果该事务没有消耗时间,那么输出时间不确定

lr_output_message("The duration cannot be determined.");

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

//如果在登陆后的页面中找到“ERROR”这个字符串,我们认为登陆失败
    lr_error_message("Login failed");
            }
else{

//否则登陆成功

lr_output_message("Login successful.");

return(0);

}
return 0;
}

好了,

执行这个脚本,得到的结果是:

第一次迭代时:(在这里只粘贴了一部分关键的日志)

Action.c(15): Notify: Transaction "tr_login" started.
Action.c(17): Registering web_reg_find was successful   [MsgId: MMSG-26390]
Action.c(20): Notify: Parameter Substitution: parameter "name" = "huruihai"
Action.c(20): Notify: Parameter Substitution: parameter "password" = "huruihai"
Action.c(20): Registered web_reg_find successful for "Text=Error"   [MsgId: MMSG-26362]
Action.c(20): Notify: Saving Parameter "login_Count = 0"
Action.c(20): web_submit_form("login.pl") was successful, 32673 body bytes, 1652 header bytes   [MsgId: MMSG-26386]
Action.c(30): Notify: Transaction "tr_login" ended with "Pass" status
Action.c(35): login事务耗时 0.002523 秒
Action.c(39): Notify: Parameter Substitution: parameter "login_Count" = "0"
Action.c(44): Login successful.
第二次迭代时:

Action.c(15): Notify: Transaction "tr_login" started.
Action.c(17): Registering web_reg_find was successful   [MsgId: MMSG-26390]
Action.c(20): Notify: Parameter Substitution: parameter "name" = "wangjin"
Action.c(20): Notify: Parameter Substitution: parameter "password" = "wangjin"
Action.c(20): Registered web_reg_find successful for "Text=Error"   [MsgId: MMSG-26362]
Action.c(20): Notify: Saving Parameter "login_Count = 0"
Action.c(20): web_submit_form("login.pl") was successful, 32673 body bytes, 1652 header bytes   [MsgId: MMSG-26386]
Action.c(30): Notify: Transaction "tr_login" ended with "Pass" status
Action.c(35): login事务耗时 0.006644 秒
Action.c(39): Notify: Parameter Substitution: parameter "login_Count" = "0"
Action.c(44): Login successful.

第三次迭代时:

Action.c(15): Notify: Transaction "tr_login" started.
Action.c(17): Registering web_reg_find was successful   [MsgId: MMSG-26390]
Action.c(20): Notify: Parameter Substitution: parameter "name" = "errorname"
Action.c(20): Notify: Parameter Substitution: parameter "password" = "errorpd"
Action.c(20): Registered web_reg_find successful for "Text=Error" (count=3)   [MsgId: MMSG-26364]
Action.c(20): Notify: Saving Parameter "login_Count = 3"
Action.c(20): web_submit_form("login.pl") was successful, 29263 body bytes, 821 header bytes   [MsgId: MMSG-26386]
Action.c(30): Notify: Transaction "tr_login" ended with "Pass" status (Duration: 0.6840 Wasted Time: 0.0010).
Action.c(35): login事务耗时 0.005852 秒
Action.c(39): Notify: Parameter Substitution: parameter "login_Count" = "3"
Action.c(40): Error: Login failed

Ending action Action.

大家可以看到,事务执行结果总是成功的,但最后一次的登陆确是失败的

我又把最后一次事务提交的请求地址做了错误的参数化,得到的结果是,事务执行失败

转载于:https://www.cnblogs.com/qiongyouzhe/archive/2009/10/28/1591476.html

LOADRUNNER 登陆功能测试实例(转)相关推荐

  1. Spring MVC + Spring + Hibernate + mysql 注册登陆入门实例

    Spring MVC + Spring + Hibernate + mysql 注册登陆入门实例 (1) 结构 (说明目的是要做在线聊天室的,也包含登陆注册部分,先用这部分做个例子)开发环境用的是ST ...

  2. Android如何实现简易登陆注册实例源码

    今天给大家带来Android如何实现简易登陆注册实例源码,希望能对各位学员有所帮助. activity_login <?xml version="1.0" encoding= ...

  3. 阿里云服务器:新用户的登陆服务器实例

    一.登陆阿里云服务器官网 这个不用多说:https://homenew.console.aliyun.com/ 进入到控制台 二.实例修改root密码 重置实例密码,点击之后 点击修改之后,重新选择v ...

  4. 全网最新的LoadRunner压力测试实例

    摘要:本文通过实例讲解介绍了LoadRunner 工具的使用,介于公司的实际情况,文中主要是对工具的基本使用做了详细描述,高级运用方面除性能计数器与参数设置外其它均未涉及,待以后补充.目的是使公司人员 ...

  5. Shiro学习总结(4)——Shrio登陆验证实例详细解读

    2019独角兽企业重金招聘Python工程师标准>>> 最终效果如下: 工程整体的目录如下: Java代码如下: 配置文件如下: 页面资源如下: 好了,下面来简单说下过程吧! 准备工 ...

  6. snoopy php https_php使用snoopy与curl模拟登陆的实例分享

    说起模拟登录,很多人可能会想起CURL.其实除了CURL,snoopy也是可以实现模拟登陆的.本文就实例分析了snoopy与curl两种实现方法,希望对大家有所帮助. php模拟登陆的实现方法,具体实 ...

  7. .net 实现三种验证码(汉字验证码,数字验证码,数字+英文验证)附带登陆验证实例

    首先,新建createImage.aspx 在CreateImage.aspx.cs中,添加如下代码: using System; using System.Collections.Generic; ...

  8. Shrio登陆验证实例详细解读

    摘要:本文采用了Spring+SpringMVC+Mybatis+Shiro+Msql来写了一个登陆验证的实例,下面来看看过程吧!整个工程基于Mavevn来创建,运行环境为JDK1.6+WIN7+to ...

  9. ajax php登陆界面,实例详解Ajax实现漂亮、安全的登录界面

    本文主要为大家详细介绍了Ajax实现一个漂亮.安全登录界面的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮到大家. 登录界面是信息系统提供的必备的功能,是提供给用户提供维护信息的接口 ...

最新文章

  1. 十年AI谁“最能打”?AI 2000榜单:何恺明最佳论文“刷”状元,谷歌机构排名第一...
  2. mvc 普通上传, 图片转二进制上传
  3. tikhonov正则化 matlab_4 L1和l2正则化详解(花书7.1 参数范数惩罚)
  4. python降维效果图_python实现拉普拉斯特征图降维示例
  5. 浅谈 UNIX、Linux、ios、android 他们之间的关系
  6. C# 调用动态链接库读取二代身份证信息
  7. 《淘宝网》质量属性简析
  8. 一年换7家公司,95后跳槽多疯狂
  9. 沃尔沃汽车与高德合作:首款纯电动汽车XC40 RECHARGE采用高德方案
  10. android显示view在屏幕中间,android – 如何在屏幕中央显示imageview?
  11. 开发版速达光耀-无公网IP服务器访问整体解决方案
  12. kotlin插件禁用导致的Android studio无法打开-mac
  13. 微信公众号推广的40个有效果的方法
  14. varnish---vcl语法
  15. R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal、fa、fa.parallel、factor.plot、fa.diagram、scree
  16. 如何在期货与现货市场之间套利?
  17. 使用PyCharm安装mayavi
  18. 编译原理学习 一 什么是编译程序
  19. Golang + Gin + cytocsape.js + neo4j
  20. 【上海居转户申请流程及材料清单|干货分享】

热门文章

  1. python的官方网站地址是什么-python赋值和地址
  2. python网页爬虫-Python网页爬虫
  3. 怎么自学python软件-你是如何自学 Python 的?
  4. python3.0安卓版-qPython 3h下载
  5. python3.7.2安装-CentOS 7中Python3.7.2的安装
  6. 从零开始学python数据分析-从零开始学Python数据分析(视频教学版)
  7. python对象编程例子-Python 面向对象编程实例讲解
  8. 学python需要哪些基础-python 学习,需要有哪些基础呢?
  9. educoder python入门之基础语法答案-Educoder Python入门之经典函数实例
  10. python编程入门指南磁力下载-使用python 将bt转磁力链接