软件性能测试Ⅳ

LoadRunner脚本语言基础

在用LoadRunner做性能测试的过程中规,编写脚本是一项非常重要的工作,一个脚本的好坏关系到性能测试的成败

vuser_init:是虚拟用户初始化函数,一般将用户初始化的操作放在这里,如登录操作、分配内存等,而且在做vuser_init的时候,Controllerller的Vuser状态区域会显示Intialize状态

Action:是虚拟用户要做的业务。用户的业务操作,也就是测试内容的主体。在VU里设置迭代循环选项时,只有Action会生效,被重复运行,而init和end部分,则在脚本的运行过程中,只会运行一次。

vuser_end:与vuser_init相对应,vuser_end做收尾工作。

如果在vuser_init中是登录,vuser_end里就要做退出登录

如果在vuser_init中是申请内存(使用malloc函数),vuser_end中就应该是释放内存(使用free函数)


VU三个函数的运行顺序

在LoadRunner的脚本中,可以调用三种函数

(1)VU通用函数,一般以lr开头,如lr_start_transaction函数

(2)协议相关函数,不同类型的Vuser的函数一般以本协议类型开头,如web_url就是一个协议函数,web前缀说明它是属于Web HTTP协议的,HTTP协议函数还包括web_list、web_link

(3)语言相关函数,VU脚本是用C语言写的,那么C语言的标准函数或dll都可以在这里被加载和使用


LoadRunner API结构图

通用VU函数是构建在C语言基础之上的脚本框架函数,起支持作用,因此学习通过VU函数,有助于我们了解LoadRunner脚本机制

通用VU函数有一个特征,就是以LR开头,以标明它们属于LR,而不专属于任何协议,只要是C脚本,就都可以使用

通用VU函数可以分为事务控制函数、命令行分析函数、系统信息函数、字符串函数、日志函数和运行时函数

事务和事务控制函数

软件系统的性能就是靠一个个事务来度量的。LoadRunner中事务的定义就是靠事务函数来进行的,在执行性能测试时,LoadRunner会采集完成其定义的每个事务所花费的时间,并在性能测试后在Analysis中进行统计分析


事务控制函数

命令行分析函数

当LoadRunner用命令行方式启动和运行时,以下函数用来分析命令行,以得到命令行中的参数信息

lr_get_attrib_double,检索脚本命令行中使用的double类型变量

lr_get_attrib_long,检索脚本命令行中使用的long类型变量

lr_get_attrib_string,检索脚本命令行中使用的字符串

系统信息函数

用来得到VU的系统信息

lr_user_data_point,记录用户定义的数据采集点

lr_whoami,将有关Vuser的信息返回给Vuser脚本

lr_get_host_name,返回执行Vuser脚本的主机名

lr_get_master_host_name,返回运行LoadRunner Controller的计算机名

字符串函数

主要对参数进行操作,包括对不同类型参数的读取、存储和移动

lr_eval_string,返回参数的当前值

lr_save_string,将以NULL结尾的字符串保存到参数中

lr_save_var,将变长字符串保存到参数中

lr_save_datetime,将当前日期和时间保存到参数中

lr_advance_param,前进到下一个可用参数

lr_decrypt,解密已解码的字符串

lr_eval_string_ext,lr_eval_string的扩展,为指向包含参数数据的缓冲区的指针

lr_eval_string_ext_free,释放由 lr_eval_string_ext 分配的指针

lr_save_searched_string,在缓冲区中搜索字符串实例,并将该字符串实例保存到参数中

消息函数

是VU发送和记录log的函数

lr_debug_message,将调试消息发送到输出窗口

lr_error_message,将错误消息发送到输出窗口

lr_get_debug_message,得到当前的消息类

lr_log_message,将输出消息直接发送到output.txt文件,此文件位于Vuser脚本目录中

lr_output_message,将消息发送到输出窗口

lr_set_debug_message,为输出消息设置消息类

lr_vuser_status_message,生成格式化输出并将其打印到Controller Vuser状态区域

lr_message,将消息发送到Vuser日志和输出窗口

运行时(run-time)函数

多数是通过VU的runtime来设置的,有以下函数放在脚本中来实现,使LoadRunner的控制更加细致,对外更加灵敏

lr_load_dll,加载外部DLL

lr_think_time,暂停脚本的执行,以模拟思考时间(实际用户在操作之间暂停以进行思考的时间)

lr_continue_on_error,指定脚本如何处理错误场景,是继续还是退出

lr_rendezvous,在Vuser脚本中设置集合点

协议相关函数

除了通用的Vuser函数外,Vugen还会在录制时生成特定于协议的函数,并将它们插入到Vuser脚本中

特定于协议的函数是专门针对要录制的Vuser的类型而生成的。如:Vugen会将LRD函数插入到数据库脚本中,将LRT函数插入到Tuxedo脚本中,将LRS函数插入到Windows套接字脚本中

在通用VU函数的基础上,不同协议类型的Vuser有自己一套协议相关的函数。一般协议相关的函数以本协议名字开头。如HTTP协议以web开头,MMS协议以mms开头,Database协议以lrd开头。

HTTP协议原理

HTTP协议的Vuser是模拟浏览器和Web Server的交互过程

浏览器与Web Server的一个简单的交互过程如图

HTTP协议交互原理

当浏览器想要得到一个网页时,用户在浏览器的地址栏里输入网页的URL,然后回车,浏览器首先就会发送一个HTTP的命令到Server,Server就会把页面的数据传送给浏览器,浏览器把数据解析成我们看到的HTML页面。但是HTTP协议有一个特点,它是无状态的,也就是说,浏览器和Server的每个交互都是独立无关的,Server不知道来自Browser的任何两个请求是否出自同一页面,或者是否有次序的规定。Web系统在HTTP协议上层进行了控制,通过Cookie、Session等机制来保证请求的状态

HTTP在LoadRunner的实现

以上过程,完全可以由LoadRunner的HTTP Vuser的函数来实现。以下图例是所有要用到的LoadRunner函数

LoadRunner HTTP函数

可见LoadRunner提供的HTTP协议API是比较细致的,不仅覆盖了浏览器与Server的交互,而且还有设置

HTTP Vuser录制生成的脚本

Web_add_cookie 的作用是保存 Server 传过来的 cookie,以后的访问都会基于此cookie,直到脚本的结束

Web_url 显示用户在IE地址栏中输入www.test.com 然后回车,IE发起一个访问的请求

用户进入www.test.com页面后,点击一个alt属性为library的图片,此操作被LoadRunner记录为Web_image函数

最后用户做了一个搜索的操作,退出

如果想生成功能强大一些的脚本,就需要了解VU的机制和原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • VU——用户行为的模拟器2 LoadRunner之所以强大,很大原因是VU的功能强大。VU几乎支持模拟当今所有主流...
    WinterM9阅读 952评论 0 1
  • 一:LoadRunner常见问题整理1.LR 脚本为空的解决方法:1.去掉ie设置中的第三方支持取消掉2.在系统属...
    0100阅读 4,064评论 0 11
  • 性能测试用户的设计策略—“普遍撒网,重点查看”原则 性能测试是一个复杂的过程,因为它的对象是一个由多个模块甚至多个...
    WinterM9阅读 310评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 性能测试基础知识 1、性能测试的含义 通过自动化测试工具模拟生产运行的业务压力或用户使用场景来测试系统的性能是否满...
    WinterM9阅读 421评论 0 0