1、什么是性能测试?
性能测试是测试的一个方面,在给定的负载条件下,被测系统的各指标是否预期需求(性能需求)。
比如:给定CPU、内存、磁盘、网络、事务响应时间等指标。如果发现与需求不一致,就发现性能瓶颈。
2、性能测试的目的?
识别系统中的弱点、评估系统的性能、进行系统的调优。提高系统的可靠性、稳定性。
3、什么时候需要进行性能测试?
对性能要求较高的行业:通信、银行、金融、证券、保险、搜索引擎等多用户的系统。
4、性能测试的工具--HP LoadRunner11
补充:Apache JMeter 开源的、免费的 Java开发
作为性能测试工具,测试Web应用、Tomcat性能
LR的组成部分(重点掌握3+1)
1)虚拟用户脚本生成器(Virtual User Generator)VuGen
捕获用户的业务流程、创建性能测试脚本,模拟单用户执行
2)压力调度控制台(Controller)
设置场景Scenario,工具场景配置(脚本、VU、VU行为、Runtime-Settings等)运行场景,收集测试数据;
3)压力结果分析器(Analysis)
根据测试数据,生成结果报告(大量的图表)
为后续性能分析提供重要依据;
4)负载生成器(Load Generator)
通过生成虚拟用户产生(模拟)实际的负载;
5)代理程序 (Agent)
部署在各个负载机,协调得到步调一致的虚拟用户;
6)监控程序(Monitor)
监控主要性能的计数器
5、如何进行性能测试?
思路:围绕LoadRunner性能测试工具三大组件-主要线索
LR的测试流程:
1)使用VuGen 录制脚本 -> 调试、增强脚本:
1.事务点 2.检查点 3.参数化 4.集合点
5.关联 6.流程控制 7. 函数调用 等
脚本分为:init 1次、Action n次、end 1次
添加事务的目的:场景运行后,会收集事务的响应时间
对某个事务进行并发测试:
在Action中,在事务开始之前,加集合点:
lr_rendezvous("同事务名");
lr_start_transaction("事务名");
检查点函数:web_reg_find("Text=检查的文本", LAST);
带有reg字样的函数,注册性函数,放在相应请求之前
web_submit_form(...); 提交表单请求
不同的文件格式:
文件类型 后缀
---------- ----------
脚本文件 *.usr 由VuGen保存
场景文件 *.lrs 由控制台保存 Scenario
结果分析文件 *.lra 由Analysis保存
控制台结果文件 *.lrr Result 结果
2)使用Controller,载入调试好的脚本,设置场景
可以选择:手工场景 (Manual Scenario)
或 基于目标场景 (Goal-Oriented Scenario)
一般选择手工场景,可以进一步设置是否以百分比形式分配VU (目前不用百分比)
选择场景类型:场景方式Scenario、组方式Group
设置虚拟用户数、用户行为:
Quantity (Basic Schedule 选择)
初始化、加载方式、持续时间、退出方式
设置Run-time Settings: (场景中优先级高)
迭代次数:针对Action迭代
Pacing: 每次迭代之间的时间间隔 秒
Think time: 每个步骤之间的时间间隔 秒 思考时间
共性:时间越长,压力越缓
Log: 日志控制
...
可以监控服务器的资源:
可以监控n台服务器,监控CPU、内存、磁盘、网络等重要指标,为后续分析提供依据。
运行场景 Start Scenario
继续监控
3)通过Analysis生成结果,进行性能分析
概要:平均事务响应时间、吞吐量、点击率、运行时间、用户数等。
重要的图表:Graphs
平均事务响应时间、吞吐率、点击率、资源图等。
提示:结合LR工具原理图、工具界面截图,理解和记忆。
如何将一个技术说清楚?3W1H
What? 是什么? 简单易懂 核心概念
Why? 有说明好处?优势?特点?
Where? 在哪使用? 应用场合
How? 怎么用? 具体实现步骤--结合项目 举例(素材)
1、LoadRunner的三大组件简介,中英文名称?
答:1)Virtual User Generator 虚拟用户脚本生成器VuGen 或 VUG
功能:录制、编辑、调试脚本(增强) 1VU 回放
运行时设置 (Run-time Settings)比如可迭代
2)Controller 压力调度控制台 压力由VU发起
功能:设置场景、运行场景、监控场景,收集测试数据
3)Analysis 压力结果分析器
功能:将收集到的测试数据以图表形式进行展示;
便于得出性能测试报告。
2、LoadRunner的原理?
答:录制--回放的工作方式
1)录制时,LoadRunner根据相关协议(比如Web[HTTP/HTML]协议)记录下客户端和服务器二者之间的对话。(对话包括请求和应答,脚本中主要记录请求)
2)回放时,LoadRunner模拟真实的客户端向服务器发起请求,并按照脚本去验证服务器的应答。(检查点)
3、LoadRunner脚本的基本组成部分:
vuser_init.c 初始化脚本 1次
Action.c 核心脚本 n次
vuser_end.c 结束脚本 1次
globals.h 头文件 通过LR函数的声明
(*.c 类C语法 c语言的语法+LR定制函数、语法)
4、什么是事务?为何要插入事务?
答:事务分为事务的开始、结束和之间的业务操作,事务是用于度量服务器性能的重要指标——事务响应时间
事务Transaction: 表示一组相关的业务操作。
我们可以将比较关心的某个或某些业务操作,设定为一个事务,LR运行场景后会记录下不同事务的响应时间(平均)。
事务函数:
lr_start_transaction("事务名"); //开始事务
相关的业务操作...
lr_end_transaction("事务名称", LR_AUTO); //结束事务
5、负载测试和压力测试的区别?
答:1)共同点:都是逐步加压的测试(递增测试)
2)负载测试:Load Testing
是在正常范围内的测试。正常范围:性能需求范围、服务器和应用程序的各项指标能够承受的范围内。比如测试系统的最大并发用户数是否满足性能需求。
3)压力测试:Stress Testing
在极端范围内的测试。目的是测试出被测系统的性能极值,比如最大并发并发用户数。
并行:多个任务(进程/线程)占据各自资源(CPU资源)
一起运行。
并发:多个任务(进程/线程)占据少量资源(CPU资源)
看似一起运行。
并发: Concurrency
在线:Online 用户登录系统成功,用户在线,可以对系统进行不同功能点操作
基准测试、并发测试的概念和方法?
(1)基准测试就是单用户测试,作为其他测试标杆
需要用到VuGen、Controller、Analysis,获取测试结果
方法1:单用户循环n次 方法2:单用户持续执行n时间
(2)并发测试是多用户并发执行某一操作,形成瞬时压力,是一种严格的测试,主要考察系统对瞬时压力的承受能力
并发测试和在线测试的区别?
(1)区别:并发的压力是一种瞬时压力,在线的压力是一段时间内的压力
(2)1:10的比例关系
吞吐量和点击率的概念、区别?
(1)吞吐量(Throughput):用户从服务器给定1秒获得的全部数据量,单位:字节(Byte)
是总量,累计时间内的全部数据量
(2)吞吐量/测试时间=吞吐率:体现传输效率
反应服务器的处理速度、网络性能
(3)点击率(Hits per Second):客户端每秒向服务器提交的HTTP请求数(鼠标单击一次,可能是多个请求)
点击率越大,对服务器的压力越大,吞吐量逐步上升,上升多少取决于被测系统性能
QTP和LoadRunner的区别?
(1)QTP:功能测试工具(自动化)
LoadRunner:性能测试工具 可以测多用户(负载、压力)
(2)QTP关心的是界面(UI),关心的是对象(对象库);
LR只关心客户端和服务器之间的数据包(请求包和应答包),不关心对象,更不需要比对对象的属性值,只关心抓包(捕捉数据包)
如果用户界面变了,但是业务逻辑不变:
QTP的脚本需要变化;LR脚本不需要改变
(3)LR关心的是客户端和服务器之间的对话,前提是选择正确的网络协议(相当于网络通信的语言)
(4)LR不能补录,录制失败,从头再来
1、基准测试 -- 后续其它测试的基础
方法1:单用户循环执行n次
方法2:单用户持续执行n时间
2、并发测试 -- 测试系统在瞬时较大压力下的承受能力
1)设置集合点
2)设置并发策略
3)场景其它设置:1次迭代,忽略think time
3、参数化
使用LR变量代替之前脚本中的常量(字面值)
{LR变量名} 数据由参数池提供(数据、策略)
综合场景测试:
多用户、多脚本(任务/测试点)、在线运行一段时间(1h左右)
更真实模拟实际生产环境:
1、脚本录制和增强:
根据测试计划,业务流程、用例、协议录制脚本;
增强:事务、检查点、参数化、关联、流程控制…
细节:将事务内的think time转移
2、场景中:(Scenario共享场景/Group独立场景)
设定不同组、管理不同脚本、UV比例
VU行为:初始化、加载方式、持续时间、退出方式…
Run-time Setting:
迭代测试:Pacing、Log、think time、错误处理、多线程模拟VU、网络、浏览器缓存、超时时间
系统资源的监控:13+1项 包括cup、memory、network、disk、system