性能自动化+locust

性能自动化+locust

(仅作为个人笔记,如有雷同,请联系删除。。)

性能测试基础:

1、性能测试相关概念:

  1. 性能测试:测试软件的性能表现,考量软件运行的如何。
    一般关注时间/效率、资源占用等情况
  2. 响应时间:应用系统从用户发出请求开始,到客户端接收到所有数据所消耗的时间
    网页的响应时间可以细分为网络传输时间、DNS解析时间、应用服务器处理时间、数据库处理时间等
  3. 在线用户、并发用户、虚拟用户区分:
    (1). 在线用户:正在使用软件的用户。
    (2). 并发用户:同一时刻与服务器进行数据交互的所有用户数量。注意:在线用户未必是并发用户。
    (3). 虚拟用户:性能测试工具(LR、Jmeter)使用虚拟用户模拟真实用户的行为。
  4. 吞吐量和吞吐率
    1. 吞吐量一段时间内服务器处理的总字节数
    2. 吞吐率单位时间内服务器处理的字节数,即 吞吐量/测试时间
  5. 每秒事务数tps:系统每秒处理的事务数。
  6. 点击率每秒钟用户向服务器提交的http请求的数量。【注意:点击一次可能会向服务器发出多个http请求
  7. 思考时间/休眠时间/等待时间:用户进行操作时,每个请求之间的时间间隔
  8. 资源利用率和性能计数器
    (1). 资源利用率:服务器系统中不同硬件资源被占用的程度,主要包括CPU利用率、内存利用率、磁盘利用率、网络等
    (2). 性能计数器:描述服务器或操作系统性能的一些数据指标。主要通过添加计数器来观察系统资源的使用情况。
  9. 负载测试、压力测试与并发测试
    1. 负载测试:通过对被测系统不断的加压,直到超过预定的指标或者部分资源已经达到了一种饱和状态不能再加压为止。—— 主要是为了寻找系统最大的负载能力,为性能调优提供依据。
    2. 压力测试当系统已经达到一定的饱和程度(如CPU、磁盘等已经处于一种饱和状态)时,测试系统处理业务的能力,测试系统是否会出现崩溃等。—— 一般用于系统稳定性测试。
    3. 并发测试模拟用户并发访问,测试多用户同时访问同一应用、模块或数据,观察系统是否存在死锁、系统处理速度明显下降等性能问题。

2、web访问原理:
性能自动化+locust_第1张图片

3、http响应状态码:状态码由 3 位数字组成,第一位表示响应的类别。

  1. 1xx:指示信息,表示请求已接收,继续处理。
  2. 2xx:成功,表示请求已被成功接收、理解、接受。
  3. 3xx:重定向,要完成请求必须进行进一步的操作。
  4. 4xx:4 开头的代表客户错误。
    1. 403 错误
      1. 表示资源不可用,服务器上文件或目录拒绝访问。
      2. 通常由于服务器上文件或目录的权限设置导致的 WEB 访问错误。
    2. 404 错误
      1. 告诉浏览者其所请求的页面不存在或链接错误。
      2. 通常是在目标页面被更改或移除,或客户端输入页面地址错误后显示的页面。
  5. 5xx: 5 开头代表服务器端错误。
    1. 一般的产生原因是由于服务器不支持的组件而出错

4、性能自动化:

  1. 使用代码模拟大批量用户;
  2. 让用户并发请求;
  3. 多页面多用户并发请求;
  4. 采集参数,统计系统负载能力;
  5. 生成报告;

locust 性能自动化测试:—— 只能做多用户并发压测???

5、性能自动化测试-locust库:

  1. 使用代码批量创建用户
  2. 分布式:可以在多台服务器上进行分布式性能测试;可伸缩性强
  3. 稳定、应用广泛:经得住各种场景下的考验,基于web UI界面展示测试详情;可以测任何系统

6、安装 locust:

pip install locustio

安装完成后,cmd执行locust --help查看是否安装成功

7、locust基本用法:

  1. 性能测试任务

    ### 在项目根目录下创建locustfile.py文件
    form locust import Locust, TaskSet, task
    
    class MyTasks(TaskSet):
        """
        创建测试任务类,需要继承TaskSet,可以添加多个测试任务
        """
        "每个测试任务,往往会以实例方法的形式呈现,同时需要使用task装饰器修饰测试任务"
        @task
        def one_task(self):  
            print("Run a test task ...")
    
    class RunTasks(Locust):
        """
        创建运行测试类,需要继承Locust父类
        """
        task_set = MyTasks  # 指定测试任务类,使用task_set覆盖父类的类属性
        min_wait = 2000  # 使用min_wait、max_wait覆盖父类的类属性
        max_wait = 5000  # 启动任务间隔的时间范围(单位:ms):2 ~ 5s
    
  2. 执行性能测试

    # cmd / Pycharm Terminal控制台,执行性能测试
    locust -f locustfile.py
    

    (1). 运行之后,控制台会在本地监听一个端口:8089
    (2). 在浏览器打开UI设置界面localhost:8089

    1. 并发用户数
    2. 创建用户的间隔时间

性能自动化+locust_第2张图片
性能自动化+locust_第3张图片

性能自动化测试实战案例:

8、自动化测试脚本:

根目录下创建 test_load.py

from locust import HttpLocust, TaskSet, task
class AdminLoadTest(TaskSet):
    """
    创建后台管理站点压测类,需要继承TaskSet,可以添加多个测试任务
    """
    def login(self):
        """
        登录实例方法
        """
        self.client.post("http://localhost:8088/users/login/",
                         {"user_account": "admin", "password": "123456"})
    def logout(self):
        """
        退出登录
        """
        self.client.get("http://localhost:8088/users/logout/")
    def on_start(start):
        """
        任何一个task调度执行之前,on_start方法会被先调用
        """
        self.login() # 先登录
    def on_stop(self):
        """
        任何一个task调度执行之后,on_stop方法会被调用
        """
        self.logout() # 后退出登录

    @task
    def admin_index(self):
        """
        对后台主页进行压侧
        """
        self.client.get("http://localhost:8088/admin/")

class RunLoadTests(HttpLocust):
    """
    运行测试类
    """
    task_set = AdminLoadTest

9、运行测试: locust

--host参数指定http主机地址
-f 参数指定压测程序文件名

locust --host=http://localhost -f test_load.py

10、在web UI界面进行配置:

设置并发用户数为10,每5s创建一个用户
性能自动化+locust_第4张图片
性能自动化+locust_第5张图片

你可能感兴趣的:(测试开发,python,性能优化,自动化)