性能测试理念

1、什么是性能测试?
根据需求,制定性能测试计划,搭建性能测试环境,使用测试工具比如LoadRunner执行计划(三大组件),根据测试结果分析并编写性能测试报告。
关键词:需求、计划、环境、工具、执行、分析、报告
2、LoadRunner的工作原理
1)录制时:VuGen根据相关协议、业务流程录制生成脚本
代表自动化执行的业务流程
2)回放时:使用工具模拟真实客户端向服务器发请求
3、LoadRunner的三大组件:
1)VuGen: 虚拟用户脚本生成器 好比:兵工厂 脚本-武器
功能:录制、编辑、增强性能测试脚本
2)Controller: 压力调度控制台 好比:总指挥部
功能:设置、运行和监控场景Scenario,获取测试结果数据
3)Analysis: 压力结果分析器
功能:将测试结果数据以不同图表形式展示;
便于分析和编写测试结果报告。
4、脚本的基本组成:
类C语法:C语言语法 + LoadRunner语法
1)vuser_init.c 初始化脚本 仅执行1次
2)Action.c 核心脚本 可执行n次 默认1次
3)vuser_end.c 结束脚本 仅执行1次
4)globals.h 头文件 包含LR函数的声明
5、注意事项:
1)在使用LR录制之前,一定要手工执行待测的测试点,比如:用户登录、购票...
好处:a. 熟悉录制的业务流程;
b. 保证业务功能正常使用。
2)录制时,创建脚本都要从New开始:
对比:
QTP:可以补录;
LR:不能补录,录制失败,从头再来。
3)录制时,如何选择Action:
一般将登录操作录制到vuser_init中; 仅执行1次 在线
将核心业务(如购票、查询线路)录到Action; 可n次
将退出系统操作录制到vuser_end中; 仅执行1次 离线
原因:Action功能强大,具备其它部分没有的功能,
比如:参与迭代、设置并发等
说明:login脚本的核心业务就是登录,所以录制到Action中

6、脚本细节分析
1)每个脚本中都有类似函数 function / method 方法
定义函数的目的:为了代码的复用
调用函数的目的:复用已有的代码、流程
函数的声明三要素:返回值类型 函数名(参数表, ...)
vuser_init() //默认返回类型 int
{
return 0; //返回0表示正常结束 -1 错误退出
}
2)调用web_url函数,向服务器发送一个请求
web_url("WebTours", //步骤名
"URL=http://localhost:1080/WebTours/", //请求地址
"Snapshot=t1.inf", //快照名t1.inf 唯一的
LAST); //参数最后 LAST结尾
3)事务的开始和结束(边界) Transaction 事务
思考:为何需要添加事务函数?
原因:后续场景中自动统计不同事务的平均事务响应时间
Average Transaction Response Time
-- 性能分析的重要指标
业内358原则:3秒以内,用户可以接受;5秒以内,用户可以忍受;超过8秒,用户不可接受。
lr_start_transaction("login"); //开始login事务
具体业务流程,一般都是请求
lr_end_transaction("login",LR_AUTO); //结束login事务
4、提交表单的请求函数
web_submit_form("login.pl", //步骤名
"Snapshot=t2.inf", //快照名 t2.inf
ITEMDATA, //分隔词 后续是表单提交的参数和数据
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=29", ENDITEM,
"Name=login.y", "Value=12", ENDITEM,
LAST);
7、思考时间 单位:秒 等待时间、步骤间隔时间
lr_think_time(16); //类似QTP wait() 为了更真实
8、虚拟用户:Virutal User 简称:Vuser VU
1)LR通过工具模拟一个或多个用户,模拟真实用户向系统进行访问,发起压力;用户、请求都是压力的来源
2)VuGen只能模拟1VU: 重点完成脚本,实现功能
Controller场景中可设置多个VU,发起更大的负载、压力。
3)原理:每一个VU都对应一个进程或线程
常用线程方式模拟VU,占测试机系统资源少;
一般PC机模拟2000VU (线程)
进程(Process)和线程(Thread)的区别?
1) 进程比较消耗系统资源; 重量级
2) 线程比较节约系统资源; 轻量级
线程是在进程中开辟的多任务
9、LoadRunner使用VuGen录制时,Action的选择只能从前往后选,不可倒退:
vuser_init -> Action -> vuser_end

练习:录制并回放购票脚本 day02\buy Flights功能
现象:手工操作一遍(功能、环境)、录制一遍(录制时方式、环境)、回放一遍(脚本、环境),都能订到一张票
先熟悉业务流程:手工操作一遍
录制流程:
New -> 选择vuser_init -> OK -> 首页面
-> 输入jojo和bean
-> 开始事务login -> 点击Login -> 结束事务login
-> 切换到Action -> 点击Flights(等待页面加载完毕)
-> 选择城市从Denver到London -> Continue -> Continue
-> 开始事务buy -> 点击Continue -> 结束事务buy
-> 切换到vuser_end -> 点击Sign Off
-> 关闭浏览器 -> Stop
保存在:C:\work\script\day02\buy 编译 -> 回放

