[本文出自天外歸雲的博客園]
前篇
本篇
承上——歸納過程
在前篇的基礎上,我們可以利用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腳本,根據提示一步一步操作就可以對網站發動壓力攻擊了。