您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件测试技术 > 性能测试 > 正文

性能测试分享

发表于:2018-07-20 作者:喵喵喵喵苗啊 来源:新梦想软件测试

1.需要了解的基础知识

HTML语言基础:比如post请求、元素、属性、链接、表单、url等都需要了解

C语言基础:后期使用Loundrunner,它有些东西是基于c语言写的,基本的知识即可

http协议:后期要对接口做性能测试,了解http请求,如get、post请求,请求返回的状态码,请求报头信息等

xml:与html类似

JSON:如post请求,其中都是用json传输数据

数据库:增删改查,操作后要确认数据是否正常

2.性能测试基础介绍

(1)性能测试重要性与功能测试区别

从功能测试向性能测试转变的时候,需要注意的是:需要把功能测试的思想去掉,往性能测试上转换。

(2)性能测试分类



负载测试:看一下系统指标达到的极限,达到哪个极限的时候系统处于饱和的状态

压力测试:有时候也叫强度测试,cpu、内存都在100%使用的情况下,系统处理各自任务的能力,是否会出现错误

并发测试:用户同时向一个应用发送请求,看系统多久可以将并发的数据完成

配置测试

可靠性测试

(3)多角度看待性能



没有一个准确的标准,从不同的角度看,解释就不一样。

从用户来看,软件性能就是软件对于用户操作的响应时间;从运维的角度看,软件性能表现在系统是否能够提供给用户稳定、可靠的服务;从开发角度看,软件性能表现在如何通过调整代码的设计和实现,使其达到最高。

角度不一样,性能的理解是不一样的,不一定都是提高软件的运行速度,如银行软件,并不要求速度高,需要的是稳定运行,保证数据不出错

需要站在不同的角度看。

(4)性能测试主要术语



并发数:也叫做虚拟用户数,在同一时间点向系统发送产生的交互数量,如12306抢票,八点开始抢,八点整大家一起开始抢票,如果有100个人正在抢,那这个100就是一个并发数

注册用户数:指当前系统中全部注册的用户数量,和并发数不一样,并发数指和系统产生交互操作的数量,注册数量只是注册,并没有产生交互

在线用户数:当前系统时间段内,登录系统的用户数量,但在线用户数并不一定都和系统产生了交互

事务:比如登录网站,输入用户名、密码、点击登录,这三个操作就可以看成一个事务,即登录事务

TPS:每秒通过的事务数,即每秒处理的事务数量,它是衡量系统处理能力的重要指标

吞吐量:比如被测系统所产生的数据流量,点击网页,网页是10M,这10M就是产生的数据流量,如果有10个人点击,那就是10*10的数据流量,即为网页的吞吐量

每秒点击率:客户端每秒真正发给服务端请求的数量,比如有个接口,每秒向这个接口发送多少请求,这个不能反映系统的性能,只能反映客户端向服务端发送请求的数量

思考时间:用户访问这个网页的停顿时间,比如输入用户名和密码,要确定用户名和密码是否正确,这个等待时间就叫做思考时间

资源利用率:如cpu占用率,内存使用率,IO等使用率和时间,需要后台监控,才能看出来

3.性能测试流程

一般写性能测试脚本时,要进行的操作:

需求分析,测试点提取(分析后,要对哪些功能进行性能测试,比如是要求网页的tps达到1000还是2000,还是说吞吐量达到多少;上面所说的性能指标,每一个性能指标就是一个测试点,究竟要测试哪一个,这里就要确定;如何提取测试点:一般参考历史数据,历史上测试点有哪些;客户提出的;参考同行业、通项目性能测试的指标;业界通用的规则,大家都达到的一个性能指标)

指标的评估:比如tps,要达到多大值,如果是新系统,会以自己测试标准为准或者内部制定标准,以这个标准为起点进行性能测试,循序渐进,慢慢提高

制定计划:制定好后,和其他组进行评估,如果没评估通过,继续制定,如果通过了,就进行下一步

搭建测试环境,编写用例,执行用例,调试用例,调试完查看是否达到要求

4.测试框架体系

(1)LoundRunner


Loundrunner:分为三个小的功能点,即三大组件:编写代码组件、场景组件、分析组件

编写代码组件、场景组件、分析组件都要使用起来,一般都是先把脚本写好,去掉脚本中没用的信息,再进行场景设计,如每隔多少秒添加一个用户,登录场景:每隔多少秒登录多少个用户,多长时间达到一个最大用户数,中途连续执行多长时间,达到连续时间后每隔多少秒减少多少用户,多长时间把最大用户减为0,跑完后就会有个报告,然后用分析组件进行分析,便会产生一些参数值或信息

不要指望软件就会提供系统的性能问题,性能指标都是人工分析出来的,软件永远不会提供,性能测试并不是对性能测试工具的了解,而是长期的经验积累。

Loundrunner也可以做接口性能测试。

(2)Jmeter

主要做接口性能测试。可以单独做接口测试,也可以做接口性能测试

资源利用率:IO利用率、内存、cpu利用率,如果服务器是linux的,需要在linux服务器下添加插件,监控系统的指标,跑性能测试脚本的时候(shell脚本或插件),会将这段时间的cpu等的指标收集起来,Jemeter/Loundrunner生成的报告和linux监控信息综合起来,具体确定哪个地方会产生问题

常用的:Jenkins+Jmeter+Ant

(3)Soapui
(4)Linux
(5)服务器中间件调优


tomcat、appach、ant等,主要是一些配置文件的优化,如果会appach优化,tomcat也就会了,参数大多数是一样的,比如请求数、最大链接数

MaxRequestsPerChild:每个子进程在其生存期内允许伺候的最大请求数量,默认为10000。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。

中间件配置优化,并不是某些参数配的越高越好,讲究一个平衡,各个参数平衡,才能最优

(6)数据库:mysql优化



抓取大范围,牵扯小范围。如:mysql下,把慢查询打开,查到10条,挑出一条最慢的,进行分析,是没做索引?还是链接太长?一般是先加索引,如果还没有优化,便可以把它拆开,并不是所有的sql语句都要放到后端处理,可以拆开一部分放在前端,前端处理完后,传给后端,减轻了后端服务器的压力

一般的做法是:分库分表;多库多表;主从分离。

(7)JVM调优



了解java基础知识:年轻代、年老代、持久代分清楚,java配置文件中有这几个代的占用内存大小的配置;jc,什么叫jc,jc是java中独有的管理垃圾回收的策略,系统自动执行,如果有些类、方法加载后,长期不使用,便会触发jc垃圾处理机制

jc内存泄露:监控jvm中年轻代、年老代以及类的占用内存大小的时候,如果看到一些内存信息被占用的越来越大,那就有可能存在内存泄漏了

一般jc之后,年轻代、年老代的内存占用率会回到一个很低的值,然后再慢慢加,加到一定程度,又会触发jc,再回到一个低点,如果很有规律,基本没有内存泄漏

一般系统运行很久之后,才能看出是否存在内存泄漏

jprofiler_windows:检测内存泄漏工具,可以模拟出当前代码是否存在内存泄漏

(8)项目+框架




每个网站刚开始做并不是就有一个很好的优化框架,都是一点点调优,网页结构最初都是web服务器、数据服务器、文档服务器组成。

web数据从数据库直接读写,支撑不了了再加入一些静态数据库缓存,web服务器端和数据库服务器端加入cach缓存,如ridis,数据服务器就升级了。

继续发展,流量增加、点击量增加,没法支撑,便会考虑部署集群,集群部署简单说就是多加几台服务器,这时候就牵扯到负载均衡,它来控制浏览数据的时候到哪个服务器上取数据。

数据库越来越大,查询效率低,便会进行数据库分离,如分库分表、多库多表等,一般分为水平切分和垂直切分。

不同业务存放到不同数据库,减轻压力,比如将经常用到的放到数据库A上,用的很少的放到数据库B。

疑问解答

(1)数据库出现性能问题,一般有哪些原因组成:

答:锁表,锁表并不能影响性能,因为都无法进行操作,锁表不属于性能方面问题。一般都是索引设置不好,语句拼写太长,各种查询条件太多

(2)性能测试推荐书籍

答:如果没有基础,淘宝、京东随便找一本书都挺好的,先看一本。

性能测试,Jemeter、Loundrunner只是性能测试工具,比如Loundruner录制完,产生好多脚本,归根结底还是以接口的形式在向网站发送请求,所以一定要把接口弄明白。

(3)Jemeter、Loundrunner、SoupUI都学会了,那应该怎么选择呢?什么情况下用?

答:webservice接口测试,可以选择soupui,基本不用编写代码http协议的接口测试,建议使用jmeter、loundrunner界面的性能测试,建议使用loundrunner

个人收获

(1)对于一个小白来说,只是听过性能测试这个名词,对它究竟怎么测?怎么衡量,需要哪些知识,根本没有概念,这次分享,真是涨知识了,开阔了自己的眼界。

(2)公司也是刚开始进行性能测试,现在也是在摸索阶段,之前开会听的时候有些东西因为没有概念,所以听别人讲起,只觉得很厉害,这次分享之后,自己也知道他讲的哪些是对的,哪些是错的了。

(3)对于性能测试,自己也知道如何下手了,先从掌握基础知识开始。