LoadRunner脚本编写
loadrunner11 教程
LoadRunner11 教程LoadRunner是一款功能强大的性能测试工具,可以用于模拟真实用户并发访问网站、应用程序或系统,以评估其性能和稳定性。
本教程将介绍LoadRunner11的基本概念、安装步骤和使用方法。
目录1.LoadRunner11 简介2.LoadRunner11 安装步骤3.创建Vuser 脚本4.设定场景5.运行测试6.分析结果7.高级功能8.总结1. LoadRunner11 简介LoadRunner11是一套由Micro Focus提供的性能测试工具,它可以模拟并发用户对应用程序或网站进行真实的压力测试。
它具有以下主要功能:•Vuser脚本录制和编辑:用户可以使用LoadRunner 录制脚本来模拟用户的操作,并对录制的脚本进行编辑和优化。
•场景设计和控制:用户可以创建不同的测试场景,并控制虚拟用户的数量、行为和参数化。
•运行测试并监控结果:用户可以运行测试并监控各项性能指标,如响应时间、吞吐量和并发用户数等。
•分析和报告:用户可以使用LoadRunner自带的分析工具来对测试结果进行统计和分析,并生成详细的测试报告。
2. LoadRunner11 安装步骤安装LoadRunner11非常简单,只需按照以下步骤进行操作:1.下载安装程序:从Micro Focus官方网站下载LoadRunner11安装程序,并双击运行。
2.接受许可协议:阅读许可协议并接受。
3.选择安装选项:根据需求选择安装LoadRunner11的组件。
默认情况下,会安装录制器、虚拟用户生成器、分析器等组件。
4.选择安装路径:选择将LoadRunner11安装到的目录。
5.等待安装完成:等待安装程序完成。
3. 创建Vuser 脚本在开始进行性能测试前,需要创建一个或多个Vuser脚本,用于模拟用户的行为。
以下是创建Vuser脚本的基本步骤:1.启动Vuser脚本录制器:在LoadRunner11中打开录制器工具。
Loadrunnerl录制脚本和运行脚本详细过程
Laodruuner做网站压力测试录制脚本详细过程。
供各位新手学习使用,特别是想刚入门的新手。
这是我个人自己入门的体会,如有更好的资料的大侠,希望拿出来共同学习。
本人的是laodrunner8.0版本。
1、先安装laodrunner8.0.2、开始-》程序-》mercury loadrunner-》mercury loadrunner 进入到如下页面:3、选择laod testing—》create/edit scripts进入到new virtual user的页面(如果没有看到new virtual user的页面,也可以选择file—)new就可以弹出)如图页面4、在available protocols的选项中选中web(http/html),点击向右“”的前头,把web(http/html)添加到selected protocols的目录下,如下图所示5、点击“OK” 进入到如图的页面再根据下图做相应的选择如图所示:Application type 选择“intern application”;program to record默认为:microsoft internet explorer ;URL address 输入你要压力测试网址的网址;working directory输入保存脚本的路径(请记住你保存的路径,以便再次调用)6、点“OK”从LR登陆进入网站首页LR同时录制操作过程的脚本,如图:输入用户名和密码,进入OA(LR会记录用户操作的每一个步骤)如图所示:用户可以再做相关的操作,LR都会以脚本的形式记录下来。
如果要停止录制,点击如图按钮:录制过程完毕。
7、跳转到如图页面点击“△”符号(红色圈起来的),使录制的脚本运行起来,查看录制的脚本是否成功如results-test results页面:results-test results页面Failed为0;warnings为0说明脚本录制成功。
使用loadrunner的流程
使用LoadRunner的流程1. 简介LoadRunner是一款性能测试工具,可用于模拟并测试不同负载条件下的应用程序性能。
它是业界著名的性能测试工具之一,广泛应用于软件开发和测试领域。
本文将介绍使用LoadRunner的基本流程,包括录制脚本、编辑场景、运行测试、分析结果等内容。
2. 录制脚本使用LoadRunner进行性能测试的第一步是录制脚本。
脚本录制是指将用户对应用程序的操作记录下来,以便后续可以回放并模拟用户行为。
下面是录制脚本的步骤:•打开LoadRunner,选择录制模式。
•配置录制设置,包括选择要录制的应用程序和协议。
•启动录制,执行各项操作,包括登录、浏览网页、提交表单等。
•停止录制,保存录制的脚本文件。
3. 编辑场景录制完脚本后,需要对场景进行编辑和定制,以模拟真实的负载条件。
场景是指一组用户行为的集合,可以包括不同的用户数量、并发用户数量、用户的思考时间、延迟时间等。
以下是编辑场景的步骤:•打开LoadRunner,选择编辑场景模式。
•导入录制的脚本文件。
•配置场景参数,包括虚拟用户数量、并发用户数量、需模拟的业务负载等。
•设置运行时的动态参数,如需替换用户名、密码等敏感信息。
•配置场景的持续时间、循环次数、运行模式等。
4. 运行测试场景编辑完成后,可以开始运行性能测试。
在运行测试期间,LoadRunner将模拟多个虚拟用户并发访问目标应用程序,记录并分析系统的性能指标。
以下是运行测试的步骤:•打开LoadRunner,选择运行测试模式。
•配置测试设置,包括选择要运行的场景、设置测试目标等。
•启动测试运行,观察测试运行的过程。
•监控系统性能指标,如响应时间、吞吐量、服务器负载等。
5. 分析结果性能测试完成后,需要对测试结果进行分析。
LoadRunner提供了丰富的分析工具,用于分析各项性能指标,找出性能瓶颈并提供建议。
以下是分析结果的步骤:•打开LoadRunner的分析工具。
Loadrunner java vuesr协议使用手册
Loadrunner java vuesr协议操作手册一、打开loadrunner从程序中找到HP loadrunner文件夹,打开loadrunner。
Loadrunner页面如下图所示。
其中标识为1的代表创建vuser脚本,标识为2的为运行场景测试,标识为3的为分析结果。
二、录制/编辑测试脚本1、脚本创建在负载测试之前要先进行脚本的录制或者编写。
手机银行项目由于为接口服务,并无页面,所以vuGen无法录制到脚本,所以需要自行编写。
下图为vuGen页面,点击下图红线标识的按钮进行脚本创建。
2、协议选择脚本创建时,需要选择脚本协议类型,请根据需要测试的程序类型进行选择。
脚本选择图框如下图所示。
本次选择的是java Vuser 协议,点击Create创建脚本。
3、脚本编写创建脚本后进入脚本编辑页面,脚本编辑页面如下图所示,在脚本编辑页面开始进行脚本的录制/编写。
图中标识为2和4的init()和end()中的内容只在开始和结束时运行一次,标识为3的action()中的内容可以多次迭代,迭代方式和次数我们可以设置。
4、运行时设置按下F4进入Run-time settings页面,在Run-time settings中选择javaVM,点击Use Specifies JDK,将系统中安装的jdk路径拷贝过来。
点击classpath,导入脚本需要的jar包。
页面中右侧的五个按钮分别是向上选择,向下选择,导入单个jar包,导入文件夹(中的jar包),删除;请根据需要进行操作。
General中的五个选项分别是运行时迭代方式,日志输出,思考时间,多线程,错误处理,自动事务等的配置,请根据需要自行选择。
5、打开现有脚本点击图中标识的文件夹按钮,打开现有脚本,能打开的文件格式为VuGen Scripts,脚本打开之后,打开运行时设置,导入jar包,配置jdk路径,方法如上所述。
其他配置如日志配置,思考时间等根据需要进行配置。
loadRunner使用图解
loadRunner测试基本步骤:录制脚本→脚本调试→加载脚本、设置参数→压力测试→测试完成、生成测试报告以某系统签到签退测试脚本为例:1、录制脚本运行loadRunner,点击create/edit scripts图1.1 loadRunner主界面—录制脚本点击弹出窗口的new Vuser script…按钮图1.2 脚本选择界面弹出选择脚本协议窗口,默认为web(HTTP/HTML),签到签退功能测试的类型是web,所以直接点击ok图1.3 协议选择界面在下图中,在URL Address中输入测试入口地址,输入完成后,点击ok,开始录制图1.4 录制脚本参数设置界面图1.5 点击ok后,弹出窗口,开始录制图中红色标识部分为脚本录制的阶段。
一共有三个:vuser_init(初始化)、Action (动作)、vuser_end(结束)以签到压力测试为例,我们要测试的动作为签到,初始化为用户登录,结束可以为用户退出,也可以为用户点一下其它按钮。
输入用户名、密码,登录系统图1.7 脚本录制—初始化阶段,登录完成。
登录完成后,初始化阶段完成,经红色标识部分调整为Action,开始动作部分—签到。
调整为Action后,开始录制动作。
在门户首页点击个人事务,点击签到点击确认,完成签到动作签到动作完成后,Action录制完成。
结束动作开始。
我们以点击一下沟通中心作为整个操作的结束,沟通中心页面加载完成后,点击结束按钮,脚本录制完成。
2、脚本调试点击下图中标识的按钮,进行脚本回放图2.1 脚本回放再次点击回放按钮图2.2 脚本回放完成后,再次点击回放按钮图2.3 系统参数比较先选择下方的参数,然后点击correlate,参数比较完成图2.4 点击查看脚本按钮图2.5 脚本中记录用户名密码参数的位置图2.6 脚本中其它参数的位置找到脚本中记录用户名密码参数的位置,替换为另一个人如wujq(将脚本中zhouyun 改为wujq),找到其它需要修改的参数的位置,如empId,由于员工一天只允许签一次到,所以empId是必须修改的(wujq的员工id为7942,所以empId部分修改为7942)。
【LoadRunner12】基础使用教程:录制第一个脚本(包含遇到的错误问题解决)
【LoadRunner12】基础使⽤教程:录制第⼀个脚本(包含遇到的错误问题解决)1、双击“Virtual User Generator”2、点击“File-New Script and Solution”,弹出如下界⾯3、选择VuGen→Single Protocol→Web-HTTP/HTML,输⼊脚本名称,选择保存位置,点击“Create”4、双击左边栏中的“vuser_init”,再点击1或者2位置处的录制按钮“Record”5、选择运⾏的浏览器、输⼊测试⽤的url,选择⼯作⽬录点击“Start Recording”5.1点击RecordingOptions5.2、选中URL-dased script5.3、勾选UTF-8和倒数第⼆个6、点击“Yes”7、会⾃动打开⽹页,如下图8、点击“插⼊开始事务”,如下图所⽰图标,输⼊名称后点击“OK”9、⽹页上输⼊账号和密码登录后,点击"插⼊结束事务",如下图所⽰图标10、点击”结束录制“按钮11、⾃动保存12、点击”Open Design Studio"13、如下图所⽰,选中的2项内容需要做参数化处理,分别选中图中2项内容,点击“Correlate”按钮,然后点击“Close”关闭弹窗15、点击“编译”按钮,编译⼀下看看是否报错16、点击回放按钮“Replay”,发现报了两个错17、第⼀个错误 Error -26547,根据错误提⽰,在如图所⽰位置添加如下代码:web_set_user("10.0.8.34\\admin","cdsf@119","10.0.8.34:28888");18、再次点击回放按钮“Replay”,只剩⼀个错误Error-2663019、错误原因,此时浏览器中,测试⽹址为登录后的状态,在浏览器中将账号退出登录,然后再次点击回放按钮“Replay”,这⼀次就通过了。
loadrunner的工作原理
loadrunner的工作原理
LoadRunner是一款性能测试工具,它的工作原理可以分为以下几个步骤:
1. 脚本录制:使用LoadRunner中的Vugen组件,对被测系统进行录制。
在录制过程中,Vugen会生成脚本,记录用户对系统的操作和请求。
2. 脚本编写和定制:通过修改和补充录制的脚本,对测试场景进行定制化设置。
可以设置并发用户数、负载模式、延迟时间等参数。
3. 场景设计:根据测试需求和系统特点,设计测试场景。
可以包括负载测试、容量规划、瓶颈分析等多种场景。
4. 虚拟用户模拟:使用LoadRunner中的Controller组件,模拟多个虚拟用户同时对被测系统进行操作。
可以设置并发用户数、请求频率等参数。
5. 资源监控:使用LoadRunner中的Analysis组件,对被测系统的性能指标进行实时监控和数据收集。
可以监控CPU利用率、内存占用、响应时间等性能指标。
6. 报告生成和分析:根据测试结果生成测试报告,并对测试结果进行分析。
可以通过图表、表格等方式展示系统性能指标,帮助发现系统瓶颈和性能问题。
总的来说,LoadRunner的工作原理是通过录制用户操作生成
脚本,模拟多个虚拟用户进行并发操作,监控系统的性能指标,并生成报告和分析结果。
这样可以帮助测试人员评估系统的性能和可靠性,发现系统的瓶颈并提供优化建议。
loadrunner11使用代理录制app脚本的配置方法--CS系统也可以参考该方法录制
app愈发流行的现在,手机的app性能测试也出现了。
不多说了直接上正题。
首先,loadrunner12有了手机端app在手机端录制代码的,试过了,不好用等他们在完善程序吧。
我们要说的是通过loadrunner代理来录制代码的方法。
是这样loadrunner早就提供这种方法,就是其他客户端比如手机app把请求发到loadrunner 上再由loadrunner转给服务器端,这样loadrunner虽然不能直接运行app但是可以监控其数据交互从而录制内容。
大体网络拓扑是这样的:上面的是原来的网络图,下面的是代理录制的网络图,流程就是手机通过局域网把请求发送到LR11所在的电脑的某个端口上,LR11会监控这个端口然后把数据记下来在转发给服务器,服务器的相应发回LR之后LR记下来在通过这个端口发给手机,中间数据交互LR记住了也相当于录制了。
所以我们需要1手机和LR所在电脑应该能够通过内网连接,并且手机能够往一个电脑特定端口发数据。
2 电脑安装loadrunner 并且设置代理服务的远端为被测软件地址端口号,近端端口与手机代理端口一致。
基本流程是以下几步1首先有一台安装loadrunner的电脑本次以LR11为例,然后这台电脑上还得能提供无线网络比如插个360wifi。
如图所示,我的电脑的,这里egg1就是我的无线wifi的名字以及ip地址2然后我们需要启动Loadrunner了这里我们选择win32application然后启动的程序是loadrunner目录下bin文件夹下面的wplus_init_wsock.exe 这个是loadrunner自带的代理程序,但是这还没完,我们点击Option到polt mapping下面,右侧最上面找到socket level data,然后选择New Entry上面填写的是目标地址|端口,就是被测软件所在地址,下面是loadrunner监控本机的端口就是手机把数据发到这个端口上,记得下面填一个不常用的8899啥的,以免冲突。
LoadRunner编写Socket协议脚本方法
LoadRunner编写Socket协议脚本⽅法转载⾃:本⽂主要介绍使⽤LoadRunner⼿⼯编写Windows Socket协议测试脚本的⽅法。
通过LoadRunner编写Windows Socket协议测试脚本,总体说来,⽐较简单。
就像把⼤象放进冰箱⼀样,总共分三步:第⼀步:把冰箱门打开//建⽴到服务端的连接rc = lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=128.64.64.23:8988", LrsLastArg);if (rc==0)lr_output_message("Socket was successfully created ");elselr_output_message("An error occurred while creating the socket, Error Code: %d", rc);第⼆步:把⼤象装进去lrs_send("socket0", "buf0", LrsLastArg); //往"socket0"发送"buf0"中的数据lrs_receive("socket0", "buf1", LrsLastArg);//将"socke0"中返回的数据存放到"buf1"中第三步:把冰箱门带上//关闭连接lrs_close_socket("socket0");整个脚本关键是在第⼆步,要把这么⼀头⼤象装到冰箱⾥可不是件容易的事情,我们要对传送的数据做⼀些处理才⾏。
LR会把你发送的数据包内容写到data.ws这个⽂件中,那么我们在此也同样应该把数据写到data.ws中去。
LoadRunner基本使用流程(图文)
上海祥殷信息技术有限公司2012年12月一、录制脚本1. 打开2. 点击编辑脚本3. 点击按钮新建脚本4. 弹出对话框,选着web(http/html)5. 输入网址,点击ok6. 录制脚本,录制结束后,点击一下按钮停止录制7. 录制成功后,生成脚本8. 点击如下按钮回放脚本9. 点此按钮,可新增action10. 点此按钮可以进行录制和回放设置11. 弹出的参数话界面一般回放设置下这里就好12. 点击图中图表设置参数化13. 弹出的设置界面,主要设置红色区域的几个地方14. 下图按钮为脚本调试15. 下图按钮为设置时间的其实点和结束点的按钮16. 下图两个按钮分别为与hp 质量管理工具 ALM 连接按钮和创建场景按钮17.插入事件,分别表示时间的开始和结束事件插入成功:18. 设置集合点二、创建场景1.在vugen中点击图中按钮创建场景2.弹出编辑框,设置场景,设置完成后点击ok第一个是目标场景第二个是手动场景其中手动场景可以设置加载虚拟用户数3.双击这里选着加压主机4.选择主机ip,和系统5. 点击ok 关闭对话框图中红色区域是选着场景执行方式:模拟真是环境还是基于时间表模拟6. 下图中:1) Schedule by 选项表示加载方式,基于脚本还是基于组2) Run mode 表示加载模式:分别表示模拟真实情况和还是基于场景7.双击下图红色区域,可选着加压力度8.双击红色区域,可设置压力下完运行时间9.双击下面红色的内容,可以选着虚拟用户停止的模式10.弹出设置选项框,可以选着停止的方式全部一下停止每多少时间停止多少个的方式停止11.点击run,来到执行界面12.在执行界面点击start Scenario,开始跑场景13.下图为执行过程中14. 场景跑完后显示如图界面:其中右边红色区域是运行过程中监控服务器的资源占用率等等的一些信息,在左边还可以添加或查看其他的一些图标15.点击下面按钮也能添加加压主机16.经15后,弹出选项框,点击add可以输入主机信息17.设置ip欺骗三、结果分析1.点击下面按钮,进入分析结果界面2.分析界面如下:3.点击这里的图表可以查看各结果的,然后对结果进行分析4.按照如下操作可以增加新的图表5.右键图表选着合并图表,可以合并分析6.合并后的图表。
loadrunner之编写socket脚本
loadrunner之编写socket脚本要进行socket协议的操作,就必须先进行脚本的编写,socket脚本主要有四部分组成:创建socket连接在操作数据之前必须先与服务器建立起连接,可以使用类似于下面的方法:lrs_create_socket("socket1","TCP", "RemoteHost=192.1.3.22:8080", LrsLastArg);发送数据连接上服务器之后,就可以进行发送数据了,发送数据的操作如下:lrs_send("socket1", "buf0", LrsLastArg);接收数据在一般情况下,发送数据后都会返回一个数据,接受数据的方法如下:lrs_receive("socket1", "buf1", LrsLastArg);关闭socket连接凡事有始有终,事情结束还得关闭连接,方法如下:lrs_close_socket("socke1");大家可能注意到发送和接收的方法里有“buf0,buf1“,这些是发送和接收的数据包,这些数据包保存在data.ws文件中,格式如下:———————————————————–;WSRData 2 1send buf0 38"$<M><C>19000;4;</C></M>^""\x00"recv buf1 94"$<M><C>19000;0;192.1.3.22;8080;20060929102987be89581b94424af8d55378a421c""dfc</C><D></D></M>^""\x00"-1send或recv表示数据的方向,buf0表示数据包的描述,与脚本中的内容对应,38表示发送数据的长度,94表示接收数据的长度,另外接收数据的长度需要正确,因为接收数据时,数据的长度会进行校验,在错误的情况下,会影响接收时间,导致transaction时间错误.buf数据可以接受变量,当返回数据变化时,可以使用变量的方式解决。
LoadRunner脚本编写
LoadRunner脚本编写引⾔:针对接⼝进⾏脚本编写,解决录制脚本的局限。
第⼀步:打开LR,选择协议Web Services。
第⼆步:在action⾥进⾏脚本编写。
登陆:1int HttpRetCode_login,HttpRetCode_add;//定义两个变量,必须放在最前⾯。
23//*******************⽤例1*******************45 web_reg_save_param("result_login","LB=","RB=","Search=headers",LAST); //从响应数据获取指定内容67//post请求使⽤web_submit_data8 web_submit_data("web_submit_data",9"Action=http://*******/login",10"Method=POST",11"TargetFrame=",12"Referer=",13"Mode=HTTP",14 ITEMDATA,15"Name=username", "Value=**", ENDITEM,16"Name=password", "Value=****", ENDITEM,17 LAST);1819//字符串编码转换20//lr_convert_string_encoding(lr_eval_string("{result_login}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"resultutf8");21 lr_convert_string_encoding(lr_eval_string("{result_login}"),"utf-8",NULL,"resultutf8");2223//获取参数resultutf8的值,并打印出来。
LoadRunner操作手册
LoadRunner操作手册1、LoadRunner操作,我们主要使用三大部分:Virtual User Generator、Controller、Analysis○1Virtual User Generator:录制脚本○2Controller:设置运行场景○3Analysis:分析2、首先我们打开Virtual User Generator,如图所示:打开后的界面:由于我们B/S大部分使用的协议为WEB(HTTP/HTML)(如果不是可以选择其他协议),所以我们选择协议为WEB(HTTP/HTML)然后单击OK。
下面我们就开始录制脚本了:单击工具栏上的Start Record按钮::在URL中输入你需要测试系统地址,Record Action中有三个Action:Vuser_init:用来初始化的,比如登陆该界面Action:用来记录你所测试业务的,比如输入用户名和密码登陆Vuser_end:比如退出设置后单击OK按钮,开始录制。
录制结束后保存。
3、然后打开Controller,如图所示:○1由于上次你有保存脚本,所以你打开后会列出你所录制的脚本:○2该界面包括两种方式操作方式:一种是自定义场景,用来制定测试目标不怎么明显的测试用列;一种是制定目标式场景,用来测试有确定目标的比如公司给出需要达到什么样的要求。
○3选择你所需要运行的脚本,单击add按钮或者双击该脚本,然后单击OK。
○4单击Edit Scenario Goal…按钮,可以制定你所需要运行的用户数、并发数、运行时间、持续时间等等⏹Ramp Up:意思是加压,一种是同时运行所有用户,一种是多少时间增加多少用户⏹Duration:持续时间,有三种:直到完成、加压完成后继续运行多少时间、一直运行下去。
⏹Ramp Down:减压,同时停止所有用户、多少时间停止多少用户。
⏹下面还有一个复选框,选择该选项可以增加精确度。
单击OK。
○5设置压力机:单击按钮,出现如图所示:然后单击Add,添加压力机:name:机器名Platform:操作平台,填入后单击OK,至此你的压力机设置成功,然后开启压力机:单击Connect,在Status的状态显示为:Ready。
loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
loadrunner简单使⽤——HTTP,WebService,Socket压⼒测试脚本编写使⽤loadrunner进⾏压⼒测试主要分两步,第⼀步是编写脚本(⽐较重点),第⼆步执⾏测试(配置都是在界⾯上点点就⾏了,当然我只的是⽐较简单的,能满⾜⽇常需要的),第三步分析结果(这⼀步⽐较⾼深,但是对于我来说能看懂简单的性能指标就OK了)。
所以这⾥就说⼀下脚本的编写,给未来再⽤到做参考。
Action(){int status;lr_start_transaction("send");web_reg_find("Search=Body",//这⾥说明在Body的范围内查找"SaveCount=ret_Count",//这⾥表⽰把返回值的个数放在变量ret_Count⾥"Text=mobile",//这⾥表⽰查找的内容是“mobile”LAST);status=web_url("Baidu_Search","URL= /s?wd=mobile","TargetFrame=Main","Resource=0","RecContentType=text/html","Mode=http",LAST );lr_output_message("Request Status:%d",status);lr_output_message("查找到的返回值个数:%d",atoi(lr_eval_string("{ret_Count}")));if (atoi(lr_eval_string("{ret_Count}")) > 0){//这⾥判断检查到的个数lr_output_message("Rec successful.");lr_end_transaction("send", LR_PASS);}else{lr_error_message("Rec failed");lr_end_transaction("send", LR_FAIL);}return0;}2.HTTP POST请求这个是在我们项⽬中⽤到的,发送POST请求,进⾏⾃然语⾔识别的,脚本如下:Action(){int status;lr_start_transaction("send");web_reg_find("Search=Body",//这⾥说明在Body的范围内查找"SaveCount=ret_Count",//这⾥表⽰把返回值的个数放在变量ret_Count⾥"Text=t",//这⾥表⽰查找的内容是“t”LAST);status=web_submit_data("trs","Action=http://192.168.77.185:9002/recognizeText",//地址"Method=POST",//POST请求"RecContentType=text/html","Mode=HTML",ITEMDATA,"Name=usercontent","Value=gprs",ENDITEM,//这⼀⾏表⽰传⼊⼀个参数usercontent,值为gprs"Name=Accept","Value=text/plain",ENDITEM,LAST);lr_output_message("Request Status:%d",status);if (atoi(lr_eval_string("{ret_Count}")) > 0){//这⾥判断检查到的个数lr_output_message("Rec successful.");lr_end_transaction("send", LR_PASS);}else{lr_error_message("Rec failed");lr_end_transaction("send", LR_FAIL);}return0;}3.WebService请求webservice请求的脚本建议通过可视化的⽅式添加1)引⼊webservice,注意wsdl后缀2)给⼊参填值3)给返回值指定存储到的变量中Action(){int status;lr_start_transaction("send");status=web_service_call( "StepName=getSupportCity_102","SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getSupportCity",//这⾥是我已经引⽤了webservice的名称及调⽤⽅法"ResponseParam=response","Service=WeatherWebService","ExpectedResponse=SoapResult","Snapshot=t1353067092.inf",BEGIN_ARGUMENTS,"byProvinceName=安徽",//这⾥是⼊参,参数名称:byProvinceName,值:安徽。
loadrunner的socket脚本
loadrunner的socket脚本#include "lrs.h"Action(){char *Data;int Size=0;int rc=0;//返回报文是否成功,判断值int msgOk=-1;char *position="";//返回报文是否成功标识char *passMsg="<pckgsq>0000<"; //需和服务端进行确认是否一定返回该字符串int receive_code;memset(&Data,0,8);//web_set_sockets_option("CLOSE_KEEPALIVE_CONNECTIO NS","1");//建立socket//rc=lrs_create_socket("socket0","TCP","RemoteHost=132.7.44.237:18003",LrsLastArg);rc=lrs_create_socket("socket0","TCP","RemoteHost=132.7.41 .67:18003",LrsLastArg);//rc=lrs_create_socket("socket0","TCP","RemoteHost=132.6.40.29:18003",LrsLastArg);if (0==rc) {lr_output_message("Socket was successfully created ");}else{lr_output_message("An error occurred while creating the socket, Error Code: %d",rc);}//开始事务lr_start_transaction("socket_trans");//发送数据lrs_send("socket0","buf0",LrsLastArg);//结束发送//lrs_disable_socket("socket0", DISABLE_SEND);//lrs_set_recv_timeout(60,0);//lrs_set_receive_option(EndMarker,StringTerminator,"</mes sage>");//lrs_set_recv_timeout(0,0);// lrs_set_recv_timeout(120,0);//lrs_set_recv_timeout2(10,0);//lrs_set_receive_option(EndMarker,BinaryStringTerminator," \X00");//接收服务端发回的数据receive_code=lrs_receive("socket0","buf1",LrsLastArg);//receive_code=lrs_receive_ex("socket0","buf1","NumberOfB ytesToRecv=16",LrsLastArg);//receive_code=lrs_save_param("socket0","buf1","wtbh",6,5 0);//获取最后返回的缓冲区的数据及其长度lrs_get_last_received_buffer("socket0",&Data,&Size);//获取passMsg在返回数据的位置position=(char *)strstr(Data,passMsg);msgOk=(int)(position-Data+1); //数组下标从0开始,因此加1以符合使用习惯//保存参数lrs_save_param_ex("socket0","user",Data,0,417,"ascii","new_ parameter");lrs_free_buffer(Data);//lr_output_message("The result's size is: %d.",Size);//lr_output_message("The receive code is: %d.",receive_code);//lr_output_message("The data socket server give is: %s",lr_eval_string("<new_parameter>"));//lr_think_time(0.010);//lr_end_transaction("socket_trans",LR_PASS);//根据msgOk的值,判断事务是否成功if (msgOk>0) {lr_end_transaction("socket_trans",LR_PASS);}else{lr_end_transaction("socket_trans",LR_FAIL);}//结束发送// lrs_disable_socket("socket0", DISABLE_SEND);//结束接收lrs_disable_socket("socket0", DISABLE_SEND_RECV);//关闭打开的socketlrs_close_socket("socket0");return 0;}---------data文件--------- ecif03_data.ws;WSRData 2 1send buf0 156"000156<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<message>\r\n""<head>\r\n""<prcscd>ecif03</prcscd>\r\n""</head>\r\n""<body>\r\n""<custno>115600000000229</custno>\r\n""</body>\r\n""</message>\r\n"recv buf1 417-1。
loadrunner 判断语句
loadrunner 判断语句
LoadRunner 是一款性能测试工具,它可以用来模拟和测量各种负载条件下的应用程序性能。
在 LoadRunner 中,判断语句通常用于在脚本中实现条件分支和逻辑控制。
判断语句可以帮助脚本根据特定的条件执行不同的操作,从而模拟用户在不同情况下的行为。
在 LoadRunner 脚本中,判断语句通常使用类似于 C 语言的语法来编写。
常见的判断语句包括 if 语句、else 语句和 switch 语句。
这些语句允许脚本根据条件的真假执行不同的代码块。
例如,可以使用 if 语句来实现条件判断,语法类似于:
javascript.
if (condition) {。
// 如果条件为真,执行这里的代码。
} else {。
// 如果条件为假,执行这里的代码。
}。
另外,LoadRunner 还提供了一些内置函数和方法,可以用于在脚本中进行更复杂的条件判断和逻辑控制。
比如 lr_eval_string 函数可以用于在脚本中执行字符串表达式并返回结果,
lr_get_attrib_string 函数可以用于获取对象的属性值并进行判断等等。
总的来说,在 LoadRunner 中,判断语句是非常重要的,它们可以帮助我们编写更加灵活和智能的脚本,以更好地模拟真实用户的行为,从而更全面地评估应用程序的性能。
希望这个回答能够帮助你更好地理解在 LoadRunner 中如何使用判断语句。
手动编写一个简单的loadrunner脚本
⼿动编写⼀个简单的loadrunner脚本loadrunner除了⾃动录制脚本外,还可以⼿动编写脚本,通过右键+inset step添加步骤,还可以⼿动添加事务,集合点等下⾯是⼀个简单的Action脚本,服务是运⾏在本机的flask服务:Action(){//集合点---可选步骤//等待---可选步骤//获取所有的发帖列表--单接⼝(⾃⼰本地实现的⼀个flask服务)//开始事物lr_start_transaction("getList");// 业务逻辑// 0. 注册需要获取的参数(loadrunner的注册机制,需要在发送之前注册接收消息的变量)web_reg_save_param("count","LB=\"count\":","RB=}",LAST);// 1.发消息(可以替换成⾃⼰能访问的URL)web_custom_request("getList","URL=http://127.0.0.1:8080/getAllArticleList?token={token}","Method=GET",LAST);// 2.结果验证(获取结果需要使⽤到注册机制)// 结束事物if (strcmp(lr_eval_string("{count}"),"3")==0){//正常结束lr_end_transaction("getList", LR_PASS);}else{// 异常结束lr_end_transaction("getList", LR_FAIL);}// 过程中可以记录⽇志--可选步骤return0;}。
Loadrunner脚本编程(4)-数据类型操作和字符串操作
Loadrunner脚本编程(4)-数据类型操作和字符串操作一,数据类型转换没有使用过C编程的LoadRunner脚本编写者会发现在数据类型转化方面比较困难。
下面介绍这方面的知识。
1.相似函数的输出在不同的位置象很多C函数一样,使用atoi函数的结果即为返回值如intResult = atoi( charY );而:itoa的返回结果为第二个参数。
itoa( intX, charY, 10);第一个参数是需要转换的数字,第二个参数是转换后存储的字符数组,需要注意的是数组必须定义为固定的长度,如:char chary[20];数组的最大长度为32064(32K),否则会出现“too many variables”编译错误。
如果定义为变长的字符串如char *charY,则程序会出错。
第三个参数不是数组的长度,而是数字的基数,10进制是最常用的,其他还有二进制,八进制,十六进制。
2.有一些函数实现了同样的功能itoa不是一个标准的ANSI C函数但是是C的stdlib.h中的一个函数。
所以它不被包括在unix机器上的LibC中。
我们可以使用标准的sprintf函数来代替:sprintf(charY,“%d”,intX);sprintfWrites formatted output to a string.3.是用%X来转换一个十六进制数int intNum;sscanf(“ffff”,“%X”,&Num);lr_output_message(“%d”,intNum);// 打印65535 ,ffff的整数值sscanfReads formatted input from a string.4.从文本中提取数字的规则如果第一个字符不是数字或者为空,atoi返回0,即“e24”会返回0atoi 转换一个非数字的字符会返回组成这个字符的数字,如“-3.2”返回-3.0。
“123XXX345”返回123。
loadrunner语法
loadrunner语法LoadRunner是一种广泛使用的性能测试工具,它主要用于测试计算机系统在高负载条件下的性能。
LoadRunner通过模拟大量用户操作,对系统进行压力测试,以评估其在实际工作负载下的性能表现。
以下是LoadRunner的一些基本语法:1. 启动场景:```LoadRunner > start scenario```2. 停止场景:```LoadRunner > stop scenario```3. 设置场景参数:```LoadRunner > set sc_param_name=sc_param_value```4. 设置事务参数:```LoadRunner > set trans_param_name=trans_param_value ```5. 设置虚拟用户参数:```LoadRunner > set vuser_param_name=vuser_param_value ```6. 启动虚拟用户:```LoadRunner > start vuser```7. 停止虚拟用户:```LoadRunner > stop vuser```8. 添加事务:```LoadRunner > add transaction```9. 删除事务:```LoadRunner > delete transaction```10. 设置事务权重:```LoadRunner > set transaction weight11. 获取性能指标:```LoadRunner > get measure ```12. 设置性能指标阈值:```LoadRunner > set threshold ```13. 监控性能指标:```LoadRunner > monitor```14. 生成报告:LoadRunner > report```15. 退出LoadRunner:```LoadRunner > exit```以上是LoadRunner的一些基本语法。
性能测试脚本规范
LoadRunner典型之阳早格格创做东硬集团股份有限公司移动互联网职业部尝试部变动履历状态:新建、减少、建改、简略.1文档证明1.1背景及手段编写那篇文档的手段用于典型咱们尝试部LoadRunner 足原编码风格,使大家不妨养成一个佳的编程习惯,使得正在凡是处事中编写的代码可读性更强,“矮级过失”更少,更易于维护以及他人教习,而且期视通过那些面面滴滴的齐力进而普及咱们的产品本量,落矮危害.该典型的战C谈话相关的部分,基原真足借镜了林钝博士的下本量C++编程那原书籍内里的真量.果此提议大家教习一下那原书籍,是启垦战尝试皆需要教习的一原佳书籍.该典型后里减少了LoadRunner足原中时常使用的例子,正在本量处事中,基原时常使用的函数以及写法皆已经包罗正在内里.1.2注意事项2足原编写2.1命名准则●【准则2-1-2】命名准则尽管要按照“一针见血、视文死义”的八字计划.●【准则2-1-1】变量名应当曲瞅且不妨拼读,可视文知意,没有必举止“解码”.变量名最佳采与英文单词汇大概其拉拢,便于影象战阅读,切忌使用汉语拼音去命名.步调中的英文单词汇普遍没有会太搀纯,用词汇应当准确.●【准则2-1-2】步调中没有要出现仅靠大小写区别的相似的变量名.比圆:int x, X; // 变量x 与 X 简单殽杂●【准则2-1-3】步调中没有要出现真足相共的局部变量战局部变量,纵然二者的效率域分歧而没有会爆收语法过失,但是会使人误解.●【准则2-1-4】变量的名字应当使用“名词汇”大概者“形容词汇+名词汇”.其余,对付于大家时常使用的、习惯成雅的形容词汇,不妨采与缩写.uint32 value; //名词汇uint32 n_val; //形容词汇+名词汇,n是new的缩写●【准则2-1-5】尽管预防名字中出现数字编号,如val1,val2等,除非逻辑上的确需要编号.那是为了预防步调员偷懒,没有肯为命名动脑筋而引导爆收偶尔思的名字(果为用数字编号最圆便).●【准则2-1-6】局部变量加前缀g_(表示global)建饰,单词汇之间采与下划线分开.比圆:Char *g_msg_pool;●【准则2-1-7】函数名尽管采与“模块名+动词汇+名词汇”(动宾词汇组)大概者“模块名+名词汇+动词汇”的办法命名,尽管搞到根据函数名能大概精确函数所完毕的功能.比圆:boolcomm_hash_create(…) //模块+名词汇+动词汇●【准则2-1-8】宏常量名必须局部采与大写的字母,单词汇之间使用下划线分开.#define DEF_BUF_LEN 150 //宏常量2.2要领化代码●【准则2-2-1】足原应采与缩进风格编写,每层缩进使用一个造表位(TAB),类定义、要领皆应顶格书籍写;●【准则2-2-1】左花括号要另起一止,没有克没有及跟正在上一止的止终;●【准则2-2-2】一个变量定义占一止,一个语句占一止;●【准则2-2-3】对付独力的步调块之间、变量证明之后必须加空止;●【准则2-2-4】对付于较少的语句(>80字符)要分成多止书籍写,少表白式要正在矮劣先级支配符处区别新止,支配符搁正在新止之尾,区别出的新止要举止适合的缩进,使排版整齐,语句可读;●【准则2-2-5】循环、推断等语句中若有较少的表白式大概语句,则要举止符合的区别;●【准则2-2-6】正在结形成员赋值等情况,等号对付齐,最少留一个空格;●【准则2-2-7】若函数大概历程中的参数较少,则要举止适合的区别.●【准则2-2-8】形参的排序风格:最常使用的参数搁正在第一位;输进参数列表应搁正在输出参数列表的左边;将通用的参数搁正在特殊的参数的左边2.3Vuser●【准则2-3-1】足原越小越佳.便像写code一般,没有要太少,那样易于维护也易懂.尽管搞到一个功能写一个足原.如果那些功能是连绝有序的,必须先搞上一个,下一个动做才搞举止,便只可搁正在所有了.●【准则2-3-2】对付于正在足原中时常使用的函数,需要举止抽与,搁到博门的.h中举止定义真止.●【准则2-3-3】能用到下档协议的,没有要使用下层协议.●【准则2-3-4】常常将登陆贸易搁到init内里;贸易搁到action内里;退出搁到end内里●【准则2-3-5】正在足原中,必须自己定义工做,没有允许使用默认工做.●【准则2-3-6】正在足原中,如果有登陆战退出操搞,也必须声明工做.●【准则2-3-7】足原称呼,工做称呼、参数称呼要搞到睹名知义.●【准则2-3-8】对付于socket需要精确是少对接仍旧段对接●【准则2-3-9】socket编程必须关关系统的buffer●【准则2-3-10】对付于socket,如果能屡屡返回的少度决定,那么一定使用data.ws文献中指定特定少度的字符.可则才树坐担当超常常间.●【准则2-3-11】对付于操搞二进造,没有使用字符串操搞函数,需要使用内存函数.如memcpy代替strcpy3场景真止●【准则3-1】正在真止前,提议将所有的足原搁到当天的英文目录下,提议d:\script●【准则3-2】运止时需要关关系统的日志.●【准则3-3】运止时根据本量情况树坐场景的思索时间●【准则3-4】运止时去掉每个action动做一个transaction 的统计●【准则3-5】对付于HTTP协议尝试,精确合理树坐慢存战术●【准则3-6】正在真止时屡屡将真止的截止搁到当天的英文目录下,提议d:\result●【准则3-7】真止单贸易尝试最少需要20分钟;真止混同场景尝试最少需要30分钟●【准则3-8】对付于尝试使用背载均衡战术的系统,需要思量背载均衡的规划,以便决断是可采与IP捉弄.●【准则3-9】正在所有尝试真止历程中,使用excel记录所有真止历程,更加是正在真止历程中新安排的场景.4一些体味1、能用简朴要领真止的,别用搀纯的真止.更加是获与loadrunner尝试数据模块.2、联系函数使用web_reg_save_param("attributeChannelsXml", "LB=<channels>", "RB=</channels>",LAST);sprintf (tmp, "<channels>%s</channels>",lr_eval_string("{attributeChan nelsXml}"));lr_save_string(tmp, "attributeChannelsXml");3、HTTP协议查看面a)、查看HTTP应问消息的BODY部分web_reg_find("Text=Welcome", LAST);b)、查看HTTP应问消息的Header部分web_save_header(RESPONSE,"response");web_url("John_Willoughby","URL=http://Combe_/portal/index.asp","TargetFrame=_TOP",LAST);if( strstr(lr_eval_string("{response}"), "OK") != NULL ){//PASS}else{//FAIL}4、使用hex_print函数,举止二进造报文调试.char* hex_print(void *hexbuf, int bufsize){int i;unsigned char *buf_str;unsigned char *x;unsigned char tmp[1];buf_str = (unsigned char *)malloc(bufsize * 4 + 1);x = buf_str;memset(x, 0, bufsize*4+1);for(i=0;i<bufsize;i++){sprintf(x, "%02x ",((unsigned char *)hexbuf)[i]);x = x+3;}lr_log_message("%s",buf_str);return (char *)buf_str;}5、要领化输出函数sprintf(tmp, "<channels>%s</channels>",lr_eval_string("{attributeChann elsXml}"));sprintf(buffer, "<item>{m_Channel_%d}</item>",i_loop+1);sprintf(runlog.sendTime, "%s%c", ctime(&currTime), '\0');sprintf(version, "%02x",((unsigned char *)recieve_buffer)[2+total_loop]);6、XML的操搞i_address_channel = lr_xml_get_values("XML={attributeAddressesXml}","ValueParam=m_address_channel","Query=/addresses/item/channel","SelectAll=yes",LAST);i_address_address =lr_xml_get_values("XML={attributeAddressesXml}","ValueParam=m_address_address","Query=/addresses/item/address","SelectAll=yes",LAST);for (i_loop = 0; i_loop < i_address_channel; i_loop++) {sprintf(buffer,"<item><channel>{m_address_channel_%d}</ channel><address>{m_address_address_%d}</address></ite m>",i_loop+1,i_loop+1);strcat(tmp,buffer);}7、擅于使用lr_save_string战lr_eval_string函数lr_save_string(ssic, "SSIC");lr_eval_string(“SSIC”)8、内存函数使用buffer = (char *)malloc(content_len * sizeof(char));memset(buffer, 0, content_len);loop = loop + 2;sprintf(x, "%c", 0xA0);memcpy(buffer + loop, x, 1);loop = loop + 4;sprintf(x, "%c", 0x05);memcpy(buffer + loop, x, 1);loop = loop + 3;free(buffer)9、字符串函数使用if (strcmp(lr_eval_string("{currentWorkMode}"),"3")!=0) { lr_set_transaction_status(LR_FAIL);lr_end_transaction("登陆", LR_AUTO);return 1;}strcat(tmp,buffer);if( strstr(runlog.recvPacket, runlog.Hrst) != NULL ) {runlog.Frst = "Pass";result = TRUE;}else{runlog.Frst = "Fail";result = FALSE;}(char* ) malloc(sizeof(char)* (strlen(tmpStr)+strlen(ipport) + 1) );10、文献操搞sprintf(filepath, "..\\runlog\\result.txt%c",'\0');if ( (fp = fopen(filepath, "at+b")) == NULL){lr_message("open logfile failed!\n");return -1;}sprintf(strbuf,"<%s> %s %s%c", strtime, scriptName, result, '\0');fprintf(fp, "%s\r\n", strbuf);free(strbuf);fclose(fp);11、函数参数传播a)、函数传进参数返回真量char *checkBuf;调用函数:socketSendRecv(socketName, "buf_Add_Buddy", 1, &checkBuf,1)函数真止:/*****************************************************************函数称呼: socketSendRecv函数功能: 通过一个socket对接收支并接支数据输进参数:输出参数:状态:编码完毕************************************************* ******************/BOOL socketSendRecv(char* src_socket, char* buffer, int length, char** pRebuffer,int flag_parse){char *send_buffer_xml;int num_input;char *send_buffer_mcp;int send_len;char *recieve_buffer_mcp;int recsize2;char *recieve_buffer_xml;int recvieve_len;BOOL ret;……paserMcptoXml((unsigned char*)recieve_buffer_mcp,&recieve_buffer_xml,&recvieve_len,r ecsize2);*pRebuffer= (char* ) malloc(sizeof(char)*strlen(recieve_buffer_xml) + 1); memcpy(*pRebuffer, recieve_buffer_xml, strlen(recieve_buffer_xml));*(*pRebuffer+strlen(recieve_buffer_xml)) = '\0';free(recieve_buffer_xml);free(recieve_buffer_mcp);return ret;}b)、函数返回值,返回字符串调用函数:char *str = NULL;str = GetMemory3(100);函数真止:char *GetMemory3(int num){char *p = (char *)malloc(sizeof(char) * num);return p;}12、搜集函数操搞TCPlrs_create_socket("socket", "TCP", "LocalHost=0", "RemoteHost={remoteHost}", LrsLastArg);lrs_set_send_buffer("socket", buffer, content_len);lrs_length_send("socket", "buf0", 0, LrsLastArg);lrs_receive("socket", "buf1", LrsLastArg);lrs_get_last_received_buffer("socket", &recbuf, &num_input);UDPlrs_create_socket("socket","UDP","LocalHost=0","Remote Host={remoteHost}", LrsLastArg);lrs_set_send_buffer("socket", buffer, 52);lrs_send("socket", "buf0", LrsLastArg);lrs_receive("socket", "buf1", LrsLastArg);lrs_get_last_received_buffer("socket", &recbuf, &num_input);13、自定义启拆函数char* substr(char* srcstr, char* lstr, char* rstr); //对付字符串举止截与int searchstr(char* srcstr, char* lstr, char* rstr, char **pSubstr); //正在字符串内所搜指定的字符串int searchstrN(char* srcstr, char* lstr, int len, char **pSubstr); //正在字符串内所搜指定的字符串int splitStringByChar(char *bfword,char sep,char *bhword,char *source);char * Trim(char *source); //简略字符串的启初战中断部分的空格BOOL searchstrM(char* srcstr, char* lstr, char* rstr, PSTRLIST* pList); //根据特定字符对付字符串举止分开。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章LoadRunner脚本编写LoadRunner生成脚本的方式有两种,一种是自己编写手动添加或嵌入源代码;一种是通过LoadRunner提供的录制功能,运行程序自动录制生成脚本。
这两种方式各有利弊,但首选还是录制生成脚本,因为它简单且智能化,对于测试初学者来说更加容易操作。
但是仅靠着自动录制脚本,可能无法满足用户的复杂要求,这就需要手工添加函数,进行必要的手动关联或在函数中进行参数化来配合,增强脚本的实用性。
手写添加增强脚本的独特之处在于:1.可读性好,流程清晰,检查点截取含义明确。
业务级的代码读起来总比协议级代码更容易让人理解,也更容易维护,而且必要时可建立一个脚本库。
而录制生成的代码大多没有维护的价值,现炒现卖。
2.手写脚本比录制的脚本更能真实地模拟应用运行。
因为录制的脚本是截获了网络包,生成的协议级的代码,而略掉了客户端的处理逻辑。
3.手写脚本比录制脚本更能提高测试人员的技术水平。
LoadRunner提供了Java user、VB user、C user等语言类型的脚本,允许用户根据不同的测试要求自定义开发各种语言类型的测试脚本。
增强脚本的好坏关系到这个脚本是否能在实际运行环境中更真实地进行模拟操作。
至于具体使用哪种方式来生成脚本,还应该以脚本模拟程序的真实有效为准。
例如,有些程序只需要执行迭代多次操作,没有特殊要求,选择自动生成的脚本就可以了;有些程序需要加入参数化方可满足用户的要求,此时应该使用增强的手工脚本。
再就是结合项目进度、开发难易程度等因素综合考虑。
3.1 插入检查点在进行Web应用的压力测试时,经常会有页面间数据传递的操作,如果做性能测试时传递次数逐渐增多,页面间就会发生传递混乱的情况,或者客户端与服务端数据传输中断或不正确的现象。
为了解决这些问题,LoadRunner提供了在脚本中插入检查点的方法,就是检查Web服务器返回的网页是否正确。
在每次脚本运行到此检查点时,自动检查该处的网页是否正确,省去执行结束后人工检查的步骤和时间,进而加快了测试进度。
插入检查点的方法,在工作原理上说就是在VuGen中插入"Text/Image"检查点。
这些检查点验证网页上是否存在指定的Text或者Image,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。
VuGen在进行Web测试时,有"Tree View"和"Script View"两种视图方式。
前面我们见到的一直都是"Script View",但在插入"Text/Image"检查点时,使用"Tree View"(树视图)视图方式会比较方便。
这种视图之间切换,可以通过菜单或者工具栏的方式进行,如图3-1所示。
图3-1 切换至"Tree View"视图现在切换到TreeView,如图3-2所示。
图3-2 TreeView插入检查点的步骤比较简单,既可以在录制过程中添加"Text/Image"检查点,也可以在录制完成后进行,推荐使用录制过程中添加"Text/Image"检查点的方式。
首先在树形菜单中选择需要插入检查点的项目,单击鼠标右键,选择将检查点插入进去。
如果在该操作执行前检查,则选择"Insert Before",在该操作执行后检查则选择"Insert After",如图3-3所示。
图3-3 插入检查点然后系统将弹出如图3-4所示的对话框,选择"Text Check"(这里以Text检查点为例说明)。
单击"OK"按钮后,会出现"Text Check Properties"对话框,如图3-5所示。
图3-4 选择检查点类型图3-5 检查点的属性配置然后切换到"General"选项卡页上(如图3-6所示),在"Step Name"的文本框中输入该操作的步骤名称(该名称应该尽量能反映该操作要搜索的对象)。
图3-6 输入检查点的名称单击"确定"后,即可完成添加"Text检查点"的任务。
添加"Image"检查点的操作步骤和"Text"检查点基本相同,在此仅仅对"Image Check Properties"对话框与"Text Check Properties"的不同之处进行说明,其他的项目和"Text"检查点的方法类似,可以参考前面的内容,不再一一进行介绍。
需要在"Image Check Properties"对话框中输入图片的提示信息和相对路径,如图3-7所示。
图3-7 Image检查点的属性配置当然VuGen还允许插入其他类型的检查点函数,比如Web_reg_find、Web_global_verification等。
而且也可以对搜索Text/Image值的参数化,这里就不再一一说明。
如果Web窗体中包含有JavaScript脚本,那么在Tree View中显示可能会有问题,要解决这个问题,可以在"General"选项中进行适当设置。
单击"Tools"菜单选择"General Options",如图3-8所示。
进入图3-9所示的设置窗口,切换到"Correlation"选项卡上,选中"Enable Scripting and Java applets on Snapshots viewer"的复选框即可。
单击"OK"后,设置完毕。
图3-8 选择"General Options"图3-9 "General Options"设置3.2.1 参数化定义3.2 设置参数化方法让所有Vuser都使用相同的数据来运行,对系统造成的压力与实际情况会有所不同。
例如,测试一个网站系统时使用了100个Vuser同时进行登录网站后台的并发操作。
我们在录制脚本以后没有修改脚本数据信息,所有Vuser的Session(会话)数据信息都完全一模一样。
而此网站系统为了防止黑客的攻击已经禁止一个用户多次登录的系统后台的操作。
此时的测试过程将无法展开。
为了解决这个问题,让系统更加真实地模拟多用户使用的实际环境,LoadRunner提供了对脚本进行参数化输入的功能。
所谓的脚本参数化,就是针对脚本中的某些常量,定义一个或多个包含数据源的参数来取代,让场景中不同的Vuser在执行相同的脚本时,分别使用参数数据源中的不同数据代替这些常量,从而达到模拟多用户真实使用系统的目的。
3.2.1 参数化定义如果用户在录制脚本过程中,填写并提交了一些数据(如增加数据库记录等),这些操作都被记录到了脚本中。
当多个Vuser运行脚本时,如果对这些数据不加改动直接提交,提交的肯定都是相同记录,非但与实际运行情况不符,还有可能引起冲突。
为了模拟更加真实的环境,可以使用动态参数输入的方法。
在用户脚本中引入参数,不仅简化了脚本,还可以使用不同的数值来测试。
例如,如果搜索不同名称的产品,仅需要写一个带参数的提交函数。
在回放的过程中,传递不同的参数值就可以了。
录制业务流程时,VuGen生成一个由函数构成的Vuser脚本。
函数中参数的值是录制期间使用的实际值。
例如,在操作Web应用程序时录制了一个Vuser脚本,用于在数据库中搜索标题"UNIX"。
VuGen生成下列语句,如图3-10所示。
图3-10 脚本示例使用多个Vuser和迭代来重播该脚本时,如果不想重复使用相同的值"UNIX",那么,可以用参数来替换该常量值,如图3-11所示。
图3-11 脚本参数化示例然后,生成的Vuser使用指定的数据源中的值来替换参数。
该数据源可以是一个文件或者内部生成的变量。
参数化包含以下两项任务:(1)在脚本中用参数取代常量值。
(2)设置参数的属性以及数据源。
注意:参数化只可以用于一个函数中的参量,但不能用参数表示非函数参数的字符串。
另外,并不是所有的函数都可以参数化的,例如关联函数就不能参数化。
关于函数,在以后的章节还要进行详细的介绍。
3.2.2 创建参数创建参数有两种方式。
1.在脚本视图中创建。
选择一个字符串并单击鼠标右键,在菜单中选择"Replace with a parameter"(替换为新参数),如图3-12所示。
2.在树视图中创建。
选择要参数化的步骤,并从右键菜单中选择"Properties…"(属性),如图3-13所示。
图3-12 选择"Replace with a parameter"选项图3-13 选择"Properties"将打开相应的"Submit Data Step Properties"(提交数据步骤的属性)对话框,如图3-14所示。
图3-14 "Submit Data Step Properties"对话框单击要参数化的参数旁边的"ABC"图标,打开"Select or Create Parameter"(选择或创建参数)对话框。
在"Parameter name"框中输入参数的名称,或从列表中选择一个现有的参数名。
从"Parameter type"列表中选择一个参数类型。
可用的类型有:日期/时间、文件、组名、迭代编号、负载生成器名、随机编号、唯一编号、用户定义的函数或Vuser ID等。
3.2.3 参数类型属性当选择好参数类型以后,对其属性进行设置,在图3-15的对话框中单击"Properties",将根据不同的参数类型出现不同的对话框,下面将一一介绍。
图3-15 "Select or Create Parameter"对话框1."Date/Time"(日期/时间)参数类型:其属性对话框如图3-16所示。
"Date/Time"类型用当前的日期和/或时间替换参数。
要指定日期/时间的格式,可以从菜单列表中选择,或者指定实际需要的格式。
该格式应该与脚本中录制的日期/时间格式相对应。
还可以单击该对话框中相应的按钮对格式进行添加、删除、还原等操作。