一 安装地址详情见
https://www.cnblogs.com/kakaln/p/9834725.html
二 loadrunner详细介绍
⑴功能:LoadRunner是一种适用于许多软件体系架构的自动负载测试工具,从用户关注的响应时间、吞吐量,并发用户和性能计数器等方面来衡量系统的性能表现,辅助用户进行系统性能的优化。
⑵原理:LoadRunner通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,优化性能和加速应用系统的发布周期。
⑶组成:LoadRunner主要包括三个前台功能组件,分别为VuGen(虚拟用户脚本生成器)、Controller(测试控制器)和Analysis(结果分析器)。系统会自动调用后台功能组件LG(负载生成器)和Proxy(用户代理)来完成性能测试工作。
⑴Controller是执行负载测试管理和监控的中心。在这里指定具体的性能测试方案,执行性能测试,收集测试数据,监控测试指标。
⑵LG是模拟多用户并发访问被测试系统的组件。模拟多用户访问系统的前提是已经具备了虚拟用户脚本,VuGen是录制和编辑虚拟用户脚本的工具,录制好的脚本是不同语言表达的文本文件,在LG执行时被解析和执行。脚本录制和回放过程是在Proxy支持下完成的。
⑶Controller中的实时监控工具将测试过程中收集到的客户机、服务器和网络性能指标数据显示在监控页面上,便于测试人员对系统表现进行随时掌握。
⑷Analysis在测试完成后,对测试过程中收集到的各种性能数据进行计算、汇总和处理,生成各种图表和报告,为系统性能测试结果分析提供支持。
文本检查点:
用户需要检查一个文本的内容在回放的过程中是否正确,因此需要用到文本检查点。在录制过程中,选中一段文本,单击检查点按钮或找到相应位置Insert-New Step-Add Step加入函数;文本检查点函数通过web_reg_find()来实现,它是一个注册型函数,一定要写在请求前,一定要出现在检查文本之前。
事务:
事务具有原子性、一致性、隔离性和持久性特性。在LoadRunner中主要是为了度量服务器的性能,帮助用户统计相应时间。事务的开始函数lr_start_transaction()和结束函数lr_end_transaction(),通过回放脚本观察执行日志,看事务的执行情况
参数化:
为了更加真实的模拟实际环境,需要各种各样的输入,所以使用参数化。参数化的两项任务:①用参数取代常量值;②设置参数的属性以及数据源
关联:
在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法叫关联。
①自动关联LoadRunner参数化,两种机制为:一种是LoadRunner通过对比录制和回放是服务器响应的不同而提示用户是否进行关联。另一种是LoadRunner自带的自动关联,在录制脚本时,会根据这些规则自动创建关联。
②手动关联,关联函数web_reg_save_param是一个注册型函数,我们需要告诉vugen你下面的请求返回是需要被处理的,该函数必须写在我们的请求前
三 loadrunner中的一些基础配置
其他的详细可以参考如下 参考手册
四 脚本录制
点击创建脚本
增加事务用例的开头结尾
五 脚本的调整
脚本录制完成之后 由于脚本中产生的都是死数据 我们主要有以下两种方式进行脚本的 参数化调整
1 自动关联
1)开启自动关联的一些配置
2)然后正常的录制脚本 (拿登录举例子) 比如使用账号 userName进行录制
3)录制完成之后
先进行跑一下
4)选择菜单栏Vuser —> Scan Script for Correlations (ctrl + F8 )弹出下面窗口
点击Yes等待几分钟
然后可以在下面选择出现的需要调整的参数
此自动关联只能得到相同参数的不同的返回值,对于不同的参数得到的变化的返回值 无法识别出来
自动增加的 参数化的操作 效果图如下
个人建议 对loadrunner脚本并且业务了解的话,可以自己直接调整 脚本中的数据 增加相关函数
2手动关联以及预关联
详情请参考https://www.cnblogs.com/fnng/archive/2013/03/10/2952682.html
此方案没有进行验证,我验证之后会进行修改博客
下面是参数化的一些相关介绍以及配置
默认可以增加100个参数,如果需要增加的话可以调整
C:\HP\LoadRunner\config
vugen.ini 文件中的
MaxVisibleLines=需要显示的行数
关于参数几种不同的设置
六 关于语法的一些介绍
loadrunner 基于C 语言 支持C语言的全部语法
并且可以直接编写头文件进行引用
只需要 #include "lrun.h"
进行引入即可
说一下我理解的变量 变量参数 参数的区别
变量的定义
定义字符串 (字符串的内部存储是char数组)
char *str=NULL;
定义变量参数(在整个流程中 这个参数是全局有效的)
可以直接这样定义
lr_save_string(sessiondjxh,"param");
可以定义参数{param} 并且把 sessiondjxh 变量的值赋值给参数 param
这样在脚本中直接使用 {param} 就表示 参数中的内容了
经常使用到的一个 函数详解
Automation of software
loadrunner关联及web_reg_save_param方法浅析
一、什么是关联
关联(correlation):脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。也是把脚本中某些写死的数据,转变成动态的数据。
什么内容需要关联:当脚本中的数据每次回放都发生变化时,并且这个动态数据在后面的请求中需要发送给服务器,那么这个内容需要通过关联来询问服务器,获得该数据的变化结果。例如:
1.登录字符串。带有会话 ID 或时间戳等动态数据的登录字符串。
2.日期/时间戳。使用日期或时间戳或者其他用户凭据的任意字符串。
3.常见前缀。后跟字符串的常见前缀,如 SessionID 或 CustomerID
二、web_reg_save_param函数说明
语法:
int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);
参数说明:
1 ParamName: 存放得到的动态内容的参数名称
2 list of Attributes: 其它属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写
o Notfound: 当在返回信息中找不到要找的内容时应该怎么处理
o Notfound=error: 当在返回信息中找不到要找的内容时,发出一个错误讯息。这是缺省值。
o Notfound=warning: 当在返回信息中找不到要找的内容时,只发出警告,脚本也会继续执行下去不会中断。
o LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写。
o RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写。
o RelFrameID: 相对于URL而言,欲查找的网页的Frame。此属性质可以是All或是数字,该属性可有可无。
o Search : 返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。
o ORD : 说明第几次出现的左边界子串的匹配项才是需要的内容。该属性可有可无,缺省值是1。如为All,则将所有找到的内容储存起来。
o SaveOffset : 当找到匹配项后,从第几个字元开始存储到参数中。该属性不能为负数,缺省值为0。
o SaveLen :当找到匹配项后,偏移量之后的几个字元存储到参数中。缺省值是-1,表示一直到结尾的整个字串都存入参数。
例子
web_reg_save_param("login1Value","LB/IC={\"name\":\"result\",\"type\":\"\",\"value\":\"","RB/IC=\"","Search=Body",LAST);
//写在该请求前 LB表示左边界 IC表示不区分大小写 Serach=Body 表示搜索的内容是响应内容
web_custom_request("ajax.sword_2",
"URL=http://wmhpt.yhysc.tax.cn/wmhpt/login/ajax.sword?r=0.32111433109353404&rUUID=YUVdTxABuClBN1lc2p1MXmMgpa4vD6ep",
"Method=POST",
"Resource=0",
"RecContentType=text/json",
"Referer=http://wmhpt.yhysc.tax.cn/wmhpt/login/login.html#",
"Snapshot=t6.inf",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded; charset=utf-8",
"Body=postData={\"tid\":\"\",\"ctrl\":\"MH001LoginCtrl_handleLogin?rUUID=YUVdTxABuClBN1lc2p1MXmMgpa4vD6ep\",\"page\":\"\",\"data\":[{\"name\":\"clientip\",\"value\":\"\",\"sword\":\"attr\"},{\"name\":\"ishttps\",\"value\":\"false\",\"sword\":\"attr\"},{\"name\":\"userPwd\",\"value\":\"Abcd1234\",\"sword\":\"attr\"},{\"name\":\"userName\",\"value\":\"{name}\",\"sword\":\"attr\"},{\"name\":\"loginType\",\"value\":\"1\",\""
"sword\":\"attr\"},{\"name\":\"dlqd\",\"value\":\"zrr\",\"sword\":\"attr\"},{\"name\":\"tag\",\"value\":\"tagContent1\",\"sword\":\"attr\"}],\"bindParam\":true}",
LAST);
lr_output_message(lr_eval_string("{login1Value}"));//等于6表示登陆成功
//字符串的判断6是否在这里面
if(strstr(lr_eval_string("{login1Value}"),"6")==NULL){
lr_error_message("用户第一次登录失败");
return -1;//直接跳出该用户后续操作
}else{
lr_output_message("用户第一次登录成功");
}
//也可以使用该方式进行判断 ,将字符串转化为整数
if (atoi(lr_eval_string("{login1Value}"))==atoi("6")) {
lr_output_message("用户第一次登录成功");
lr_end_transaction("登录",LR_PASS);
} else
lr_end_transaction("登录",LR_FAIL);
一些常用 函数的介绍
strlen("str1") //返回字符串str1的长度
//判断字符串是否相等
strcmp("str1","str2") 如果相等返回0 否则返回非0
//字符串进行拼接
strcat("str1","str2");//将str2拼接到str1的后面
//复制
strcpy(toStr,fromStr);//将fromStr赋值到toStr里面
//日志输出
lr_message("%s",lr_eval_string("{sfzjhm}"));//只输出日志
lr_output_message(lr_eval_string("{login2Value}"));//输出日志并且记录所在行
//参数中文需要进行转换URL编码
参数进行url编码 (只有中文特殊字符会被变为url编码 其他的不会进行改变)
方法1 使用web_reg_save_param()函数中的 "Convert=HTML_TO_URL"
web_reg_save_param("swrysfmc2","LB/IC=\"swrysfmc\":{\"value\":\"","RB=\"","Search=Body","Convert=HTML_TO_URL","Notfound=warning",LAST);
方法2
lr_convert_string_encoding(lr_eval_string("振海"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"name2");
lr_save_string(lr_eval_string("{name2}"),"stringToUnicode");
web_convert_param("stringToUnicode","SourceEncoding=HTML","TargetEncoding=URL",LAST);
lr_output_message(lr_eval_string("{stringToUnicode}"));
web_convert_param("stringToUnicode","SourceEncoding=URL","TargetEncoding=HTML",LAST);
lr_output_message(lr_eval_string("{stringToUnicode}"));
七 可以回访验证脚本的正确性
点击运行 可以查看对应的日志打印消息
进行验证是否成功
八 进行压力测试
最后可以进行保存 下次压测的时候可以直接打开
九 结果分析
在此目录下
打开 可以得到如下的详细的分析结果