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

前篇

前篇: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脚本,根据提示一步一步操作就可以对网站发动压力攻击了。

Python Locust对指定网站“一键压测”的更多相关文章

  1. 一键压测工具改造(locust)

    本文内容来自“天外归云”大神,原文链接http://www.cnblogs.com/LanTianYou/p/5987741.html,目前只对启动脚本做了一些改造,应该说是,不适用powershel ...

  2. 使用python requests模块搭建http load压测环境

    网上开源的压力测试工具超级的多,但是总有一些功能不是很符合自己预期的,于是自己动手搭建了一个简单的http load的压测环境 1.首先从最简单的http环境着手,当你在浏览器上输入了http://w ...

  3. 【locust】使用locust + boomer实现对接口的压测

    背景 很早之前,考虑单机执行能力,使用locust做过公司短信网关的压测工作,后来发现了一个golang版本的locust,性能是python版本的5到10倍以上,但是一直没有机会使用. 最近公司想做 ...

  4. Locust压测结果准确性验证

    最近闲着没事做,就重新研究了一下基于python语言的Locust性能测试框架 发现在压测的过程中,虽然设置了100并发,但是通过实际监控,完全看不到100并发压测的效果 通过代码AOP日志监控接口的 ...

  5. CentOS单机安装k8s并部署.NET 6程序 压测 记录

    前面部分依照CentOS单机安装k8s并部署.NET 6程序来进行,内存.cpu.centos版本一致,之前222元买的三年8M 2c4g腾讯云轻量服务器,这个教程算是写的很详细的了,基本可以一致执行 ...

  6. 利器: 用Siege做Web服务器压测

    用「Web压测」关键词检索,能找到好多进行压测的工具,比如ab.Http_load.Webbench.Siege这些,不过今天并不是要对这些工具做对比,毕竟我们只是想得到一个结果.本文主要介绍Sieg ...

  7. 高德全链路压测平台TestPG的架构与实践

    导读 2018年十一当天,高德DAU突破一个亿,不断增长的日活带来喜悦的同时,也给支撑高德业务的技术人带来了挑战.如何保障系统的稳定性,如何保证系统能持续的为用户提供可靠的服务?是所有高德技术人面临的 ...

  8. python压测工具Locust

    python压测工具Locust Locust介绍 Locust作为基于Python语言的性能测试框架. 其优点在于他的并发量可以实现单机10倍于LoadRunner和Jmeter工具.他的工作原理为 ...

  9. python join()方法的使用,可以应用到tcp压测发送指定数据长度的应用

    Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串.其中,序列中的元素应是字符串类型. 学习join()方法主要是为了配合随机数的使用,生产某个指定位数的随机数,在t ...

随机推荐

  1. 关于新版ADT创建项目时出现appcompat_v7的问题

    做Android开发的朋友最近会发现,更新ADT至22.6.0版本之后,创建新的安装项目,会出现appcompat_v7的内容.并且是创建一个新的内容就会出现.这到底是怎么回事呢?原来appcompa ...

  2. .csv导入mysql时出现乱码

  3. asp.net mvc中ViewData、ViewBag和TempData的详解

    一.ViewData和ViewBag 1.ViewData和ViewBag都是从Action向View传递数据的方式,当然还有其他方式如向View传递Model. 2.ViewData页面查询数据时需 ...

  4. MSSQL 全表搜索 指定字符串

    平时在在MSSql中查询数据的时候,想查找,某个字段在数据库中是否存在,并且查询出在哪个表中,哪个字段下面,在不知道的情况下,操作起来会很麻烦,然后就写了一个sql语句,使用起来感觉挺方便的.当然了, ...

  5. css3图片翻转

    <!DOCTYPE> <html lang="en"> <head> <meta http-equiv="Content-Typ ...

  6. 4,4s屏幕过渡页处理

    //#import "sys/utsname.h" struct utsname systemInfo; uname(&systemInfo); NSString *dev ...

  7. 亿级Web系统搭建——单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  8. font-family styles

    以下是几种常用字体的字形样式预览: 步骤阅读

  9. Linux上USB移植错误解决笔记

    在内核目录下先配置支持USB设备,无论你是什么设备,这一步都是必须的,USB驱动和其他的驱动不同,它分为USB设备驱动,另外还有USB-Host主机控制器的驱动,配置如下: Device Driver ...

  10. Android中处理崩溃异常和记录日志

    大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...