LoadRunner脚本编写之三(事务函数)

关于脚本的这块,前两篇都在讲C语言,其实,要整理点实用的东西挺难,在应用中多对录制的脚本分析,但对于新手学脚本确实无从下手。

先贴一个脚本:

完整代码:

重点代码部分:

Action()
{web_url("webhp", "URL=http://www.google.com.hk/webhp?hl=zh-CN&sourceid=cnhp", "Resource=0", .....lr_start_transaction("登陆");    //设置事务开始web_submit_data("ServiceLoginAuth", "Action=https://accounts.google.com/ServiceLoginAuth", "Method=POST",       ........web_file("web_find","defnngj@gmail.com",LAST);  //设置检查点lr_end_transaction("登陆",LR_AUTO);    //设置事务结束return 0;
}

如果你想学习性能测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的性能测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!_哔哩哔哩_bilibili15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!共计27条视频,包括:1.【性能测试】什么是性能测试以及性能测试的价值和目的、2.【性能测试】真实企业性能测试指标详解以及指标测算、3.【性能测试】真实企业中性能测试流程以及细节剖析等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1B14y1D7X9/?spm_id_from=333.337.search-card.all.click 

上面的一段代码是我录制的一个google登录的过程,详细过程描述:

1、进入google首页

2、点击右上角的登录链接,跳转到登录页面

3、设置登录事务开始,输入用户名密码,点击登录

4、登录成功后跳转后google 首页,右上角出现登录的用户名,设置事务结束。

检查点

  在上面的操作中,我设置了一个检查点,web_fiind  ,判断后我是否登录成功一个重点的标志是在google首页右上角是否出现我的用户名。所以,我根据这个特点设置检查点,来检查登录是否成功。设置检查点的函数有三个,

web_find()函数: 在页面中查找相应内容

web_reg_find()函数: 在缓存中查打相应的内容

web_image_check()函数:在页面中查找具体图片。

  他们的具体用法,你们可以在脚本的编写中,光标定位在函数中,按F1 查看帮助文档或参考其它文档。

关于脚本中的事务

  我们在一个脚本中可能要做很多操作,我们为了分清脚本中某一段代码具体是做什么,所以,在执行某个操作的前后需要添加事务,用来标志事务的开始与结束,这样可以使脚本更清晰。当然,对于不同的事务需要分开录制。比如,某电子商务网站的浏览商品与交易。他们的比例是不同的,对于比较复杂的场景,是多个事务按不同的比例并行的。设置80%的用户浏览商品,20%的用户进行交易。

  当然,事务与事务之间是会有依赖关系的。如果我们把访问首页定为一个事务,登录定为一个事务,浏览商品定为一个事务,交易定为一个事务。那么我们要想录制(编写)交易的事务,那么前面三个事务是先觉条件。所以,我们知道录制一个脚本的目的是哪个操作,然后在其前后添加事务标识。

      对80%的用户浏览商品,20%用户交易,交易的前提是先浏览一个商品,也就是所有用户(100%)都浏览了商品,只有20%的用户去交易。这样是合乎逻辑的。

事务函数                                                                         

  在上面的脚本中我们用到了lr_start_transaction()函数和 lr_end_transaction()函数来标识一个事务的开始与结束,除些之外,loadrunner还提供了许多与事务相关的函数,这里介绍几个常用的。

1、lr_set_transaction_instance_status 用于设置事务的状态,事务的状态包括:LR_PASS、 LR_FAIL 、  LR_AUTO 、  LR_STOP  。可以在脚本中根据条件设置事务的状态,例如,根据检查点返回的结果来设置事务为通过还是失败。

if(event == GENERAL_ERROR)lr_set_transaction_instance_status(LR_FAIL);lr_end_transaction("登陆",LR_AUTO);

2、 lr_fail_trans_with_error与lr_set_transaction_instance_status 类似,都可以用于设置事务的状态,区别在于lr_fail_trans_with_error除了可以设置的状态,还可以输出错误日志信息。

if(status != SUCCESS)lr_fail_trans_with_error("an error has occurred:%s",my_get_error_string(status));lr_end_transaction("登陆成功",LR_AUTO); 

3、lr_get_transaction_status与前两个函数的作用相反,用于获取事务的状态。

if (lr_get_transaction_status() == LR_FAIL){//由于web_url请求失败了,所以没有必要继续执行下去,因些设置事务状态为FAILlr_end_transaction("登陆失败",LR_FAIL);return;}

4、lr_get_transaction_duration 用于获取事务所消耗的时间。这个就比较有意思了。

  我们登录百度首页,插入一个事务,然后访问百度注册页面。下面计算访问注册页面的时间。

完整脚本:

Action()
{double trans_time;  //定义变量web_url("www.baidu.com", "URL=http://www.baidu.com/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t14.inf", "Mode=HTML", EXTRARES, "Url=http://s1.bdstatic.com/r/www/cache/aoyun/img/i-1.0.1.png", ENDITEM, "Url=/favicon.ico", "Referer=", ENDITEM, "Url=http://s1.bdstatic.com/r/www/img/bg-1.0.0.gif", ENDITEM, "Url=http://nsclick.baidu.com/v.gif?pid=201&pj=www&rsv_sid=1289_1328_1262_1228_1344_1342_1186_1281_1178_1287_1320_1294_1330&fm=behs&tab=tj_reg&un=&path=http%3A%2F%2Fwww.baidu.com%2F&t=1343538345708", ENDITEM, "Url=https://passport.baidu.com/favicon.ico", "Referer=", ENDITEM, LAST);lr_start_transaction("访问注册页");  //定义事务开始web_link("???", "Text=???", "Ordinal=2", "Snapshot=t15.inf", EXTRARES, "Url=../img/breadbg.gif", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, "Url=../js/pass_api_reg.js?v=20120711", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, "Url=../img/v2/regbtn-split.gif", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, "Url=../cgi-bin/genimage?0013435383780156BF1F30CF18D2332EA927154DCDAB3B6B40F9E25197273F556454857E2FADF7BA23531BE59EEDE0EF92F2F006F8D595B88A907E318D2A249CBAB109FCDB3AB38ED4453F3BC149C6A5FD6240B97D598BA84EE3CEEE3F4359D3469309D88EE55C19B04251D2212171720B476D0A0D6277787DD43D9BA29E426A82BFD90E248FA15A32F1838B3E15D63B8CFE4E3DC6EAD4F23FE0DB457E5AE6B82DACCB79EE9EF289", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, "Url=../img/v2/reg_input_bg.gif", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, LAST);trans_time=lr_get_transaction_wasted_time("访问注册页");  //获得消耗时间if (trans_time) {lr_output_message("The duration up to the submit is %f seconds",trans_time);  //打印数输出消耗实时间}else{lr_output_message("the duration cannot be determined. ");}lr_end_transaction("访问注册页",LR_AUTO);  //事务结束return 0;
}

重点代码部分:

Action()
{double trans_time;  //定义变量web_url("www.baidu.com", "URL=http://www.baidu.com/", .....lr_start_transaction("访问注册页");  //定义事务开始web_link("???", "Text=???", "Ordinal=2", "Snapshot=t15.inf", ......trans_time=lr_get_transaction_wasted_time("访问注册页");  //获得消耗时间if (trans_time) {lr_output_message("The duration up to the submit is %f seconds",trans_time);  //打印数输出消耗实时间}else{lr_output_message("the duration cannot be determined. ");}lr_end_transaction("访问注册页",LR_AUTO);  //事务结束return 0;

运行结果:

.......
Action.c(39): The duration up to the submit is 0.029588 seconds
Action.c(45): Notify: Transaction "访问注册页" ended with "Pass" status (Duration: 5.0300 Wasted Time: 0.0296).
Ending action Action.
Ending iteration 1.

39:持续时间长达0.029588秒的提交

45:通知:交易”访问注册页”结束,“通过”状态(持续时间:5.0300 浪费时间:0.0296)。

从上面的结果中发现,我们设置lr_get_transaction_wasted_time函数的时间0.029588 与事务结束浪费的时间 0.0296 非常接近。 这是因为我把 lr_get_transaction_wasted_time函数插入在了事务结果的前面,其实,我们可以将lr_get_transaction_wasted_time插入在事务执行过程的任意位置来计算消耗时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/177881.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做一个Springboot文件上传-阿里云

概述 这个模块是用来上传头像以及文章封面的,图片的值是一个地址字符串,一般存放在本地或阿里云服务中 1、本地文件上传 我们将文件保存在一个本地的文件夹下,由于可能两个人上传不同图片但是却同名的图片,那么就会一个人的图片就…

腾讯待办停止运营怎么办?导出的ics文件数据怎么打开查看

待办提醒类工具是日常办公及生活中必不可少的工具,使用待办提醒类工具可以记录很多容易忘记的事情,其可以帮助大家轻松管理各项事务和提高办事的效率。而随着工作的不断变动,大家选择待办提醒类工具也会不断的发生改变。 比如就拿我自己的使…

时间序列预测(5) — ARIMA模型原理

目录 1 ARIMA模型简介 1.1 ARIMA模型原理 1.2 ARIMA模型适用条件 1.3 模型基本步骤 2 差分(Differencing) 2.1 差分运算的作用 2.2 差分运算 2.3 差分的阶数 2.4 差分的滞后 2.5 差分运算使用注意点 3 数据的平稳性 3.1 数据平稳性的概念 3…

R语言爬虫程序自动爬取图片并下载

R语言本身并不适合用来爬取数据,它更适合进行统计分析和数据可视化。而Python的requests,BeautifulSoup,Scrapy等库则更适合用来爬取网页数据。如果你想要在R中获取网页内容,你可以使用rvest包。 以下是一个简单的使用rvest包爬取…

基于安卓android微信小程序的食谱大全系统

项目介绍 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个开发过程首先对食谱大全进行需求分析,得出食谱大全主要功能。接着对食谱大全进行总体设计和详细设计。总体设…

unity UGUI无限循环滚动居中

最近在做一个ui循环滚动的功能,网上找了半天脚本感觉都和我实际需求不太符合,自己花费一些时间完成了这个功能记录一下。下面开始正题 ,我是采用unity自带组件Scroll View来完成,首先设置Scroll View如下图 面板层级结构如下 然…

运动蓝牙耳机哪个品牌好?这五款骨传导耳机表现还不错!

作为一个经常跑步运动的人,总感觉运动能够让人暂时远离城市的喧嚣,同时运动也是一种特别好的舒压方法。但跑步的时候如果没有音乐助燃,那是没有灵魂的,这也许就是现代年轻人的矫情吧,我在运动的时候经常会佩戴骨传导耳…

54基于matlab的包络谱分析

基于matlab的包络谱分析,目标信号→希尔伯特变换→得到解析信号→求解析信号的模→得到包络信号→傅里叶变换→得到Hilbert包络谱,包络谱分析能够有效地将这种低频冲击信号进行解调提取。程序已调通,可直接运行。 54matlab包络谱分析信号解调…

JS事件循环详解

前言:此文章是学习总结产物。 谈到事件循环,就要先说说浏览器的进程和线程了。只有了解了这些才能更深刻理解事件循环,那么就先来聊聊浏览器进程吧。 一、什么是进程?什么是线程? 1. 进程概念:进程是计算机…

Mysql执行报错:[Err] 1292 - Truncated incorrect DOUBLE value:***

MySQL执行语句抛出异常: 上面错误提示概是下面几种情况: 数据类型不匹配:在进行数值比较或运算时,数据类型可能不匹配。例如,将一个字符串值与一个 DOUBLE 类型的列进行比较或运算,或者将一个非数字字符串…

【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第二弹)

本次选题都为选择题。涉及到二叉树总结点和叶子结点的计算、二叉树的基本性质、根据二叉树的前序/后序和中序遍历画出二叉树、哈夫曼树等等…希望对你有帮助哦~😝 1.若一颗二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数为() A…

实现高值医疗耗材智能化管理的RFID医疗柜解决方案

一、行业背景 医疗物资管理面临着一系列问题,如高值耗材种类激增导致准入标准弱化、信息追踪困难、管理责任不明确等,医院内部设备、财务和临床科室相互独立,兼容性不佳,高值耗材储备不足,缺乏合理的预警机制&#xf…