zoukankan      html  css  js  c++  java
  • 【Linux】【压测】基于python Locust库实现自动化压测实践

    关于python+locust系列:

    【Linux】【压测】关于python实现性能自动化工具之Locus: https://www.cnblogs.com/haochuang/articles/13230602.html
    【Linux】【压测】基于python Locust库实现自动化压测实践: https://www.cnblogs.com/haochuang/p/13231445.html


    基于Python locust,实现自动化压测,这里直接介绍实践的情况,对于环境与安装等,请参考前一篇文章:【Linux】【压测】关于python实现性能自动化工具之Locust

    首先大概说下本次实践的思路,主要就是分如下几个步骤:

    1.环境安装,与待压测的数据、API准备;

    2.代码编写,涉及到读取外部参数等;

    3.压测执行,与运行结果查看,监控等;

    下面,我按此3个步骤介绍:

    1.环境安装,与待压测的数据、API准备;

    由于之前项目需要,我本地安装有Python2、Python3两个版本,可以根据需要随时切换使用。

    IDE,我本地也有两个工具:PyCharm、VSCode。本次基于VSCode测试。

    Python2、Python3、PyCharm、VSCode这些的相关安装配置之类,基本没有什么,此不赘述。

    首先需要准备好待压测的API、以及待压测的参数。

    这里我先用一个基本的GET的做样例:

    GET    /api/rest/v1/en/haochuangrtest/query?number=1234567890@HAOCHUANG

    参数的话,目前这个主要是number后面的 需要变化,我们可以根据需要通过脚本生成,或者直接从DB里面获取一些,并写入到txt中。

    这一步的目标就是要首先保证API和参数本身可用,可访问,http请求可达。

    不论是是哟个postman还是postwoman去测试都可以,只要API请求返回正确就可以了。

    2.代码编写,涉及到读取外部参数等;

    代码编写,我举个目前的样例如下:

    test_haochuang_locust.py

    from locust import HttpLocust, TaskSet, task, HttpUser, between
    
    '''
    D:CODECODE_VSCodeHAO_VSCcodeHAO_AutoTestLOCUSTHAO_LocustLocustDemo> locust --host=http://localhost -f .	est_haochuang	est_haochuang_locust.py
    '''
    
    class AdminLoadTest(HttpUser):
        wait_time = between(5, 9)
    
        """
        创建后台管理站点压测类,需要继承TaskSet
        可以添加多个测试任务
        """
           
        @task(3)
        def get_status_more_HAOCHUANG(self):
            """
            查询实例方法
            :return:
            """
    
            rootdir = "D:\CODE\CODE_VSCode\HAO_VSCcode\HAO_AutoTest\LOCUST\HAO_Locust\LocustDemo\test_haochuang\HAOCHUANG.txt"
            with open(rootdir, 'r') as file_to_read:
                while True:
                    line = file_to_read.readline()
                    if not line:
                        break
                    line = line.strip('
    ')
                    self.client.get("https://www.cnblogs.com/haochuang/api/rest/v1/en/haochuang/query?number="+line)
            file_to_read.close()  
    
        
        @task
        def get_status_one_HAOCHUANG(self):
            """
            当任何一个task调度执行之前,
            on_start实例方法会被调用
            先登录
            :return:
            """
            self.client.get("https://www.cnblogs.com/haochuang/api/rest/v3/en/haochuang/query?number=26572316@HAOCHUANG")   
    
    
    class RunLoadTests(HttpUser):
        """
        创建运行压测类
        """
        task_set = AdminLoadTest

    txt文件比较简单,里面就是测试数据,主要是在python中需要把路径制定正确,路径中的注意转义;

    具体代码写好之后,我们可以运行:

    PS D:CODECODE_VSCodeHAO_VSCcodeHAO_AutoTestLOCUSTHAO_LocustLocustDemo> locust --host=http://localhost -f .	est_haochuang	est_haochuang_locust.py

    然后,在浏览器中设置好需要的模拟用户数量,以及需要压测的速率。

     

    3.压测执行,与运行结果查看,监控等;

     Charts:

     

     Failures:

    Download Datas:

    下载文件可见结果如下:

     对于具体的参数,更多扩展等,也可以学习一下官方的这个手册:https://docs.locust.io/en/stable/quickstart.html,里面有比较详细的介绍。

     至于等待时间,以及压测其他参数调优,过程控制等,我下次再实践之后补充文档介绍。

    待续

  • 相关阅读:
    Java学习62
    Java学习61
    Maven3种打包方式之一maven-assembly-plugin的使用
    sftp 上传下载 命令介绍
    JMock+Junit4结合完成TDD实例
    UML类图中类与类的四种关系图解
    接口之间的多继承
    Linux中在当前目录下查找某个文件
    .gitignore与exclude
    pro git
  • 原文地址:https://www.cnblogs.com/haochuang/p/13231445.html
Copyright © 2011-2022 走看看