1、性能测试怎么测试?
性能测试其实就是通过自动化工具模拟多种正常、峰值以及异常负载来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,二者可结合使用。
性能指标主要有平均响应时间、90%响应时间、吞吐量、吞吐率,每秒事务数,以及服务器的资源使用率(CPU 占比,mem 内存占比等)等。当并发用户数超过 300 时,为了让测试数据更准确,可以考虑分布式压测,通过 jmeter 客户端控制几台 jmeter 服务器进行测试。
性能测试要先调试好脚本,主要考虑对脚本的数据参数化和添加断言。因为有些接口需要对业务逻辑或参数格式进行校验,为了能让所有线程数跑起来,需要将数据参数化。
数据参数化有这几种做法:
1、可以将一些固定值改成随机函数;
2、利用 JDBC 从数据库读取数据并关联变量;
3、Excal 数据参数化,
4、动态关联参数化,断言是为了判断用例是否执行成功,并验证服务器的响应错误率。响应断言常用 json 断言,xml 断言用的最少,性能测试的目的是为了检验系统能否满足客户的性能需求,若性能需求无法满足时,则要考虑对系统进行性能调优,一般用排除法:
1、首先考虑网络方面问题:使用 ping 命令查看与目标服务器的连接是否正常、传输速度的快慢。通过提升服务器的带宽,看响应时间是否相应降低。
2、考虑数据库的问题,可以单独去压测数据库,查看数据库的最大连接数和 SQL 语句的执行时间,索引命中率和 sleep 等待时间等
3、考虑 Apache/Nginx 等中间件的问题,查看中间件设置的最大连接数是否合理,如果设置的连接数太小,会话数超过设定的最大连接数时会导致等待时间变长,出现响应超时情况
4、考虑服务器的硬件配置,如内存、CPU、磁盘读写速度等,可以用 top 命令来监控,也可以使用nmom 工具来监控,nmom 会把监控的数据形成表格形式,方便我们查看。
5、最后考虑开发代码写的好不好,处理时间长不长的问题。
举例:
在我之前的公司,我们主要是会考虑用户操作使用比较频繁的模块,比如借贷,充值,投资模块,我们一般会通过增加并发数来压测,观察 CPU、mem、磁盘读写、吞吐量和每秒事务数等性能指标,以前我老大要求我并发 100 个用户,我用 jmeter 把线程数设为 100,永久循环,持续时间半个小时,设置启动延退 55,在 Linux 启用 nmom 工具监控服务器。
当我运行脚本的时候我看聚合报告 90%的平均响应时间达到了 6s,吞吐量也比较小,用 top 命令监控资源发现 CPU 差不多到了 100%。于是我用 Navicat 工具通过 SQL 命令 show full processlist 取当前运行的 SQL 语句,发现有许多语句用的是左关联,在查看了这条 SQL 语句的执行计划发现没有用索引,再查看了索引的命中率,命中率倒是还行看了下 nmom 生成的报告,发现 CPU 一直是处于爆满状态,其中主要是 mysql 的占比很大,这个时候我基本上判断数据库的问题。
于是我就照着前面的步骤再次压测,同样还是用 nmom 工具去监控 CPU,mem 网络等状态,这次我是主要在 Navicat 上用命令去抓取 SQL 语句,还是一样有很多语句都是左关联,并发现很多空连接(sleep),我就用 show global variable like"wait_time"命令查看了设置的休眠时间(等待时间)发现时间很长 28800s,然后我就把这个休眠时间改成了 20s,因为 SQL 语句使用了很多左连接,我就用show variables like"tables_size"查看了临时表的空间大小、发现临时表只有 16m,我将空间改成了 1G再去压测了下,发现 CPU 只是降了 10%左右,nmom 报告上还是显示 mysql 占的 CPU 很大,然后运行的时候,用 top 命令监控,发现有的时候有很多 mysq 进程同时运行(因为没有设置连接池),我就用命令查看了下 mysql 的最大连接数,因为 SQL 语句的执行速度还是挺快的,所以就把 mysql 的连接数调小到 50,再去跑了一遍发现 CPU 降到了 40%左右,并且其他的性能指标也都还不错。最后把聚合报告的数据以及 nmom 的数据整理成性能报告给老大,其实做接口性能主要就是用排除法个一个去排除,发现性能问题就要先解决了性能问题再压测,不然其他的问题也有可能是这个性能问题导致的所以接口性能基本上就是观察,各个性能指标都在范围之内就差不多了。
2、性能测试流程是怎么样的?
另外一种问法:简单介绍下你们公司的性能测试流程是怎么样的?
我们那个项目的性能做得不多,公司要求也不严格。
对于流程这块,首先就要对整个系统进行详细的分析,确定基本的测试范围,看下系统的哪些业务是需要做性能测试的,还有就是做那方面的性能测试,对于我们那个项目,当时就做了几个业务做了些简单的并发压测(稳定性)这块,像登录的,搜索查询,下单,还有就是购物车里面的几个接口都有做过,然后就是对各个业务场景进行详细的场景分析与设计,确定每个业务场景的并发数,是否需要设置集合点啊,压测时间是多长,还有各个业务场景的性能指标等等,场景设计这块基本上都是老大跟产品哪个一起弄的,我参与的不是太多。
上面把个场景设置好了之后,提交给我们,我们就是根据老大设置好的那些场景编写了基本的性能测试用例,其实做性能测试,我觉得前期最关键的还是业务场景一定要设计好,后期我们主要的任务就是准备各自任务需要用到的一些测试数据,搭建好测试环境,还有就是测试脚本设计与开发,执行,并生出测试报告,对于测试结果我们一般会简单的做个分析,如果没有什么问题,基本后期就写一个性能测试报告。流程大概就是这样的。
3、你们性能观察哪些指标,大概指标范围是怎么样的?
对于指标这块,业务方面的指标主要有:并发数,90%用户的平均响应时间
错误率,吞吐量/吞吐率这些,例外还需要关注服务器资源的使用情况,像:CPU 的使用率、内存的占有率,磁盘 IO,网络。
我们那个项目当时只针对,登录,搜索查询,下订单,购物车相关接口,支付等业务做了些简单的并发,压测这块,指标大概是这样的:
单基准业务并发测试登录,注册,查询 1s 以内,下订单,购物车相关接口,支付 2s 以内,混合业务性能:5s 以内
响应时间:登录,注册业务<2s 之内查询,下订单,购物车,支付业务<3s
充值,提现,查看充值日志,查看提现日志业务查询标的,<3s
投标,申请借款<5s
错误率:0
吞吐量/吞吐率:200 左右请求/sec
CPU:80%以内
内存:80%以内
I/O: %util<=80%,%nowait<=20%
%util: 磁盘一秒中有百分之多少的时间用于 I/O 操作,
% nowait:磁盘等待处理时间占比
带宽:<=系统带宽的 30%,无丢包,无延迟,无阻塞
4、这个测试的环境配置,如转速度?
租用的服务器,一台数据库服务器,一台后端服务器
8 核 16G 网络带宽 1000M,2.5GHZ 磁盘 15000pm 转数
5、性能测试计划有哪些内容?
主要是时间进度安排与工作安排,主要是环境,测试任务,测试需求,测试方法与策略,测试环境准备,测试通过的标准。
比如说原来我们一个项目性能测试时做了 5 天,那我们计划是,测试策略与用例编写一天,测试准备需要 1 天,测试执行 2 天,报告总结 1 天。
6、有没有写过性能测试报告,具体包括哪些内容?
性能测试报告,需要每次 Jmeter 压测完成的 html 报告的数据跟 nmon 工具监控的数据,整理出一份性能测试报告,性能测试报告,主要包含:
1,测试资源(环境,测试数据,表里面需要多少数据,测试工具)
2,测试设计(测试业务,测试类型,测试时间,并发用户数)
3,测试分析(每一个场景都需要分析)
4,测试结论(能不能上线,不上线的原因)
5,优化和建议
6,测试通过的标准,平均响应时间<5s,资源利用率<75%,事务失败率<5%
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取