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函数)
在LoadRunner的脚本中,可以调用三种函数
(1)VU通用函数,一般以lr开头,如lr_start_transaction函数
(2)协议相关函数,不同类型的Vuser的函数一般以本协议类型开头,如web_url就是一个协议函数,web前缀说明它是属于Web HTTP协议的,HTTP协议函数还包括web_list、web_link
(3)语言相关函数,VU脚本是用C语言写的,那么C语言的标准函数或dll都可以在这里被加载和使用
通用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的机制和原理