七.locust做性能测试

(一)locust简介

locust(蝗虫):是基于Python语言的性能测试工具,它是基于协程的思想来进行设计的。Python语言是没有办法利用多核的优势,所以了Python为了解决这个问题,设计了协程,作为协程的任务,遇到IO堵塞就立刻切换。 生命是协程,协程可以简单的来说就是微线程。

主要做负载测试、稳定性测试,也可以做压力测试

安装命令:pip3 install locust(打开cmd直接安装),超时的话重新操作

安装成功。

(二)做性能测试—压力测试

步骤:

1.写好Python代码文件,假如放在桌面

2.cmd进入路径,输入命令:locust -f locustfile.py

3.端口是8089,那么本地访问:http://localhost:8089/

4.开始测试:http://101.43.158.84:5000(所给测试地址)

 

 

 

 

 

注意:

  • 设置的用户数和requests不是一致的,一个用户可以多次请求

  • locust使用的是协程(微线程)的方式,而jmeter是线程的方式

 

locust注释:

(三)做性能测试—负载测试

步骤如压力测试,只是错误率变高

八.性能测试项目实战

(一)性能测试计划:

1.背景

描述做这件事的前因后果

2.前期准备

做这件事需要做哪些准备,比如服务器、数据

3.技术工具

使用什么工具、是否自己写代码(locust需要写Python代码)

4.测试范围

具体的工作内容

5.测试风险

根据实际情况,看有无风险。即有哪些依赖项

(二)具体的设计和开发:

需要和leader核对

1.一码通需要做性能测试的点

同时扫描的响应时间,多少个人扫描能扫出来,查看核算检测报告的请求会出结果吗

关注指标:

100万 90万 150万人数

  1. 系统资源:CPU与内存

  2. 响应时间:最小,最大,平均,中位数,90%,95%,99%

  3. 吞吐量

  4. IOPS,连接数

2.上传文件最大支持2G

关注指标:

上传文件成功需要的时间;上传过程中打开jvm观察cpu、内存变化的趋势

结果:5min上传成功且无oom,那么

a.需要测试一个人上传多大文件会oom,比如2.2g时oom。为保险>2g的不允许上传

b.需要测试有几个人同时上传2G文件会导致oom。比如11人同时上传2g文件,发生oom。那么保险起见设置9人/10人可以同时上传2g文件,其余的采取队列排队形式处理。当9个同时上传的时候,最快上传和最慢上传的时间是多少,最慢的时间是否接受

怎么设置测试场景?利用locust设计代码

⽀持持续的发送API请求,post请求

import time
from locust import HttpUser,task,between

class QuickStartUser(HttpUser):
   host = 'http://47.95.142.233:8000'
   min_wait = 3000
   max_wait = 6000

   def login(self):
      r=self.client.post(
         url='/login/auth/',
         json={"username":"13484545195","password":"asd888"})
      return r.json()['token']

   @task
   def api(self):
      r=self.client.post(
         url='/interface/run/api/32',
         headers={'Authorization':'JWT {token}'.format(token=self.login())})
      assert r.status_code==200

(三)性能测试报告分析

1.参与人员

2.测试结论

3.过程数据

以2G文件上传为例:

测试结论:文件大于2.2g会发生oom,11人同时上传2g文件,发生oom。建议文件大小2g,同时上传人数10人

过程数据:一个2g文件5min上传成功且无oom,那么继续测试发现

1. 当文件>2.2g时发生oom
2. 当11人同时上传2g文件,发生oom。那么保险起见设置9人/10人可以同时上传2g文件,其余的采取队列排队形式处理。当9个同时上传的时候,最快上传和最慢上传的时间是多少,最慢的时间是否接受

100万

过程数据:
系统资源
响应时间
吞吐量
IOPS
测试结论

4.错误汇总

5.测试风险

比如2g这个文件上传10次出现了1次oom

6.测试结论

【面试】

【1.性能测试流程(模型)】

1.结合产品的需求文档和产品的用户体量和系统的架构,梳理前期测试目标,比如吞吐量多少,测试人员主导和其他相关人敲定

2.拟定性能测试计划,包含了

  1. 明确每个性能测试的任务开始结束时间

  2. 明确每个任务的负责人

  3. 明确性能测试的工具(如下)

  • LoadRunner:HP公司研发的工业级别的性能测试工具,是收费的一款性能测试工具

  • JMeter:100%使用Java语言研发的性能测试工具,是开源的,互联网公司基本使用的都是该性能测试工具

  • Locust:是基于Python的协程来设计的性能测试工具,需要编写Python代码来进行性能测试

  • Gatling:是微服务架构下高性能的性能测试工具: HP公司研发的(用的少)

3.与相关人员评审测试计划测试点,做进一步的修改和确认

4.执行测试,进行数据收集

  1. 多次测试执行,收集每次性能测试的数据。包括系统资源:CPU和内存、数据库:连接数和iops、jvm资源:内存资源。响应时间:最大、最小、中位数、平均、中位数,90%,95%,99%,吞吐量

  2. 收集后的数据可视化展示

5.最后做测试分析