10、LoadRunner基本测试流程:
1)根据需求制定性能测试计划 Word 测试经理
2)录制性能测试脚本
3)编辑、调试、增强、运行测试脚本
4)设置场景
5)运行、监控场景,收集测试数据
6)生成结果报告,分析性能情况
以上流程用了几个组件,分别在何处?
1)VuGen:
2)Contorller:
3)Analysis:

并行:多任务(进程/线程)占据各自资源(CPU、Memory内存、Disk磁盘),一起运行;
并发:多任务(进程/线程)抢占少量资源,看似一起运行,实际是快速交替运行(分时间片轮换);
Concurrency 并发
在线:Online 用户登录系统成功后,称为在线,系统会为用户在线维持一定的系统资源,用户在线过程中可以陆续向服务器发请求(执行业务操作)。

区别:用户和账户(账号)
用户:真实的个人、LR的VU 虚拟用户
账户:存在系统中的数据、表中记录属性值 jojo bean
区别:注册用户数、在线用户数、并发用户数
账户信息 已经登录 严格同时访问
举例:1000 100 10或2或3...

一、性能测试的基本概念
1、并发和在线的区别:并发的压力是一种瞬时压力,一般针对同一类型业务;在线的压力是一段时间的压力,没有并发那么集中。
规律:一般20用户并发产生的压力相当于200用户在线的压力(近似1:10的比例)
制定性能测试计划,作为参考,比如设计的在线用户数最多10000个,建议最多测试1000~2000用户的并发。
(并发测试)

2、请求响应时间 = 客户端时间 + 网络时间 + 服务器时间
被测系统 SUT
__________________________________
Client --网络-- Web Server --网络-- DB Server
请求Request ---1--> 处理 ---2---> 增删查改 SQL
响应Response <--4--- <---3----
常用方法:排除法
Internet: 互联网/广域网
Intranet: 内联网/局域网 一般速度更快
建议1:可以通过内网测试规避掉网络的问题,客户端一般不会成为性能瓶颈(客户端性能问题一般出现在JavaScript程序--Web前端动态技术,比如客户端验证等),所以大部分情况下,如果请求响应时间长,性能瓶颈出现在服务器端;
建议2:Web服务器和数据库服务器最好分开部署(分布式),既可以让负载(压力)更加均衡,又可以便于LR对系统资源的监控。

3、事务响应时间:用户完成某个具体操作(动作)所需的时间。 Transaction Response Time
事务也称为交易
比如:登录、订票、转账、抢红包 都可以是一个事务
一个事务范围内很可能包含多个请求,包含了若干个请求响应时间的综合效果。

4、点击率:Hits Per Second 越大,对服务器压力越大
含义:每秒钟用户向Web服务器提交的HTTP请求数。
不是指鼠标点击的次数,比如:点击一个超级链接,服务器返回一个页面,页面中包含了5个图片,则当前发起的点击数(请求数):1+5 = 6个 Http请求
因为:<img src="图片的资源路径名"/>
自动向服务器发起请求,获取图片的响应

HTTP: 超文本传输协议
HTML: 超文本标记语言 网页语言、浏览器解释的语言
形式:*.html 或 *.htm 文本文件
编辑文本、标签(标记)等表示页面的元素
<html> 根标记 头
<head> 头
<title>浏览器标题</title>
</head>
<body> 主体 浏览器正文部分
文本、其它标签表示不同页面元素
</body>
</html> 根标记 尾

5、吞吐量:Throughput
含义:用户在任意给定一秒从服务器获取的全部数据量,单位是字节Byte,累计时间的全部数据量。
吞吐率:吞吐量 / 测试时间 单位:Byte/sec 体现效率
每秒字节数
TPS: Transaction Per Second 每秒事务数

6、请求和响应:都遵循Http协议
Http Request: 客户端向服务器发请求
Http Response: 服务器向客户端返回响应(应答)

7、系统资源利用率:一般指系统中CPU、Memory内存、Disk磁盘、Network网络等主要资源的使用情况。
CPU中:%Processor Time CPU忙的时间的百分比
CPU使用率 70~80%
阈值:超过该值容易出现性能瓶颈

