本质:基于协议模拟用户发出请求(业务的模拟),对服务器形成一定的负载,来测试服务器的性能指标是否满足要求 与界面无关
时间性能
空间性能
性能测试的分类 性能测试
模拟生产运行的业务压力量和使用场景
1.验证系统是否有系统宣称具有的能力
2.要事先了解被测试系统经典场景,并具有确定的性能指标
3.要求在已经确定的环境下运行
也就是说,这种方法是对系统性能已经有了解的前提,并对需求有明确的目标,并在已经确定的环境下进行的
负载测试
在被测系统不断加压,直到性能指标达到极限,如响应时间超过预定指标或某种资源已经达到饱和状态
1.找到系统处理能力的极限
2.需要在给定的测试环境下进行,通常也需要考虑被测系统的业务压力和经典场景、使得测试结果具有业务上的意义
3.用来了解系统的性能容量,或是配合性能调优来使用
也就是说,这种方法是对一个系统持续不段的加压,看你在什么时候已经超出“我的要求”或系统崩溃
压力测试(强度测试)
测试系统在一定的饱和状态下,如cpu、内存在饱和使用情况下,系统能够处理会话能力,以及系统是否会出现错误
1.检查系统处于压力性能下时,应用的表现
2.通过模拟负载等方法,使得系统的资源使用达到较高的水平
3.用于测试系统的稳定性
也就是说,这种测试是让系统处在很大强度的压力之下,看系统是否稳定,哪里会出问题。
并发测试
通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题
1.发现系统中可能隐藏的并发访问时的问题
2.关注系统可能存在的并发问题,如系统中的内存泄露、线程锁和资源争用方面的问题
3.在开发的各个阶段使用需要相关的测试工具的配合和支持
也就是说,这种测试关注点是多个用户同时(并发)对一个模块或操作进行加压。
配置测试
通过对被测系统的软硬件环境的调整,了解各种不同对系统的性能影响的程度,从而找到系统各项资源的最优分配原则
1.了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作
2.一般在对系统性能状况有了初步了解后进行
3.用于性能调优和规划能力
也就是说,这种测试关注点是“微调”,通过对软硬件的不段调整,找出这他们的最佳状态,使系统达到一个最强的状态。
可靠性测试
给系统加载一定的业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定
1.验证是否支持长期稳定的运行
2.需要在压力下持续一段时间的运行(2-3天)
3.需要关注系统的运行情况
也就是说,这种测试的关注点是“稳定”,不需要给系统太大的压力,只要系统能够长期处于一个稳定的状态。
性能指标 响应时间
响应时间=网络延迟时间+webservertime+appservertime+databasetime
网络传输时间+服务器处理时间
不包含前端页面渲染时间,到浏览器收到请求后响应数据截止
2s优秀---5s良好---8s较差
tps—每秒处理的事务数—transaction per second hps:hits per second 吞吐量:描述的使服务器的处理能力 资源利用率
在一定的负载情况下,服务器资源占用情况
cpu利用率
不允许超过70-80%
队列长度
内存(Mem)利用率
80%以下
虚拟内存---页交换频率
带宽利用率
100Mbps=12.5MB/s
1Byte=8bit
如果资源利用率太小,造成资源浪费
用户数—并发用户 户数 在同一时间向服务器发送请求的用户数量 与每秒的并发请求数不同,一定要确认需求的目的使并发用户数量还是并发请求数
性能测试流程
需求分析 测试对象 常用的、核心的、重要的、数据量、并发量 例如:登录、注册、搜索、添加购物车、下单、支付 确定性能指标 吞吐量、TPS—服务器每秒处理的请求数 响应时间—从浏览器发出请求,服务器处理,到收到响应所需要的处理时间 用户数—并发用户数 资源利用率—cpu、Mem、磁盘io、network 例如:要求每天完成交易额2亿 客单价—200-500,以300计算–28原则算,以24小时计算 求每秒最大交易数 200000000/3000.8/(240.2)/3600=30.8个/s 每秒交易数200000000/300/24/3600=7.7 2/8原则—80%的用户请求,集中在20%的热点数据上,或时间段 每天8小时系统支持500w用户访问 50000000.8/(80.2)/3600=694个/s 每秒访问数5000000/8/3600=173
测试场景 单一场景:登录、注册、搜索、添加购物车、下单、支付 混合场景:用户使用场景 系统使用场景 测试计划 测试目标 测试人员组织 压测进度安排 压力机—配置-要求-数量 风险 测试方案 测试工具—loadrunner(HP:ALM\QTP(UFT))–jmeter 测试环境—数据库–服务器–架构设计–有条件情况下尽量和生产环境一致 测试策略—单一场景–混合场景 监控工具 linux—nmon–rpc–jvisuaIVm–Spotlight widow—Spotlight–perfmon.exe 用例设计 测试脚本—基于脚本的用例 场景设计—基于场景的用例 测试执行 脚本编写 场景监控设计 运行场景 监控场景 测试报告 定位分析问题 后端—代码、软件–数据库,应用服务器、硬件 前端 网络 安装loadrunner OS是xp、win7、win2003、win2008 windows–家庭版–无管理员权限 专业版 旗舰版 支持浏览器IE8/9 安装 直接解压 虚拟光驱 可以单独安装压力机 破解:每一步都得管理员权限运行 问题:杀毒软件、防火墙是否关闭、IE的Internet选项第三方扩展是否关闭开启 VuGen 脚本录制流程
新建脚本选择网络协议 1.自带协议探测工具 2.借助网络扫描工具 3.询问开发 单协议脚本 多协议脚本 最近采用的 录制前准备 选择被测系统类型—浏览器—非浏览器 录制时采用的浏览器—IE—如果是64位的选择program files(x86)下面的IE浏览器 被测服务器地址 其他选项默认 录制设置 options General—Recording HTML-based script 1.Based-HTML(默认):将打开一个网页HTML web_link\web_submit_form—依赖上下文关系, 编写规则:web_link(“访问首页”,“Text=LoadRunner”,LAST) web_url\web_submit_data—不依赖上下文关系 编写规则:web_url(“访问首页”,“url=http://www.baidu.com”,LAST) URL-based script 将每一个不同的url的请求封装为步骤 HTTP Properties—Advances Support Charset—UTF-8 UTF-8解决乱码问题 开始录制 工具栏 停止、暂停、插入新的action、开始事务、结束事务、插入集合点、插入注释 问题:检查ie是否为默认浏览器 检查ie版本是否9以下 更换火狐浏览器 检查杀毒软件是否关闭 解决不了,放弃录制,选择手写脚本 停止录制 脚本查看方式 script view 可以查看全部录制的脚本代码 Tree View 可以查看每个url获取的页面 脚本的组成 init action end 总结: VuGen的脚本分为三部分:Vuser_init,Action,Vuser_end.其中Vuser_init和Vuser_end都只能存在一个,而Action可分为无数多个部分,可以通过点击旁边的new按钮来创建Action。在迭代执行测试脚本时,Vuser_init和Vuser_end中的内容只运行一次,迭代的是Action部分 回放结果查看----Test Result
脚本回放设置—run-time settings Run logic 用户建模—init、action、end Pacing 1.上一次迭代一结束就开始新的迭代 2.在上一次迭代结束之后 延迟固定的时间xxx开始新的迭代 延迟随机的时间段开始新的迭代 3.延迟 固定的时间xx开始新的迭代 随机段的时间开始迭代 注意延迟的时间包括上一迭代运行的时间 Log 1.启动日志 只有当错误出现的时候才记录日志 扩展日志—参数置换信息 标准日志 2.关闭日志 Think Time 1.忽略思考时间 2.回放思考时间 按照录制思考时间 让思考时间乘以几倍 使用录制思考时间的随机百分比 统一规则:限制思考时间不超过xx秒 作用:更加真实的去模拟用户操作之间的延迟 Internet protocol–checks 启动/关闭图片和文本检查 Multithreading 1.以进程方式运行虚拟用户 进程独享一块内存,比较稳定,大约占4M以上 内存资源浪费,可模拟的虚拟用户少 2.以线程方式运行虚拟用户 线程之间共享一块内存,可以模拟的虚拟用户多,大约占用1-2M 进程和线程的区别 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 线程自己基本上不拥有系统资源,但它可同属一个进程的其他线程共享进程所拥有的全部资源 2.关系和区别 a.同一个进程中的多个线程之间可以并发执行,线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制 b.线程同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列,但线程之间没有单独的地址空间,一个线程死掉等同于整个进程死掉,进程有独立的地址空间,一个进程奔溃后,在保护模式下不会对其他进程产生影响 c.一个程序至少有一个进程,一个进程至少有一个线程 d.进程在执行中拥有独立的内存单元,而多个线程独享内存,从而极大提高了程序的运行效率 e.多线程的意义在于一个应用程序中,有多个执行部分可以同时进行,但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配 f.线程执行开销小,但不利于资源的管理和保护,而进程则相反 作用 Virtual User Generator—录制回放、开发维护脚本 LoadRunner Controller—用于创建、运行和监控场景 LoadRunner Analysis—用于生成测试报告,分析性能测试结果
|