实际收集的结果得到最终的结论,比如吞吐量响应时间等,与期望的目标进行对比,判断是否达到目标

【2.负载测试与压力测试有什么区别】

1.负载测试

目的: 1、验证服务被部署的系统出现资源瓶颈的时候,服务依然能够提供产品的特性 2、找到系统的最大饱和状态,或者是最大的处理极限,为系统后续的容量规划提供参考的数据

在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量

2.压力测试

该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut,OOM,OverStackExpection(堆栈异常)。压力测试的特点: 检查系统在处于压力情况下时应用的性能表现 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上) 这种方式一般用于测试系统的稳定性 稳定性:指的是系统在最大的极限下,依然能够正常的访问,不会对客户造成任何的影响。

验收测试流程:测试完成后产品经理进行验收,会有邮件回复

【3.性能测试关注哪些指标】

  1. 吞吐量、最大最小响应时间

  2. 系统资源:CPU、内存

  3. 响应时间:最小最大平均中位数、90%,95%,99%

  4. 数据库:iops、连接数

  5. jvm的资源变化趋势

【4.性能测试通过的判断依据是什么?】

判断依据就是我们的测试目标

【5.常用的性能测试工具有哪些以及它的区别】

  1. LoadRunner:HP公司研发的工业级别的性能测试工具,是收费的一款性能测试工具

  2. JMeter:100%使用Java语言研发的性能测试工具,是开源的,互联网公司基本使用的都是该性能测试工具

  3. Locust:是基于Python的协程来设计的性能测试工具,需要编写Python代码来进行性能测试

  4. Gatling:是微服务架构下高性能的性能测试工具: HP公司研发的(用的少)

【6.常用术语分别是什么意思】

1.响应时间

响应时间=⽹络时间+应⽤程序的处理时间,响应时间是一个http完整的请求流程时间之和,请求和响应时间之和。

2.并发用户数

性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,描述的是同一时间同时向客户端发出请求的客户

3.IOPS

该术语主要是针对数据库的,也就是每秒发⽣的输⼊/输出操作的次数,是数据传输的⼀个度量⽅法。⽤于磁盘的读写,IOPS指的是每秒读和写的次数,反映在硬盘上,数据库读写速度。

4.TPS/QPS

事务指的是某个操作或者是⼀组操作的组合。TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。QPS指的是每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准

5.吞吐量

吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时间内客户端请求的数量,体现的是系统每秒能处理多少请求

吞吐量与并发测试区别:【重要】

并发测试:同一时间段同时向系统发送请求

吞吐量:该时间段内系统能处理的任务数

【7.在性能测试之前需要做哪些准备】

  1. 梳理前期测试目标,比如吞吐量多少,测试人员主导和其他相关人敲定

  2. 性能测试的目标参考依据是什么?产品的需求文档和产品的用户体量和系统的架构。

*例如淘宝性能测试场景:同时多少人登录,商品响应时间,同时多少人支付、领取优惠、收到短信营销

【8.性能测试中,开发说需要加服务器怎么办】

可以加,生产、开发、测试都加,全部保持一致。如果只有开发加,是不行的。

性能测试注意事项:

1.测试环境服务器的配置与生产环境服务器的配置必须一致,这样出的结论才有参考价值

【9.什么是生产者消费者模型】

生产者消费者模式:通过队列:Queue 实现

生产者(Producer) :不断的生产数据,使用的方法是put

消费者(Consumer):不断的消费数据,使用的方法是get

队列:Queue 规范:First In First Out ----》先进先出

【10.IO密集型以及CPU密集型的区别是什么】

工作负载类型:

CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU。主要指计算型的程序,程序存在海量数据筛选出具体的数据。

IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源 系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。主要指读写类程序,程序存在大量的文件Io读写,短信营销优惠券发放。

【11.一个好的系统表现应该是如何的?】

能满足各种高并发状况依然为客户提供业务能力和服务

高并发下特别容易发生死锁、线程同步,尤其是文件读写业务
死锁:

A和B两个,为了保持线程同步,那么A操作B的时候,锁定B,B操作A的时候,锁定A。

线程同步:

A和B两个任务,任务就是线程,任务发生冲突。处理方式:加锁机制 , A操作时B不能操作】

【12.怎么理解资源调度?】

crm:客户管理系统

计算机中操作系统的最小单位是进程,进程最小的运行单位是线程。比如钉钉是进程,但是可以干很多事就是多线程程序。线程在执行时,由操作系统分配资源,操作系统通过操作系统的时间分片结合调度的算法来分配资源,决定哪个线程先执行哪个先不执行。调度过程中算法有抢占式算法调度,根据任务优先级,优先级高的优先分配资源,优先级低的后分配资源。比如Linux,Mac,java。线程优先级最高是10,最低是1,默认是5

调度策略:

在操作系统级别,专业的来说,调度器可以理解为:CPU时间划分给活跃的进程和线程,⽽且维护⼀套优先级的机制,这样更重要的工 作可以更快的执⾏,调度器会跟踪所有ready-to-run状态的进程。调度策略(调度器)可以动态的优先提升工作负载的性能。