二、熟悉三大组件基本协作关系
需求:测试用户登录在8个用户访问时的性能情况
关注性能指标:平均事务响应时间、TPS、点击率...
其它:脚本:login 账户:jojo和bean
VU数:8个
用户加载方式:每隔2秒加载1个VU
运行持续时间:所有VU运行完脚本
1、使用VuGen录制login
录制、调试、回放通过才能使用
C:\work\script\day02\login
2、使用Controller 设置场景
开始 -> 所有程序 -> HP LoadRunner -> Applications
-> Controller
默认使用场景类型:手工场景 Manual Scenario
将Use the Percentage Mode to... 去除打钩
目的:VU数量的分配目前不用百分比方式,采用具体人数
-> Browse按钮 选择脚本 day02\login -> OK
-> 场景设置界面:
-> 设置8个VU: Run Mode中选择Basic Schedule
将Quantity 改为8 VU数量
-> 设置VU的行为:
1)Initialize: VU初始化,默认运行前初始化
好比:运动员的热身活动
2)Start Vusers: VU的加载方式,何时启动VU
Start all Vuser simultaneously 同时
默认同时加载8个VU
需求:每隔2秒加载1个VU 递增效果
双击 -> 改为:1 Vusers every 00:00:02(HH:MM:SS)
-> OK
关注Schedule Graphics 计划预览图
横坐标:Time 测试时间 纵坐标:Vuser 虚拟用户数
锯齿状:每隔2秒加载1个VU
虚线:运行时间 不确定
3)Duration: 运行持续时间
<1> Run until completion 运行直到结束(脚本结束)选择
<2> Run for __ days and __(HH:MM:SS) 具体运行多久
<3> Run indefinitely 无限运行,直到手工停止
建议及时保存场景文件: ctrl+s
C:\work\scenario\day02\8VU_login *.lrs

说明:目前暂时忽略Windows Resources 系统资源监控
后续统一添加

设置好场景,可以运行场景:Start Scenario 按钮
-> 从Desion视图 切换到 Run视图
设计 运行

如果运行场景出错,要查看错误信息 Details 详细描述:
脚本 12行 错误 连接服务器失败
Action.c(12): Error -27796: Failed to connect to server "localhost:1080": [10061] Connection refused 连接被拒绝
原因:服务器未开启 或 服务器停止运行

3、点击控制台Run视图中,倒数第3个按钮
打开Analysis 结果分析器
Report 报告
Summary Report 总体报告
重点分析事务:
Transaction Name Minimum Average Maximum
Std. Deviation 90 Percent Pass Fail Stop
事务名 最小 平均 最大 标准方差 90%时间 通过 失败
login 0.409 0.512 0.811 0.142 0.811 8 0 0
重点关注平均事务响应时间:0.512s
如果性能需求中规定时间不能超过3s,目前符合需求
最小、最大值作为参考
Std. Deviation 标准方差:0.142 查看稳定性的依据
规律:越接近于0,说明不同结果值越接近,说明系统运行越稳定。
90%时间:绝大部分VU在该时间内完成,辅助分析
通过率:100% 功能不能模拟实现,性能结果无法生效
事务错误率一般控制在0.3%以内:
1000个事务,如果出错了3以内,可以接受

HTTP响应状态码:(面试题:列举出常见的)
不同响应码表示不同的响应状态
200 OK 表示服务器成功返回响应
302 重定向响应(是一种正常的技术手段)
404 客户端问题:资源找不到 比如访问地址不对
500 服务器问题:服务器端程序有错误、异常

Graphs 图表
Running Vusers 正在运行的虚拟用户数
Hits per Second 点击率
Throughput 吞吐量
Transaction Summary 事务摘要
Average Transaction Response Time 平均事务响应时间

技巧:合并图比较 右击A图 -> Merge Graph -> 选择B图
练习:将点击率 和 吞吐量 合并
规律:趋势相当,点击率是起因,吞吐量时结果,点击率提高了,在正常范围内吞吐量也会提高,如果达到了性能瓶颈,就难以提高。使用拐点分析法找到性能的瓶颈,比如达到多少点击率时,吞吐量无法继续上升。

如何获取TPS? 添加新选项-> 新的图
右击Graphs -> Add New Item -> Add New Graph
-> 事务中 -> Trnasaction per Second 0.121

建议将结果文件保存:ctrl + s
C:\work\result\day02\8VU_login_r1 *.lra analysis
后续可以打开分析

归纳:
1、脚本基本组成、读懂脚本和业务流程的对应关系
2、熟悉常见的概念:
事务、点击率、吞吐量、TPS...
3、熟悉LoadRunner三大组件基本协作关系
VuGen -> Controller -> Analysis
脚本 场景 结果

重点复习:测试理论、项目描述、SQL 尤其select
做一些笔试题
技巧:通读笔记 多次阅读 经常比较 -> 触类旁通

posted @ 2019-06-10 22:05  不沉之月  阅读(464)  评论(0编辑  收藏  举报