LoadRunner登陆功能测试实例

简介:
 文中我将介绍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.
  大家可以看到,事务执行结果总是成功的,但最后一次的登陆确是失败的
  我又把最后一次事务提交的请求地址做了错误的参数化,得到的结果是,事务执行失败


最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例详细介绍_性能测试和租用价格
阿里云服务器ECS经济型e实例详细介绍_性能测试和租用价格,阿里云服务器ECS推出经济型e系列,经济型e实例是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU采用Intel Xeon Platinum架构处理器,支持1:1、1:2、1:4多种处理器内存配比,e系列性价比优选
|
数据采集 自然语言处理 数据库
深入体验阿里云通义灵码:测试与实例展示
阿里云通义灵码是一款强大的代码生成工具,支持自然语言描述需求,快速生成高质量代码。它在测试、代码质量和用户体验方面表现出色,能够高效地生成 Python 和 Java 等语言的代码,助力开发者提升开发效率和代码质量。无论是新手还是资深开发者,都能从中受益匪浅。
深入体验阿里云通义灵码:测试与实例展示
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
5751 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
240 2
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
|
存储 测试技术 API
apifox实例应用-自动化测试用例for循环的使用
总结来说,通过在Apifox自动化测试用例中结合for循环的使用,我们可以有效地对接口进行批量测试,提升测试效率和覆盖率。同时,通过参数化测试数据的灵活应用,能够确保我们的接口在不同的输入条件下都能保持正确的行为。这种方法能够显著减少手动测试工作量,同时通过标准化的流程确保测试的一致性。
975 0
|
NoSQL 关系型数据库 MySQL
软件测试之【基于开源商城系统fecmall功能测试项目实例】
软件测试之【基于开源商城系统fecmall功能测试项目实例】
1281 0
软件测试之【基于开源商城系统fecmall功能测试项目实例】
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
308 1
|
测试技术 Android开发
快速上手App自动化测试利器,Toast原理解析及操作实例
`Toast`是Android中的轻量级通知,短暂显示在屏幕任意位置,1-2秒后自动消失,不获取焦点且不可点击。Appium通过uiautomator2在控件树中处理Toast。在测试中,可设置隐式等待,利用XPath或Accessibility ID定位Toast元素进行检测和验证。示例代码展示了如何初始化driver,点击触发Toast,以及如何定位并读取Toast文本。
java面向对象高级分层实例_测试类(main方法所在的类)
java面向对象高级分层实例_测试类(main方法所在的类)