一纸荒年 发表于 2019-2-21 16:19:23

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

对于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)
    subprocess.Popen('locust -f .\locust_test.py --host='+sys.argv, 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)
    subprocess.Popen('locust -f .\locust_test.py --host='+sys.argv+' --no-web -c '+sys.argv+' -r '+sys.argv+' -n '+sys.argv, 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使用方式仍然是双击以PowerShell运行ps1脚本,根据提示一步一步操作就可以对网站发动压力攻击了。

qqq911 发表于 2019-4-16 11:06:29

感谢分享

Miss_love 发表于 2020-12-25 16:14:28

感谢分享
页: [1]
查看完整版本: Python Locust对指定网站“一键压测”