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腳本,根據提示一步一步操作就可以對網站發動壓力攻擊了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM