前段时间看过了这些性能学习视频,但再次观看觉得收获还是满满的
LoadRunner中的web_reg_find和web_find两个函数的区别
1:函数类型不同
1:web_reg_find函数是注册函数,web_find是普通函数
2:运行机制上的区别:
1:web_reg_find函数:当响应数据在缓存中的时候,注册函数就可以在缓存中查找它要所找的内容
2:web_find函数:需要你把你请求的页面,完全显示出来,它从显示中的页面去查找指定的字符串
3:基于不同录制模式下使用不同
1:web_find函数 只支持在HTML录制
2:web_reg_find函数 在HTML以及URL模式下都可以进行录制
3:web_find函数,在java和VB中不被支持,在C语言中相互兼容
4:执行效率上不同
1:web_reg_find执行效率更高
使用web_reg_find函数时 紧接着使用Action function函数
Action function有以下几个函数:
1.web_custom_request
2.web_image
3.web_link
4.web_submit_data
5.web_submit_form
6.web_url 常见使用
Web(HTTP/HTML)协议的两种录制方式
1. HTML和URL based script介绍
a)HTML based script:可以为每个用户请求生成单独的函数
b)URL based script:可以捕获所有作为用户操作的结果发送到服务器的HTTP请求,然后一条条记录下来,甚至可以捕获非HTML应用程序,比如小程序和非浏览器应用程序
c)HTML这种录制方式录制出来的脚本直观,易于理解和维护。而URL生成的脚本看起来比较长比较多
2. 选择录制方式的原则
a)基于浏览器的应用程序推荐使用HTML-based Script
b)不死基于浏览器的应用程序推荐使用URL-based Script
c)如果基于浏览器的应用程序中包含了JavaScript并且该脚本向服务器产生了请求,比如DataGrid的分页按钮等,也要使用URL-based方式录制。
d)基于浏览器的应用程序中使用了HTTPS安全协议,使用URL-based方式录制
e)对于初学者来说,如果HTML方式录制不成功可以换成URL方式录制。
3. HTML based script设置介绍
a)用来描述用户行为的脚本。直接创建的URL(web_url),表单提交(web_submit_form),链接(web_link)和图像(web_image)等函数
b)仅包含明确的URL脚本,这种脚本中,所有的链接,图像请求和URL操作都被录制为web_url函数,而表单提交则被录制为web_submit_data函数
LoadRunner自动关联
1.关联的介绍
a)关联是LR经常会用到的操作
b)LR录制的脚本只是忠实记录了所有从客户端发送到服务器端的数据,并在脚本回放的时候按照录制时的顺序将录制下来的数据重新发送出去。
c)但是,实际上许多的系统都是采用SessionID或者SeqID等方法来标识不同的任务和数据报,应用在每次运行是发送的数据并不完全相同。
d)所以,为了让脚本能够支持测试的需求,就必然要用某种机制对脚本录制的数据进行处理了。
e)通过关联可以在测试中保持动态值
2.关联的目的
a)简化或者优化代码
例如:如果一次执行一系列的相关查询,代码可能会变得很长,为了减小代码的大小,可以嵌套查询,但这样会失去准确性,而且代码会变得复杂而难以理解。通过关联语句,不需要嵌套就可以链接查询。
b)用于动态数据
许多应用程序和网站按当前日期和时间标识会话。如果尝试重播脚本,该操作将会失败,因为当前时间与录制时间不同。通过关联数据可以保存动态数据,并且在整个方案运行过程中使用这些数据
c)容纳唯一数据记录
某些应用程序(如数据库)要求使用唯一的值,录制期间唯一的值在脚本执行时将不再唯一。例如,假设您录制了打开一个新的银行账号的过程,每个新账户都分配了用户未知的唯一编号。录制期间,此账号将插入具有唯一关键字约束的表中。如果尝试按所录制的那样运行脚本,该操作将尝试用录制的编号而不是新的唯一编号创建账户。结果将产生错误,因为该账号已经存在,如果在运行脚本时遇到了错误,请在发生错误的位置检查脚本。大多数情况下,通过关联查询功能可以解决该问题,关联查询将一个语句的结果用作另一个语句的输入。
3.一般的关联步骤
a) 从服务器返回的数据中选取需要进行关联的数据
b) 将该数据存入脚本的一个参数中
c) 讲脚本中需要使用该数据的地方用参数来替换
Tip:
a) 对于web来说,一般会用一个hidden的field存放
4.进行自动关联
a) Tools—Recording Options
b) 设置完成后录制登录—退出登录
c) 利用LR自带的自动关联进行关联
录制完脚本之后,进行先进行一次回放,让它找到这个错误,然后进行错误扫描才会识别出来,不然无法识别
5.常见的需要关联的情景
a)登录操作
b)先查后修改,先查后删除
c)并发控制:房子两个用户同时修改活同时删除一条记录
LR测试脚本的增强方法
1.事务
1.事务的概念:事务就是一系列操作的集合
2.插入事务方便我们今后的分析
2.参数化
1.LR的参数化功能是为了更加真实的模拟实际用户操作而设置的
a) 参数化方法:1:双击Value值,右键找到Replace with a Parameter
第二种参数化方法:菜单栏找到“参数列表”,添加一个参数
两种参数化方法的区别在与:第一种参数化方法指定初始值,第二种方法不指定初始值
3.如何验证网页的内容(检查点)
a) 运行测试时,经常要验证在返回的页面上是否有特定的内容。
b) 通过文本检查点和图像检查点完成
需要注意的是,必须要启动文本和图像检查点选项,否则你设置的检查点会不起作用
4.如何生产调试信息(输出函数)
a) 检查会需要一些辅助信息来帮助我们成功
b) 输出函数“lr_output_message
c) 其实LR还有许多类似的函数”如“lr_error_message”等
脚本编写实践过程
1.概述
a) 对于解释性语言的调试,如果没有专门的debug工具,操作起来很麻烦的,只能通过输出语句来进行调试。
b) LR的VuGen提供了breakpoint,单步调试等功能,debug功能还不是很强大
2.Animated run 与 Non-Animated run
a) 脚本可以设置成为Animated运行模式和非Animated运行模式。在Animated运行模式下,VU会显亮当前正在执行的脚本语句。用户可以通过VU设置语句执行的延迟时间,以便观察每行代码执行的效果,相比之下,在飞Animated运行模式下,VU在执行脚本时不会显亮语句,而一气执行下去。
b) Animated的设置在VU“Tools”菜单下的“Options”中,选中“General Options”中的“Replay”选项卡,在此对话框中设置Animated的Replay时间,生效范围
c) 在“View”菜单中勾选“Animated Run”方式
3.调试小技巧
a) 当执行脚本期间在输出窗口中显示错误消息时,我们可以双击该错误消息,Vugen将使光标跳到导致问题的测试行;
b) 如果要得到更详细的出错信息,也可以将光标置于错误代码上并按F1键,查看该错误代码的联机帮助解释。
4.日志设置
a) 对于软件开发人员来讲,日志无疑是跟踪和调试最好的线索。一般在日志中存放的是程序产生的各种信息,包括业务执行,警告和错误。一个优秀的软件应该有一套完备的日志系统,包括日志的内容,格式和级别等内容。
b) VU也提供了一套日志系统,我们可以通过Run-time Settings的Log选项来设置日志的级别
LR脚本编写实践过程
1.概述
a) 程序的开发大多不是一蹴而就的,同城要经过代码评审,编码和测试等流程后,才会趋于稳定。而VU脚本本身虽然不算复杂,单VU脚本运行旺旺涉及多个因素,也会经常出问题。提早发现和解决脚本中的问题,不仅从技术上下功夫,在流程上也要做文章。
2.最佳流程实践
a) Generate:录制或开发脚本。
b) SUSI(Single User Single Iteration,单用户循环);运行录制生成的脚本,解决可能存在的关联问题
c) SUMI(Single User MuIti Iterations,但你用户多循环);参数化脚本,在Run-time中设置Iteration,再次运行,验证参数化问题。
d) MUSI(MuItl User Single Iterations,多用户单循环);Controller里多用户运行脚本,验证脚本中可能的多线程同步问题。
e) MUMI(MuIti User MuIti Iterations,多用户多循环);即性能测试开始。
f) 其中1-3是在VU中进行的,而4和5是在Controller中进行的
推荐一个博客给大家有空可以多看看:http://xqtesting.blog.51cto.com
还可以去听听这个挨踢(IT)脱口秀:http://www.lizhi.fm/200893/