性能测试的概述
性能:百度百科定义:器物的性质与效用。
生活中:买手机,买电脑,买车—》性能好:快(时间短)、资源
软件的性能:软件在允许的过程中反应的速度(时间),消耗的资源的情况等等。
性能测试:是通过自动化测试工具模拟多种正常,峰值,以及异常负载条件下对系统各项性能指标进行的测试。
负载测试、压力测试都是属于性能测试。
负载测试:确定各种工作负载下系统的性能,目标是测试负载逐渐增加时各项指标的变化情况;
压力测试:是通过确定一个系统的瓶颈值或者不能接受的性能点,并且获取提供最大服务级的测试。
为什么要做性能测试?
应用程序是否能够很快的响应客户的需求?
应用程序是否能够处理预期的用户负载并且还有盈余的能力?
应用程序是否能够处理业务所需的事务数量?
应用程序在预期或者非预期的用户负载下,运行是否稳定?
是否能够确保用户在使用软件的时候获得比较舒服的体验。
性能的问题的根源?
多平台,超多服务器,异构系统,多应用并行,数千个网站,相互协作同时工作,这个过程中很容易出现交叉的故障点。
误区:提高一些硬件配置,性能就变好了,优化了,所以不用做性能测试了,或者说性能测试不重要?
错误:只是临时解决问题,根本问题没有解决。
影响性能的因素有哪些?
。硬件环境
。软件本身(算法逻辑、数据、中间件)
。网络带宽
。软件环境
性能的评定标准:性能指标
响应时间:指的是从客户端发出请求开始,到接收到服务器的响应,并且看到响应的内容为止,这个时间段,称为响应时间。
响应时间=网络传输的时间+服务器处理的时间+浏览器解析呈现的时间
如何弱化网络传输的时间和浏览器解析呈现的时间:
前期测试建议在局域网中进行;
性能测试建议一定要独立的测试环境;(测试环境必须进行数据初始化)
在晚上测试性能
用户数:
在线数:在软件上,不一定在操作 并发数:在软件上,并且在操作。(特定的时间点或者时间段,操作不一定相同) 在线数>=并发数
实际需求 –》 测试用例
- 测试 500 人登录的性能 –》在线数500,并发数没有要求;可以是一组线程或者多个线程组一起实现;
- 测试500人并发登录的性能—》在线数500,并发数500;
测试的时候建议使用一个线程组实现,多线程组需要进行设置;
- 测试300人并发登录的同时,有200人正在注册 –》在线数500,并发数500
注册和登录在不同的线程组中设置
资源的利用率:cpu、内存、磁盘、网络
吞吐量:处理事务的总数据量
吞吐率:单位时间内处理的数据量
点击量:点击的数量
点击率:单位时间内点击的次数
吞吐量、吞吐率、点击量、点击率 都是从软件的处理能力来判断软件性能的。
例如:软件的响应时间是1秒,所以性能就很好,判断正误?
错的,太片面了,其它的性能指标不清楚,用户数清楚,比如只有一个用户使用…
软件性能是否达标,依据是用户的性能的需求。
不同的角度出发,关注的性能指标不一样,不同的平台对性能的要求也不一样的。
何时进行性能测试?
一般都是在功能测试的中后期进行,性能测试是依赖于功能测试的。
性能测试一定要有自己独立的测试环境,并且测试环境还要进行用户数据的初始化。
性能测试的过程?
前期准备(功能稳定、组建团队)
选择合适的测试工具(loadrunner 商用型、jmeter(开源的)、自研的(华为:loadspace)
性能测试的计划方案(需求分析,计划,策略,资源)
性能测试的实现(准备环境->设计场景->编写测试脚本->辅助工具)
性能测试的执行(工具执行脚本->记录结果)
性能调优分析-》回归测试
性能测试报告
要测试的目的:本次性能测试预期要达到的性能要求
测试概要描述:结构,人员,环境,场景(重点),过程简介
测试结果和数据
测试结论
Jmeter
基于java开发的开源的测试工具:轻量级
性能测试
接口测试
支持多种协议
Jmeter 的组成部分
性能测试的原理:基于协议,用工具模拟实际操作(发送多个请求),并且收集测试数据,生成报告。
负载发生器:产生负载,产生压力,多进程或者多线程模拟用户行为
用户生成器:脚本运行的引擎,附加在进程或者线程之上
资源生成器:生成测试过程中服务的资源数据(收集测试数据)
报表生成器:根据测试中获取的数据生成报表,提供可视化数据显示方式
Jmeter 环境搭建
- 基于java,运行的时候需要 java的环境:JDK,要配置环境变量
Java 的环境: jdk(软件开发工具包)、jre(运行环境)、jvm(java的虚拟机)
dk 配置环境变量:JAVAHOME: C:\Program Files\Java\jdk1.8.0_111
Path: %JAVAHOME%\bin
CLASSPATH:.;%JAVAHOME%\lib;%JAVAHOME%\lib\tools.jar
验证:cmd命令窗口,输入 java 或者 java –version
- jmeter 是免安装模式,需要配置环境变量
JMETER_HOME: D:\apache-jmeter-5.2.1
PATH: %JMETER_HOME%\bin
CALSSPATH: ;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
验证:cmd 命令窗口:jmeter -v 或者 jmeter
jmeter 的启动
命令启动:jmeter, GUI 模式,供制定测试计划,调试脚本
批处理文件启动:
汉化:
- 当前页面一次汉化
打开jmeter的jmeter.bat文件,直接转换语言:
→option
→choose language
→Chinese simplified
二、永久汉化,修改配置文件,去掉 # 注释符,保存文件,重新启动Jmeter。
Jmeter 常见的测试框架
性能测试工具本质就是:依赖于协议,模拟人的操作(发送请求)。
测试计划:启动Jmeter ,就会有一个默认的测试计划生成,这个测试计划包含了本次测试所有相关的功能。建议名称进行修改,让其有意义。
线程(用户):线程组(主线程组,核心):需要进行性能测试的内容放在其中,不能为空;
例如:访问ecshop首页: http://localhost/ecshop/
Setup 线程组:初始化的(准备部分)内容,可以没有;如果有,一定是最先执行的。
Teardown 线程组:收尾的内容,可以没有
线程属性:线程数 ==》 用户数
Ramp-up :虚拟用户启动的时间,即用户开始发送请求的时间
循环次数:具体次数
永远:必须勾选添加调度器,有持续时间,不然无法结束,运行时系统会提示错误。
当同时设置了次数,并且添加了调度器,设置持续时间:系统运行会以循环次数为准。
取样器:测试对象及测试内容,基于线程,即要模拟的动作,就是需要模拟的请求。一个请求放在一个取样器中,例如 http 请求:协议、服务器地址、URL、端口号等等。
性能测试的过程类似于实际中拍电视或者电影的过程:
拍电视:剧本—》导演找演员,对演员的要求,按照剧本演—》录下来—》后期剪辑
性能测试:脚本(写/录制)--》 线程(虚拟用户),按照脚本运行(模拟人操作:发送请求)--》录下来(监听)--》性能结果和性能需求比对,性能调优—》回归测试
**Jmeter **中支持多个请求一起同时发送。
监听器:用来查看测试结果的,图形化显示,列表信息,常见几个监听器:
查看结果树:同时查看请求和响应的信息,绿色表示测试地址畅通,不代表成功,红色表示异常;
汇总报告:汇总请求发送的情况
聚合报告:汇总请求发送的情况结果
图形结果:图形化展示
表格显示展示:可以查看启动时间(starttime)
报告中各项指标说明:
注意:平均响应时间的单位是 毫秒
标准偏差:系统离散程度,体现系统的稳定性,值越小,越稳定
聚合报告
汇总报告
注意:导出报告报表时,打开出现乱码
处理过程:用记事本打开,另存为 csv 格式,另存的时候修改编码格式,从utf-8修改 ANSI,再重新打开另存好的文件,就可以了。
性能测试的过程类似于拍电视的过程:
拍电视:剧本 –》导演、演员 –》录下来 –》后期制作 –》成片
性能测试:脚本(写/录制)--》虚拟用户(按照脚本执行)--》收集数据(工具自动)--》分析,调优—》达标
脚本增加:配置元件
http 请求默认值:http 请求默认公用信息的设置
http 请求页面参数说明:
请求响应结果出现乱码,处理:
原因应该是响应页面没有做编码处理,jmeter默认是按照 ISO-8859-1编码格式进行解析。
找到属性配置文件,修改参数:找到配置文件中 sampleresult.default.encoding ,此行是默认注释掉的,将iso-8859-1 修改为 utf-8,去掉注释符号,重启jmeter
修改后:
版权归原作者 钟旬 所有, 如有侵权,请联系我们删除。