• Python Locust对指定网站“一键压测”


    [本文出自天外归云的博客园]

    前篇

    前篇:Python Locust性能测试框架实践

    本篇

    承上——归纳过程

    在前篇的基础上,我们可以利用Locust性能测试框架编写python脚本对指定网站或者接口进行压测,对于Locust的使用我们可以归纳为三步:

    1. 编写python压力测试脚本;

    2. 在命令行中启动Locust服务并指定压测脚本与hosts等信息;

    3. 访问Locust本地网址设定并发量并进行压测。

    启下——编写脚本

    对于以上三步,我通过编写脚本来做一下进一步封装,实现化繁为简,“一步压测”的目的。这里有两个python脚本,一个是压测脚本,一个是启动脚本。还有一个PowerShell脚本,用来启动压测。这三个脚本放在一个文件夹下面:

    压测脚本格式如下,大家可以随意更改或添加配置,起名为“locust_test.py”并和启动脚本放在同一目录下:

    from locust import HttpLocust,TaskSet,task
    
    class UserBehavior(TaskSet):
        @task()
        def test(self):
            self.client.get("/homepage/list_header.html")
    
    class WebUserLocust(HttpLocust):
        weight = 1
        task_set = UserBehavior
        min_wait = 300
        max_wait = 700

    启动脚本如下,起名为“start_locust.py”:

    import os,re,sys,subprocess,webbrowser
    
    def replace_url(url):
        dir_path = os.path.dirname(os.path.abspath(__file__))
        locust_file_path = os.path.join(dir_path,"locust_test.py")
        with open(locust_file_path,"r") as locust_file:
            content = locust_file.read()
            searchObj = re.search( r'"(.*)*"', content, re.M|re.I)
            content = content.replace(searchObj.group(),"""+url+""")
        open(locust_file_path,"w").write(content)
    
    if __name__ == '__main__':
        replace_url(sys.argv[2])
        subprocess.Popen('locust -f .locust_test.py --host='+sys.argv[1], shell=True)
        webbrowser.open("http://localhost:8089/")

    PowerShell脚本如下(打开方式默认设为PowerShell启动),起名为“start.ps1”:

    Write-Host "请输入压测网站host路径(例如:http://api.g.caipiao.163.com):"
    $site = Read-Host
    Write-Host "请输入压测网站url路径(例如:/homepage/list_header.html):"
    $url = Read-Host
    python .start_locust.py $site $url

    使用——双击压测

    使用方式很简单,双击“start.ps1”脚本,出现如下界面:

    之后浏览器会自动打开我们的压测页面:

    至此我们就可以对指定网站url接口施加压力了。

    网站压力攻击脚本

    如果不关心网站接口的性能数据,直接对网站进行压力攻击,我们可以对脚本进行无界面化精简处理。创建python脚本“start_locust_implicit.py”,内容如下:

    import os,re,sys,subprocess,webbrowser
    
    def replace_url(url):
        dir_path = os.path.dirname(os.path.abspath(__file__))
        locust_file_path = os.path.join(dir_path,"locust_test.py")
        with open(locust_file_path,"r") as locust_file:
            content = locust_file.read()
            searchObj = re.search( r'"(.*)*"', content, re.M|re.I)
            content = content.replace(searchObj.group(),"""+url+""")
        open(locust_file_path,"w").write(content)
    
    if __name__ == '__main__':
        replace_url(sys.argv[2])
        subprocess.Popen('locust -f .locust_test.py --host='+sys.argv[1]+' --no-web -c '+sys.argv[3]+' -r '+sys.argv[4]+' -n '+sys.argv[5], shell=True)

    只是在之前的脚本的基础上对subprocess的调用脚本内容进行了修改,添加了需要传入的参数。然后创建ps1脚本“start_locust_implicit.ps1”,内容如下:

    Write-Host "请输入压测网站host路径(例如:http://api.g.caipiao.163.com):"
    $site = Read-Host
    Write-Host "请输入压测网站url路径(例如:/homepage/list_header.html):"
    $url = Read-Host
    Write-Host "请输入模拟访问网站人数(例如:1000):"
    $amount = Read-Host
    Write-Host "请输入模拟每秒并发访问网站人数(不得小于模拟访问网站人数,例如:100):"
    $conc = Read-Host
    Write-Host "请输入模拟访问请求总数(例如:100000):"
    $reqs = Read-Host
    python .start_locust_implicit.py $site $url $amount $conc $reqs
    Read-Host

    使用方式仍然是双击以PowerShell运行ps1脚本,根据提示一步一步操作就可以对网站发动压力攻击了。

  • 相关阅读:
    objectivec随机数
    UITableView中多个UITextField时UITableView的滚动和键盘的隐藏
    objectivec用图片设置backgroundcolor
    SQL代码添加字段
    如何让第三方库暂时不用arc
    快速统计表中的记录总数
    商务报盘英语
    对话:职业健康和安全
    你适合买房还是租房?
    怎样与同事和谐相处
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/6208969.html
Copyright © 2020-2023  润新知