性能测试:HP LoadRunner11
一、初步概念:
1、功能测试:测试产品的功能是否满足功能需求。
如:ATM取款(在线取款)是否成功或转账操作是否成功
-- 一个用户
2、性能测试:测试产品的性能是否满足性能需求。
包括指标:时间、多用户共同使用
如:ATM取款(在线取款)耗时30分钟
十万人同时转账,系统崩溃了,都属于性能问题。
结论:性能测试基于功能,其要求高于功能
测试基本流程:功能测试、安全测试、性能测试
招聘的需求:
A. 功能测试(手工、自动化) 代码要求高
B. 性能测试(只能自动化) 协议和业务的理解、脚本的增强、硬件、操作系统、网络、服务器、数据库、软件结构、算法
C. 手机测试(手工、自动化)
二、性能测试的课程安排
1、性能测试的基本概念
如何掌握一门技术?3W1H法
What? 是什么? 核心概念
数组:用来保存一组相同类型数据的载体、容器、数据结构
Why? 为什么? 优势 好管理
Where? 在哪儿用? 应用场合 面试的问题有针对性
How? 如何使用? 使用步骤、注意事项 -- 结合项目描述
哪些行业、软件需要进行性能测试?
1)对性能要求较高的:通讯、银行、金融、证券、保险、互联网应用(电商、社交软件、搜索引擎...)
2)对性能要求较低的:单机软件、少量用户的系统
比如:计算器、用户量少的员工管理系统
2、性能测试工具:HP LoadRunner11 份额:60%,其它工具:JMeter 20%
1)LoadRunner的初级部分:三大组件的基本运行
a. 脚本生成器:录制、调试、增强性能测试脚本
b. 控制台:好比总指挥部
c. 结果分析器:分析性能测试结果数据,获取性能测试报告
2)LoadRunner高级部分:三大组件深入掌握
3、性能测试的高级部分:制定性能测试计划(难点),遇到性能问题(瓶颈),如何定位、定性、进行性能调优。
需求 测试计划制定 执行 性能分析和优化
并行:多任务占据各自资源一起运行
并发:多任务抢占少量资源“一起运行”
奥运门票系统分析: 需求预估不足,导致测试通过,但不能满足实际的压力。
压力激增--瞬时压力:并发压力(并发测试)
系统瘫痪-- 宕机(down机) dang4
C S
客户端 服务器
北京------> 上海 网络平均延迟:0.2秒
上海------>
三、性能测试的概念
1、性能测试: 比喻成“攻坚战” 测试机 攻打 被测系统
严阵以待、想方设法、放马过去、方知厉害
模拟真实的生产环境,制定性能测试计划,模拟不同用户使用不同压力去访问被测系统,根据计划中的性能指标分析系统是否满足性能需求。
常见性能指标:
<1> 平均事务响应时间 比如<3秒
<2> 最大并发用户数 比如达到1000
<3> TPS 每秒事务数 比如达到100 系统效率体现
<4> 系统资源特性:CPU使用率... 比如:70%
...
功能的问题:缺陷 bug
性能的问题:瓶颈 影响性能的原因、位置
2、注意:性能测试之前要做好系统备份!
3、性能测试首先看性能需求,如果没有需求,要和客户交流,根据被测系统相关资料,结合测试经验,编写性能测试计划(设计),测试计划是后续展开性能测试的重要依据。
4、负载测试和压力测试的区别?(面试题)
1)共同点:都是在测试过程中逐步加压(递增测试)
2)负载测试 Load Testing
是在正常范围内测试,满足性能需求、正常运行;
-- 见好就收
3)压力测试 Stress Testing
可以在极端范围内测试,测试系统的性能极值;
-- 使劲折腾
4)举例:性能需求中要求系统支持100用户并发
负载测试:20 40 60 80 100 比如分为5个节点
压力测试:100 200 300 ...
5、影响性能的因素:
1)数据库:60%以上的性能问题和数据库有关
2)硬件配置:好的系统可伸缩 增加、去除设备改变性能
3)操作系统:Linux/Unix 一般和系统配置有关
4)其它:网络、网络协议、客户端等
网络协议: Protocol 网络通信的语言、规范、规则、标准
比如:HTTP TCP UDP FTP
结论:分析协议是性能测试的关键。
TCP/IP协议有几层? (TCP/IP协议簇 cu4)
从上到下有四层: 使用的协议:
应用层 HTTP FTP DNS Telnet SSH ...
传输层 TCP UDP
网络层 IP
物理层 底层比特流 bit 二进制 0 1
TCP和UDP的区别? HTTP基于哪种?TCP
TCP: 传输控制协议 可靠的协议,效率偏低
原理:传输数据时需要进行确认
建立连接时需要三次“握手”,断开连接时需要四次“握手”
--- 相见时难别亦难
适用于:文件传输、网页传输等可靠获取信息
UDP: 用户数据报协议 不可靠的协议,效率偏高
只管发,不管确认
适合于:视频点播、流媒体
A 我特别能吃苦! --> B
HTTP协议:超文本传输协议
是互联网中最基本、最重要的协议
http://www.baidu.com
特点:简单的(格式)、无状态(不保存用户状态)的协议
Http Request: 客户端向服务器发送Http请求
Http Response: 服务器向客户端返回Http响应(应答)
一次请求,一次响应就是一次交互
常见的系统架构:C/S B/S
Client --网络-- Server
客户端 服务器
Browser
浏览器 是一种特殊客户端
客户端浏览器
6、被测系统 SUT
SUT (System Under Test) 系统
AUT (Application Under Test) 应用
EUT (Environment Under Test)环境
就是:Web服务器、数据库服务器、网络的统称
Web应用典型三层架构: 常用B/S架构
被测系统 SUT
___________________________________
Client --网络-- Web Server --网络-- DB Server
客户端浏览器 Web服务器 数据库服务器
部署Web应用 管理表和数据
1.请求 Request --> 2. 接收并处理 --> 3.查询 select
6.响应 Response <-- 5.继续处理 <-- 4. 结果
业务流程:用户登录
Username: Tom
Password: 123
Login
四、LoadRunner的工作原理:录制-回放的工作方式
1、录制时:LoadRunner根据相关网络协议,记录下客户端和服务器二者之间的对话(请求包、应答包);脚本是自动化执行的依据,先模拟功能的实现,再测性能(增强);
-- 使用真实的客户端浏览器
2、回放时:LoadRunner根据相关协议模拟真实的客户端向服务器发起请求,并按照增强后的脚本去验证服务器的应答(检查点)。
补充说明:有时脚本录不下来,需要自己写脚本,发现测试时通过了,但是实际运行时服务器瘫痪了。
原因:没有模拟真实的客户端效果,接收也出现问题,导致失败;
结论:即便是自己写脚本也要模拟真实的客户端效果。
项目安排?分工
3、LoadRunner的三大组件:各司其职、各尽所能
1)虚拟用户脚本生成器: VuGen 或 VUG 好比:兵工厂(Virtual User Generator)
功能:录制、编辑、调试性能测试脚本 脚本好比武器
2)压力调度控制台(Controller) 好比:总指挥部
功能:创建场景、运行场景、监控场景,收集测试结果数据
场景:Scenario 就是一个大型的配置文件
保存场景界面设置的细节,表示整个测试计划
3)压力结果分析器(Analysis)
功能:把收集到的测试数据以各种图表形式展示;便于分析性能情况,得出测试结果报告。
五、关注SUT,并进行脚本的录制和回放。
1、熟悉SUT:LR自带的B/S架构的系统 WebTours
航空订票系统
先启动Web服务器:Xitami 小型服务器软件
打开浏览器,访问:URL 地址 统一资源定位
回环地址
http://127.0.0.1:1080/WebTours/
本地主机 IP
http://localhost:1080/WebTours/
协议名 主机名 端口号 应用名
常见默认端口号:
Tomcat默认8080 Oracle: 1521 Mysql: 3306
HTTP:80
用户名:jojo
密码:bean
系统功能介绍:
1)Login: 用户登录 只有用户登录成功了,才称为在线
此时用户具有访问系统的某种权限
2)Sign Off: 退出登录 用户离线,放弃权限
3)Flights: 订票
4)Itinerary: 查看订票记录
5)Home: 主页
6)其它:注册等
2、LR使用前的注意事项:
1)使用LR之前,修改浏览器配置(默认IE)
<1> 工具 -> Internet选项 -> 常规 -> 设置-> 每次访问此页时检查
原因:当脚本更新时,能够及时适应
<2> 工具 -> Internet选项 -> 程序 -> 重置Web设置
原因:恢复录制时自动打开的浏览器为IE
<3> 工具 -> Internet选项 -> 高级-> 去除 启用第三方浏览器扩展
原因:避免录制时的干扰
2)由于当前环境,导致LR三大组件运行缓慢
解决方法:禁用本地连接
右击 网上邻居 -> 属性 -> 右击 本地连接 -> 停用
说明:在真实测试项目中不能禁用!
因为需要用本机作为测试机 联网 访问其它服务器主机;而目前测试机、被测系统主机 都在本机 localhost访问。
3)如果WebTours中Flights功能无法显示:
原因:和Oracle中Perl服务资源冲突
解决方法:删除以下两个目录 前提:先关闭perl.exe进程
D:\oracle\product\10.1.0\db_1\perl\5.6.1\bin
删除 MSWin32-x86目录
D:\oracle\product\10.1.0\db_1\perl\5.6.1\lib
删除 MSWin32-x86目录
4)要求打开LoadRunner任何一个组件,都从开始 -> 所有程序中打开,不能使用快捷方式。
5)当录制时,如果被测系统网页无法自动打开(浏览器),因为系统某些服务产生的影响,比如:java.exe,建议关闭所有无关的、有影响的服务:
java.exe、杀毒进程、ApacheXxx、oracle、mysql、sqlserver、TNSLSNR、TomcatXxx、perl、电脑管家...
技巧:先对进程列表按照进程名称排序,便于合并查找
3、案例:录制并回放用户登录脚本
使用:VuGen
开始 -> 所有程序 -> HP LoadRunner -> Applications-> Virtual User Generator
点击New 新建脚本 -> 选择录制的协议:
使用默认的 Web[HTTP/HTML]-> Create 创建
填写的信息:
1)软件架构类型: Internet Applications (B/S) 默认Win32 Applications (C/S)
2)选择浏览器类型:默认IE
3)URL Address: 被测系统首页的网址
http://localhost:1080/WebTours/
或
http://127.0.0.1:1080/WebTours/
4)Working Directory: LR工作路径 默认
5)Record into Action: 录制脚本的位置 默认Action(vuser_init 初始化 Action 核心动作 vuser_end 结束)
-> OK 自动打开浏览器 SUT首页,开始录制
关注小操作条(录制控制,关注数字的变化 Event 记录事件的步骤,等待数字稳定后才继续操作,避免录制不完整)
-> 输入jojo和bean
-> 开始事务(插入事务)名称:login -> OK
-> 点击Login按钮
-> 结束事务login -> OK
-> 切换到vuser_end模式,点击Sign Off 退出
-> 关闭浏览器 -> 点击Stop 结束录制
建议新建工作目录:C:\work (目录名使用英文、数字)
新建三个子目录:
1)script 存放脚本文件
2)scenario 存放控制台的场景文件
3)result 存放结果分析文件
ctrl+s 将脚本保存在:C:\work\script\day01\login
修改字体:Tools -> General Options -> Environment-> Editor Comic Sans MS 14 Bold 加粗
Java编程的基本步骤:
1. 编辑: Hello.java
2. 编译: javac Hello.java --> Hello.class 字节码
3. 运行: java Hello 启动JVM,加载并执行Hello程序
录制脚本后:
1)编译:Compile 修改完脚本后一定要编译!
帮助检查语法错误,并能够保存脚本并生成最新的版本。
脚本 23行附近 语法 错误 少个;
Action.c (23): syntax error; found `lr_think_time' expecting `;'
非法的 字符 中文 的;
Action.c (23): illegal character `\0243'
技巧:如何快速提高调试技巧?
-- 可以将正确的代码故意改错,观察出错的提示
大部分提示都非常相似,日积月累,积累调试经验
2)回放:Run
VuGen模拟1个虚拟用户,执行脚本中的步骤,向被测系统发请求。(没有打开浏览器,工具在模拟协议的发送)
设置运行后自动出现测试结果: Test Results
Tools -> General Options -> Replay 回放-> After Replay 选择 Virtual test result 虚拟测试结果
运行错误提示:
Action.c(4): Error -27796: 第4行 错误
失败 连接 服务器
Failed to connect to server "localhost:1080": [10061] Connection refused
连接 被拒绝
原因:服务器已经down机、关闭
如何解决:重新启动服务器
学习重要思路:业务 + 技术
业务:不同行业操作流程,比如银行、物流、保险、电商、电信...
技术:是通用的,能够解决各行各业的业务问题。
回放脚步执行顺序:VuGen负责调用
初始化 核心 结束
vuser_init 1次 -> Action 默认1次 -> vuser_end 1次
可循环多次
每段脚本中都有类似结构:C语言的函数的定义
vuser_init() //默认返回int 可以不写
{
return 0; // 返回0表示正常结束 -1 错误退出
}
函数function/ 方法method:对一段代码的封装
定义函数:代码的封装
调用函数:代码的复用(重复使用)
函数声明 三要素:
返回值类型 函数名(参数表, ...)
比如:
形式参数
int add(int a, int b)
{ //函数体 对函数的步骤实现
return a+b;
}
调用函数: 实际参数
int n1 = add(1, 2);
int n2 = add(3, 5);
归纳:
1、性能测试常见的概念
2、性能测试工具LoadRunner基本原理:录制-回放
3、LoadRunner三大组件:VuGen、Controller、Analysis
4、录制和回放脚本基本步骤、技巧
5、调试好测试环境:测试机LR 被测系统 WebTours