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请求失败了,所以没有必要继续执行下去,因些设置事务状态为FAIL
        lr_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插入在事务执行过程的任意位置来计算消耗时间。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据中心:精密空调监控,这招太高效了!

在当今日益复杂的工业环境中,精密空调系统的监控和管理变得至关重要。随着科技的迅猛发展,各行各业对温度、湿度和空气质量等参数的高度控制需求不断增加。 精密空调监控系统通过实时数据采集、分析和反馈,为企业提供了可靠的手段来确保生产环…

一步路难倒英雄汉?app自动化测试,怎么从零搭建appium!

不少软件测试想进阶到自动化测试,没有前人知道,只能像个无头的苍蝇,到处乱转,根本不知道从何处下手 特别是自学路上碰到需要安装什么程序、工具的时候,一个报错就需要在百度上查个半天,这么浪费时间的事情…

入站一个月涨粉80万!B站竖屏UP主如何突出重围?

B站仍然秉持着“内容为王”的社区氛围,这也是众多UP主们一同坚持的事。不管是今年宣布的Story Mode竖屏模式开放还是14周年庆上B站董事长兼CEO陈睿宣布作品播放量改播放分钟数等等改动来看,都能感受到B站在向更多优质创作者招手,并维护着优质…

MySQL--视图、存储过程、触发器

1、视图 1、定义: 所谓的视图是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,就是视图只保存了查询的SQL逻辑,不保存查询的结果,所以在创建视图的时候,主要的工作就是落在创建这条SQL查询语句的时…

web 渗透 信息搜集

一 收集域名信息 1.whois查询 whois(读作“Who is”,非缩写),标准的互联网协议&#xff0c…

Vue 模板语法 v-bind

红色框里面的都是vue的模板。有了模板就得有模板的特殊语法。上面只是简单的双括号加上表达式,这种叫做插值语法,除了这种语法还有其他语法吗? 插值语法实现的功能很单一,就是将指定的值放到指定的位置。还有一种叫做指令语法&am…

光伏仪器-87110A/B太阳辐照度计

87110A/B 太阳辐照度计 光伏仪器 一款小巧、全数字化的太阳辐照度测试仪表,通过标准太阳电池测试太阳辐照度,并自带温度修正功能。太阳辐照度计集成了环境温度、电池板温度、倾斜角等测试功能,可以通过附带的蓝牙或串行接口连至电脑或智能…

多种格式图片可用的二维码生成技巧,快来学习一下

将图片存入二维码是现在很常见的一种图片展现方式,有效的节省了图片占用内容空间以及获取图片内容的速度,所以现在会有很多人将不同的图片、照片生成二维码展示。如何使用图片二维码生成器来快速生成二维码呢?下面就让小编来给大家分享一下图…

CV计算机视觉每日开源代码Paper with code速览-2023.11.13

精华置顶 墙裂推荐!小白如何1个月系统学习CV核心知识:链接 点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构:Transformer】PolyMaX: Gener…

Intel 网卡使用iPXE固件

1、下载ipxe源码 https://git.ipxe.org/ipxe.git/tree 2、编译ipxe 1) 先使用lspci -nn|grep -i eth查询当前网卡的device id,如: 2)编译ipxe,可以选择编译legacy的rom,也可以选择编译uefi的rom&#x…

Redis缓存击穿、雪崩、穿透!(超详细)

作者前言: 为了解决Redis的缓存的问提也是在网上找了很多文章来了解,我感觉这篇文章非常好,希望大家了解一下,也是吧这篇文章归类了一下,可以直接在目录中找 缓存的击穿、穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题。 不过,…

算法-双指针-简单-移动零

记录一下算法题的学习2 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2…

solidworks怎么识别STEP文件特征?

solidworks怎么识别stp文件特征? Chapter1 solidworks怎么识别STEP文件特征? Chapter1 solidworks怎么识别STEP文件特征? 原文连接:https://baijiahao.baidu.com/s?id1744633829345140540&wfrspider&forpc step或者stp…

第八章:枚举

系列文章目录 文章目录 系列文章目录前言一、枚举总结 前言 类可以作为常量使用。 一、枚举 枚举是一组常量的集合。可以这里理解: 枚举属于一种特殊的类, 里面只包含一组有限的特定的对象。 枚举的实现方式自定义类实现枚举使用 enum 关键字实现枚举…

springBoot 入门一 :创建springBoot项目

创建springBoot项目 配置maven 项目报错处理

水库大坝安全监测预警系统的重要作用

水库大坝建造在地质构造复杂、岩土特性不均匀的地基上,在各种荷载的作用和自然因素的影响下,其工作性态和安全状况随时都在变化。如果出现异常,又不被及时发现,其后果不堪设想。全天候实时监测,实时掌握水库水位、雨情…

python链表_递归求和_递归求最大小值

创建一个单链表: class LinkNode: #设置属性def __init__(self,data None):self.data dataself.next None class LinkList: #设置头结点def __init__(self):self.head LinkNode()self.head.next Nonedef CreateListR(self,a): …

概率论和数理统计(四)方差分析与回归分析

前言 实际场景中,也需要研究两个变量的关系.检验也可能出现两个以上的总体. 方差分析 假设检验中,若需检验 H 0 : μ 1 μ 2 , H 1 : μ 1 ̸ μ 2 H_0:μ_1μ_2,H_1:μ_1 \notμ_2 H0​:μ1​μ2​,H1​:μ1​μ2​&#x…

【问题思考总结】第一型曲线积分和第二型曲线积分的区别与联系【从几何知识的角度思考】

此处为曲面积分------>第一型曲面积分的第二型曲面积分的区别与联系【从几何知识的角度思考】 问题 在做题的时候,我发现,关于这方面的知识有很多很多,但是每道题的解法不尽相似,也没有什么具体的体系,尤其是在结…

香港:考虑将虚拟资产列为投资移民资产

11 月 13日消息,香港政府在重新启动投资移民计划后,正考虑将持牌虚拟资产交易平台的比特币等虚拟资产列为可接受的投资项目。这一措施旨在折大投资移民的资产范围,以吸引更多高净值人士在香港落户。尽管有声音呼吁将房地产投资纳入资格范围&a…