loadrunner基础
LoadRunner:是一种预测系统行为和性能的负载测试工具。通过以模拟上千万户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试
1、Apache与tomcat区别:
apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。apache支持静态页,tomcat支持动态的,比如servlet等。
相同点:
1、两者都是apache组织开发的
2、两者都有HTTP服务的功能
3、两者都是免费的
不同点:
1、Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等)
2、Tomcat是Apache组织在符合J2EE的JSP、Servlet标准下开发的一个JSP服务器
3、如果客户端请求的是静态页面,则只需要Apache服务器响应请求
4、如果客户端请求动态页面,则是Tomcat服务器响应请求
5、因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销
6、apache:侧重于http server
7、tomcat:侧重于servlet引擎,如果以standalone方式运行,功能上与apache等效,支持JSP,但对静态网页不太理想
2、公司组网、CPU,内存、主板性能
组网:网络组建技术,分为以太网组网(总线型结构)技术和ATM局域网组网技术(中心连接计算机所构成的局域网络)。
基本网络结构有环形网和链形网
1、链形网需要的光纤数量较少,但是对业务没有保护。因此常用于光纤数量较少,业务不重要的场合。
2、环形网可以对业务提供保护,在组网时应根据不同的业务分布来确定它的保护方式。
公司服务器CPU、内存:一般在16核32G以上价格昂贵,或者更高32核64G价格高达百万
3、Socket与http区别
网络七层协议:物数网传会表应如下图:
从上到下分别是7应用层6表示层5 会话层 4传输层3 网络层2数据链路层1物理层
其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。
HTTP协议:
1、HTTP协议:超文本传输协议,对应于应用层,用于如何封装数据。HTTP(短连接)连接使用的是"请求-响应"方式
2、TCP/UDP协议:传输控制协议,对应于传输层,主要解决数据在网络中的传输。
3、IP协议:对应于网络层,同样解决数据在网络中的传输。
Socket连接:
1、Socket(长连接)是对TCP/IP协议的封装,Socket只是个接口不是协议,通过Socket我们才能使用TCP/IP协议,除了TCP,也可以使用UDP协议来传递数据。
2、创建Socket连接的时候,可以指定传输层协议,可以是TCP或者UDP,当用TCP连接,该Socket就是个TCP连接,反之。
Socket连接至少需要一对套接,分为clientsocket、servicesocket,连接为3个步骤:
(1)服务器监听
(2)客户端请求
(3)连接确认
若双方是Socket连接,可以由服务器直接向客户端发送数据。
若双方是HTTP连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。
因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。
session、token、cookie区别:
session(会话):
服务器分配给客户端的唯一身份标识,服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。
cookie(缓存):
cookie是浏览器里面能永久存储的一种数据。cookie由服务器生成,发送给浏览器,浏览器把cookie以key-value形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。
token(令牌):
token是用户身份的验证方式,是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库
使用:1、用设备号/设备mac地址作为Token(推荐)。2、用session值作为Token。Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
4、Loadrunner重要概念:
事务:又称为Transaction,事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这 样一个范围,这就定义了一个transaction。
lr_start_transaction("事务名");
lr_end_transaction("事务名",LR_AUTO);
事务作用:LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。通俗的讲LoadRunner中的事务就是一个计时标识,通常事务时间所反映的是一个操作过程的响应时间。
1、事务是LoadRunner度量系统性能指标的唯一手段
2、事务能够用于度量高风险业务流程的性能指标;
3、事务能够度量在一组操作中每一步的性能指标;
4、通过事务计时实现了不同压力负载下的性能指标对比;
5、通过事务计时可以帮助定位性能瓶颈;
集合点:执行负载测试时,需要模拟系统上有较重的用户负载。要实现此操作,可以同步Vuser 以便恰好在同一时刻执行任务。插入集合点是为了衡量在加重负载的情况下的性能情况。
lr_rendezvous("SubmitQueryData");
注意:只能向Action 部分(而不是 init 或 end 部分)添加集合。
思考时间(think-time):模拟实际用户在不同操作之间等待的时间以秒为单位一般1-5秒
如:
lr_think_time(8);
静态资源:html:静态资源,浏览器可以看得懂,它可以有变量;
动态资源:动态资源,需要先转换成html,再给浏览器看。ASP/PHP
Javaweb服务器:
l Tomcat(Apache):当前应用最广的JavaWeb服务器(只支持一部分JavaEE的规范);
l JBoss(Redhat红帽):支持JavaEE,应用比较广;EJB容器
l GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广;
l Resin(Caucho):支持JavaEE,应用越来越广;
l Weblogic(Orcale):要钱的!支持JavaEE,适合大型项目;
l Websphere(IBM):要钱的!支持JavaEE,适合大型项目;
分析需求-----录制脚本---调试------场景-------结果分析
1、脚本设计
录制模式:手工插入步骤、手动编写
1.1脚本增强:
事务、集合点、参数化、关联、检查点
检查点:检查点:web_reg_find 、web_find(需要打勾)区别,web_reg_find函数在检查页面执行过程中如果检查到数据就会显示结果。而web_find函数则在页面全部加载完成后,再去寻找需要查找的对象。
参数化方法:
方法一,右键---【Replace with a new parameter】
方法二,菜单【insert】----【new Parameter…】
1.2脚本调试:RunTime Settings
a. Run Logic:只有action能循环,init 和 end 不行
b. Log
c. Miscellaneous
d. Browser Emulation:Simulate a new user on eachiteration (测试时如果服务器未挂,但出现了大量的 Failed toconnect to server 时,去除这个勾)
e. Preference:Winlnet replay instead of Socket(Windows Only)(测试时如果服务器未挂,但出现了大量的Failed to connect to server 时,去除这个勾)
f. d与e的区别:d设置时,结果分析中可以出现网页细分图,e设置时,收集结果中不能出现网页细分图。
1.3 POST的三种方式
a. web_submit_form:只能POST,使用简单,Cache中取数据,不可控性
b. web_submit_data:只能POST,功能与 a 相似,但较复杂,与Cache无关
c. web_custom_request:只能发送 POST 和 GET 请求,所有 b 能实现的请求,本方法都可实现,也可以实现b 无法实现的请求
2、 场景设计
2.1 手工场景
a. Schedule by 选择 Scenario,则所有脚本使用相同的设置Run的方式;选择Group,则分别为不同的脚本设置Run的方式。
b. Run Mode:选择Real-World Schedule,则可以通过action来增加多个用户;选择Basic Schedule ,只能设置一次负载
2.2 目标场景
a. Virtual Users :以满足虚拟用户数为目标
b. Hits Per Second:以每秒的点击率为目标
c. Transaction Per Second:以每秒通过的事务为目标
d. Transaction Response Time:以事务响应时间为目标
e. Pages Per Second:以每秒访问的页面为目标
2.3 集合点设置
3. 结果分析
3.1 Analysis Summary:简要分析
3.2 Running VUsers(运行并发数),Hit Per Second(每秒点击数),Throughtput(吞吐量),Transaction(事务),Summary(摘要),Average TransactionResponse Time(事务平均响应时间)
3.3 Open a new Graph
a. Transaction àTransactions Per Second
b. Web Page Disgnostics
3.4 Cost Time (耗时)
a. Receive Time
b. First Buffer Time:NetWork Time、 Server Time
c. Connection Time
d. DNS Resolution Time
e. Client Time
f. SSL HandShaking Time
g. FTP Authentication Time
h. Error Time
3.5 结果分析中js、css、图片的耗时为0的解决方案:
a. 在脚本中去除 web_concurrent_start() 和 web_concurrent_end()函数(若不可以,再设置b 选项)
b. 使用浏览器模拟并清除缓存
Linux日志查看tail与more的区别与优势
more的参数应用:
more -dc /etc/profile 注:显示提示,并从终端或控制台顶部显示;
more +4 /etc/profile 注:从profile的第4行开始显示;
more -4 /etc/profile 注:每屏显示4行;
more +/MAIL /etc/profile 注:从profile中的第一个MAIL单词的前两行开始显示;
more的动作指令:
Enter向下n行,需要定义,默认为1行;
Ctrl+f向下滚动一屏;
空格键向下滚动一屏;
Ctrl+b返回上一屏;
=输出当前行的行号;
:f输出文件名和当前行的行号;
v调用vi编辑器;
! 命令 调用Shell,并执行命令;
q退出more当我们查看某一文件时,想调用vi来编辑它,不要忘记了v动作指令
tail命令:
tail -n 行数值 文件名查看后n行
tail -f /var/log/syslog 显示文件 syslog 的后十行内容并在文件内容增加后,且自动显示新增的文件内容。
备注:最后一条命令tail非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息。
loadrunner关联(correlation):
语法:
int web_reg_save_param(const char *ParamName, , LAST);
参数说明:
· ParamName: 存放得到的动态内容的参数名称
· 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,表示一直到结尾的整个字串都存入参数。
注意:"是loadrunner字符,要使用需要转译 \ "
取值:
lr_output_message("# 关联函数HASH_KEY的值:\n %s", lr_eval_string("{ParamName}"));