51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1843|回复: 2
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-6 16:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2019-2-21 16:19:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    对于Locust的使用我们可以归纳为三步:
    1. 编写python压力测试脚本;
    2. 在命令行中启动Locust服务并指定压测脚本与hosts等信息;
    3. 访问Locust本地网址设定并发量并进行压测。

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

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

    2. class UserBehavior(TaskSet):
    3.     @task()
    4.     def test(self):
    5.         self.client.get("/homepage/list_header.html")

    6. class WebUserLocust(HttpLocust):
    7.     weight = 1
    8.     task_set = UserBehavior
    9.     min_wait = 300
    10.     max_wait = 700
    复制代码

    启动脚本如下,起名为“start_locust.py”:
    1. import os,re,sys,subprocess,webbrowser

    2. def replace_url(url):
    3.     dir_path = os.path.dirname(os.path.abspath(__file__))
    4.     locust_file_path = os.path.join(dir_path,"locust_test.py")
    5.     with open(locust_file_path,"r") as locust_file:
    6.         content = locust_file.read()
    7.         searchObj = re.search( r'\"(.*)*\"', content, re.M|re.I)
    8.         content = content.replace(searchObj.group(),"\""+url+"\"")
    9.     open(locust_file_path,"w").write(content)

    10. if __name__ == '__main__':
    11.     replace_url(sys.argv[2])
    12.     subprocess.Popen('locust -f .\locust_test.py --host='+sys.argv[1], shell=True)
    13.     webbrowser.open("http://localhost:8089/")
    复制代码

    PowerShell脚本如下(打开方式默认设为PowerShell启动),起名为“start.ps1”:
    1. Write-Host "请输入压测网站host路径(例如:http://api.g.caipiao.163.com):"
    2. $site = Read-Host
    3. Write-Host "请输入压测网站url路径(例如:/homepage/list_header.html):"
    4. $url = Read-Host
    5. python .\start_locust.py $site $url
    复制代码

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

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

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

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

    2. def replace_url(url):
    3.     dir_path = os.path.dirname(os.path.abspath(__file__))
    4.     locust_file_path = os.path.join(dir_path,"locust_test.py")
    5.     with open(locust_file_path,"r") as locust_file:
    6.         content = locust_file.read()
    7.         searchObj = re.search( r'\"(.*)*\"', content, re.M|re.I)
    8.         content = content.replace(searchObj.group(),"\""+url+"\"")
    9.     open(locust_file_path,"w").write(content)

    10. if __name__ == '__main__':
    11.     replace_url(sys.argv[2])
    12.     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”,内容如下:
    1. Write-Host "请输入压测网站host路径(例如:http://api.g.caipiao.163.com):"
    2. $site = Read-Host
    3. Write-Host "请输入压测网站url路径(例如:/homepage/list_header.html):"
    4. $url = Read-Host
    5. Write-Host "请输入模拟访问网站人数(例如:1000):"
    6. $amount = Read-Host
    7. Write-Host "请输入模拟每秒并发访问网站人数(不得小于模拟访问网站人数,例如:100):"
    8. $conc = Read-Host
    9. Write-Host "请输入模拟访问请求总数(例如:100000):"
    10. $reqs = Read-Host
    11. python .\start_locust_implicit.py $site $url $amount $conc $reqs
    复制代码
    使用方式仍然是双击以PowerShell运行ps1脚本,根据提示一步一步操作就可以对网站发动压力攻击了。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-29 02:14 , Processed in 0.064912 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表