Locust命令行参数详解

合集下载

命令行参数 介绍

命令行参数 介绍

命令行参数介绍摘要:1.命令行参数的定义与作用2.命令行参数的分类3.命令行参数的使用方法4.命令行参数的实例分析5.命令行参数的优缺点正文:命令行参数是指在命令行界面(CLI)中,用户在执行程序或命令时所输入的参数。

它们通常用于向程序提供额外的信息或指示,以便程序能够根据这些信息进行相应的操作或处理。

命令行参数在各种操作系统和应用程序中都有着广泛的应用,如在Linux 系统中的“ls”命令和在Python 编程语言中的“print”函数等。

命令行参数可以根据其作用和性质进行分类。

一般来说,命令行参数可以分为以下几类:1.位置参数:这类参数出现在命令行中的固定位置,并通常用于指定程序的输入文件、输出文件等。

例如,在“ls”命令中,“-l”参数用于以详细列表形式显示文件信息。

2.标志参数:这类参数通常以一个短横线“-”开头,用于表示一个布尔值或开关。

例如,在Python 编程语言中,“-n”参数用于禁止自动换行。

3.选项参数:这类参数用于为程序提供可选的附加功能或操作。

例如,在“tar”命令中,“-z”参数用于压缩文件。

在使用命令行参数时,用户需要根据程序的文档或帮助信息,了解参数的名称、格式和使用方法。

一些参数可能需要与其他参数一起使用,或者需要遵循特定的顺序。

此外,参数的值可能是选项参数,也可能是位置参数,这取决于参数的类型和程序的设计。

命令行参数具有以下优点:1.可以简化程序的使用,使用户能够通过输入参数快速地执行复杂操作。

2.可以提高程序的可扩展性和灵活性,使程序能够根据不同的参数值进行不同的处理。

3.可以方便地实现批处理操作,提高工作效率。

然而,命令行参数也存在一些缺点:1.对于新手用户来说,理解和使用命令行参数可能较为困难。

2.如果参数过多或使用不当,可能会导致程序的行为不确定或产生错误。

3.命令行参数的使用会影响程序的可移植性和跨平台性,因为不同操作系统的命令行参数可能存在差异。

总之,命令行参数是命令行界面中重要的组成部分,对于用户和程序员来说都具有重要的意义。

locust 使用手册

locust 使用手册

locust 使用手册Locust是一个开源的性能测试工具,用于对Web应用程序或API进行负载测试。

以下是Locust的使用手册:1. 安装Locust:确保已安装Python 或更高版本。

使用pip安装Locust:`pip install locust`。

2. 创建Locust文件:创建一个Python文件,例如``,用于编写性能测试脚本。

3. 编写性能测试脚本:导入Locust模块:`from locust import HttpUser, task`。

定义一个继承自`HttpUser`的测试用户类。

例如:```python`class MyUser(HttpUser):taskdef my_task(self):("/path/to/test")````4. 运行性能测试:启动Locust Master服务器:`locust --host=<目标URL> --port=<端口号> --master`。

启动Locust Worker进程:`locust --host=<目标URL> --port=<端口号> --worker=<worker数>`。

在浏览器中访问Locust Master服务器的地址(默认为5. 监控测试结果:在Locust界面上查看实时测试结果,包括响应时间、吞吐量、失败率等指标。

可以调整测试参数(如用户数、并发用户数等)以观察对系统性能的影响。

6. 分析测试结果:根据测试结果分析系统的性能表现,查找瓶颈和潜在问题。

7. 停止性能测试:当完成性能测试后,可以通过Locust界面或命令行停止测试。

8. 注意事项:在进行性能测试之前,确保已获得目标系统的授权。

根据系统规模和负载情况,合理配置Locust参数(如用户数、并发用户数等)。

在测试过程中,密切关注系统资源使用情况,避免对目标系统造成过大的负载压力。

locust 中文手册

locust 中文手册

locust 中文手册Locust中文手册一、前言1. 什么是Locust? Locust是一个易于使用,可脚本化和可扩展的性能测试工具。

也是github上面星级最高的性能测试工具。

2. Locust的应用场景:适用于对各种系统进行压力测试,如Web、移动应用、API等。

3. Locust的特点及优势:使用Python编写测试脚本,具有无限的可扩展性,对开发者非常友好。

测试脚本中的循环、条件行为或计算等可以使用Python提供的常规控制结构。

在greenlet(轻量级的过程/coroutine)中运行每个用户,可以像正常的(阻塞)Python代码一样编写测试。

支持分布式和可扩展性,一个进程可以处理成千上万的并发用户,适合测试高并发的工作负载。

提供基于Web的用户界面,可以实时显示测试的进度,甚至可以在测试运行时改变负载。

二、安装与配置1. 下载Locust:访问Locust官网或使用pip命令进行下载。

2. 安装Locust:根据下载的包进行安装。

3. 配置Locust:根据需要进行配置,包括设置代理、认证等。

4. 验证Locust安装与配置:运行Locust的命令行或Web界面,检查是否正常工作。

三、编写测试脚本1. 创建测试脚本文件:使用文本编辑器创建一个新的Python文件。

2. 导入Locust相关模块:导入Locust库和相关模块。

3. 编写用户行为类:定义用户的行为,如访问页面、提交表单等。

4. 编写任务流程:定义测试的流程和顺序。

5. 编写任务权重:设置不同任务的执行频率。

6. 保存测试脚本文件:将文件保存为Python格式。

四、运行Locust1. 命令行运行Locust:在命令行中输入Locust命令并指定要运行的测试脚本文件。

2. Web界面运行Locust:启动Locust的Web服务器,并使用Web界面运行测试。

可以在界面中实时查看测试进度和结果。

Locust:简介和基本用法

Locust:简介和基本用法

Locust:简介和基本⽤法我个⼈在性能测试⼯作中,负载⽣成⼯具使⽤的⼤多都是jmeter,之前学习python时顺带了解过python开源的性能测试框架locust。

这篇博客,简单介绍下locust的使⽤⽅法,仅供参考。

官⽅⽂档:⼀、认识Locust1、定义Locust是⼀款易于使⽤的分布式负载测试⼯具,完全基于事件,即⼀个locust节点也可以在⼀个进程中⽀持数千并发⽤户,不使⽤回调,通过使⽤轻量级过程(即在⾃⼰的进程内运⾏)。

2、特点①、不需要编写笨重的UI或者臃肿的XML代码,基于协程⽽不是回调,脚本编写简单易读;②、有⼀个基于we简洁的HTML+JS的UI⽤户界⾯,可以实时显⽰相关的测试结果;③、⽀持分布式测试,⽤户界⾯基于⽹络,因此具有跨平台且易于扩展的特点;④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他⼯具的局限性;3、locust与jmeter的区别⼯具区别jmeter需要在UI界⾯上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个⽤户,都需要⼀个单独的线程。

单台负载机可模拟的负载数有限locust通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeterPS:但locust的局限性在于,⽬前其本⾝对测试过程的监控和测试结果展⽰,不如jmeter全⾯和详细,需要进⾏⼆次开发才能满⾜需求越来越复杂的性能测试需要。

⼆、安装Locust1、⽀持的python版本:2.7、3.4、3.5、3.6;2、Windows系统安装locust①、直接通过 pip install locustio 命令安装;②、通过为pyzmq、gevent和greenlet安装预先构建的⼆进制包,然后在找到⾮官⽅的预制包,下载.whl⽂件后,使⽤ pip install name-of-file.whl 命令安装;安装成功后可以输⼊ pip show locust 命令查看是否安装成功,以及通过 locust -help 命令查看帮助信息。

locust常用命令

locust常用命令

Locust 是一个开源的负载测试工具,可以用 Python 编写测试脚本,并模拟用户行为来进行负载测试。

以下是 Locust 常用命令:
1. locust -f filename.py:启动 Locust 进程并执行脚本。

2. locust -H :指定要测试的目标主机地址。

3. locust -u 1000 -r 100:指定用户数(1000)和每秒启动用户数(100)。

4. locust --headless:以无头模式启动 Locust,不会打开网页 UI。

5. locust --web-port 8089:指定 Locust 网页 UI 的监听地址和端口。

6. locust --csv=example:将测试结果保存为 CSV 文件,文件名为 example_stats.csv。

7. locust --master:启动 Locust 主进程,可以用于分布式测试。

8. locust --worker:启动 Locust 工作进程,可以用于分布式测试。

9. locust --help:查看 Locust 的帮助信息。

10. locust --version:查看 Locust 的版本号。

以上是 Locust 常用命令,如果想深入了解 Locust 的使用方法和命令参数,可以查看官方文档。

locust常用命令 -回复

locust常用命令 -回复

locust常用命令-回复Locust常用命令及使用指南Locust是一个开源的Python性能测试工具,用于模拟大量用户并发访问Web应用程序。

它的设计目标是简洁、可扩展、快速和可维护。

本文将为您详细介绍Locust常用命令,以帮助您更好地使用这款工具。

一、安装和启动Locust在开始使用Locust之前,首先需要进行安装。

使用以下命令可以通过pip 安装Locust:pip install locust安装完成后,可以通过以下命令启动Locust:locust启动Locust之后,您将在命令行中看到一些相关的输出信息,包括Web 界面的访问URL,默认为二、编写Locust测试案例在使用Locust之前,我们需要编写测试脚本,也即测试案例。

Locust测试脚本是基于Python编写的,主要用于定义用户行为和性能测试逻辑。

下面是一个简单的Locust测试脚本示例:pythonfrom locust import HttpUser, task, betweenclass MyUser(HttpUser):wait_time = between(5, 9)@taskdef index_page(self):self.client.get("/")@task(3)def about_page(self):self.client.get("/about")在上述示例中,我们定义了一个名为MyUser的测试用户类,继承自Locust提供的HttpUser。

通过wait_time参数,我们指定了用户的等待时间范围。

在task装饰器下,我们定义了两个用户行为方法index_page 和about_page,分别模拟了用户访问首页和关于页面。

三、运行Locust测试1. 使用默认配置启动Locust现在我们可以通过运行Locust测试脚本来执行性能测试。

在命令行中运行以下命令即可:locust -f my_test_script.py其中,-f参数用于指定测试脚本文件的路径。

locust中文手册

locust中文手册

locust中文手册Locust 中文手册一、前言1. 什么是 Locust?2. Locust 的应用场景3. Locust 的特点及优势二、安装与配置1. 下载 Locust2. 安装 Locust3. 配置 Locust4. 验证 Locust 安装与配置三、编写测试脚本1. 创建测试脚本文件2. 导入 Locust 相关模块3. 编写用户行为类4. 编写任务流程5. 编写任务权重6. 保存测试脚本文件四、运行 Locust1. 命令行运行 Locust2. Web 界面运行 Locust3. 动态参数配置(用户数、RPS 等)五、监控与报告1. 监控脚本运行情况2. 查看性能指标3. 生成测试报告4. 导出测试结果六、高级用法1. 数据驱动的测试2. 分布式部署与负载均衡3. 使用插件扩展功能4. 高级配置选项七、常见问题与解决方案1. 如何处理异常情况?2. 如何设置用户登录态?3. 如何模拟并发请求?4. 如何优化性能和稳定性?八、实战案例1. 使用 Locust 进行接口性能测试2. 使用 Locust 进行网站压力测试3. 使用 Locust 进行分布式负载测试九、总结与展望1. Locust 的优势与几点建议2. 展望 Locust 的未来发展通过以上的列表划分,我们可以更清晰地了解 Locust 的各个方面。

从安装与配置、编写测试脚本、运行 Locust、监控与报告到高级用法和常见问题与解决方案,每个部分都将有详尽的讲解,帮助读者快速上手并解决实际问题。

同时,通过实战案例的分享,读者能够更好地理解 Locust 的应用场景和使用方法。

总之,本手册将为读者提供全面而深入的 Locust 中文指南,帮助他们在性能测试领域取得更好的成果。

无论是初学者还是有一定经验的测试工程师,都能从中获得实用的知识和技巧,提高工作效率和质量。

欢迎大家阅读并实践 Locust,开启高效性能测试的新时代!。

locust用法(一)

locust用法(一)

locust用法(一)Locust用法1. 什么是Locust?Locust是一种开源的性能测试工具,它可以模拟大量并发用户,并测试一个系统的性能、稳定性和负载能力。

它是用Python编写的,并且非常易于安装和使用。

2. Locust的安装你可以通过以下步骤安装Locust:•打开命令行终端•输入以下命令:pip install locust3. 创建并运行Locust测试创建一个Locust文件首先,你需要创建一个Locust文件来定义你的测试场景。

你可以使用任何文本编辑器来创建一个名为``的文件。

导入必要的模块在Locust文件的顶部,你需要导入一些必要的模块,如下所示:from locust import HttpUser, task, between创建一个Locust类接下来,你需要创建一个Locust类,该类应该继承自HttpUser 类,如下所示:class MyTestUser(HttpUser):wait_time = between(5, 10)在上面的代码中,我们创建了一个名为MyTestUser的类,并设置了一个wait_time属性,表示每个用户执行任务之间的等待时间。

定义任务使用@task装饰器来定义一个任务,如下所示:@taskdef my_task(self):("/api/endpoint")在上述代码中,我们定义了一个名为my_task的任务,该任务发送一个GET请求到/api/endpoint路径。

运行Locust测试要运行Locust测试,打开命令行终端,导航到Locust文件所在的目录,并运行以下命令:locust -f然后,你可以通过访问4. Locust的高级用法除了基本用法之外,Locust还提供了许多高级用法,使你能够更好地控制你的测试。

下面是一些常见的高级用法:设置负载测试参数你可以使用Locust的一些参数来设置负载测试的行为,例如设置模拟用户数量、最大等待时间和测试持续时间等。

python+locust传入参数的方法

python+locust传入参数的方法

python+locust传入参数的方法【最新版3篇】篇1 目录:1.Python和Locust简介2.传入参数在Locust中的应用3.如何使用传入参数4.结论篇1正文1.Python和Locust简介Locust是一个用Python编写的自动化负载测试工具,可以模拟大量的用户流量来测试Web应用程序。

Python是一种高级编程语言,具有简单易学、功能强大的特点,广泛应用于自动化测试领域。

2.传入参数在Locust中的应用在Locust中,我们可以使用传入参数来传递不同的测试用例给被测试的应用程序。

传入参数可以来自不同的来源,例如文件、数据库、环境变量等。

传入参数使得我们可以根据不同的测试场景来使用不同的参数,从而更好地模拟真实用户的行为。

3.如何使用传入参数要使用传入参数,我们需要定义一个类来表示我们的用户。

在这个类中,我们可以使用Python的字典来表示我们的传入参数。

例如,如果我们的传入参数是一个文件,我们可以定义一个名为`params`的字典来存储文件中的数据。

然后,在我们的用户类中,我们可以使用这个字典来设置我们的测试用例。

4.结论传入参数在Locust中的应用使得我们可以更加灵活地模拟不同的测试场景,从而更好地测试我们的应用程序。

篇2 目录:1.Python+Locust传入参数的方法介绍2.Python+Locust传入参数的方法原理3.Python+Locust传入参数的方法应用场景4.Python+Locust传入参数的方法优缺点5.总结篇2正文一、Python+Locust传入参数的方法介绍Python是一种流行的编程语言,广泛应用于自动化测试。

Locust是一个功能强大的性能测试框架,可以用于编写自动化测试脚本。

传入参数是指在使用Locust进行性能测试时,需要传递一些参数,以便测试脚本能够正确地执行。

二、Python+Locust传入参数的方法原理在Python+Locust传入参数的方法中,可以通过编写Python函数来实现参数的传递。

Locust脚本开发(关联、参数化、检查点、集合点)

Locust脚本开发(关联、参数化、检查点、集合点)

Locust脚本开发(关联、参数化、检查点、集合点)⼀、关联 在某些请求中,需要携带之前从Server端返回的参数,因此在构造请求时需要先从之前的Response中提取出所需的参数。

下⾯的⽰例代码中,⽤户登录后服务器返回的httptoken的值作为下个任务接⼝请求的请求头参数,实现了前后接⼝的关联。

from locust import HttpUser, task, SequentialTaskSetimport hashlibimport queueclass UserBehavior(SequentialTaskSet):token = Nonedef on_start(self):print("--on_start--")def on_stop(self):print("--on_stop--")@task(1)def login(self):url1 = "http://xx"url2 = "http://xx"headers1 = {'Content-Type': 'application/json;charset=UTF-8','ptype': '1'}headers2 = {'Content-Type': 'application/x-www-form-urlencoded'}# request_params = {"codeVerificationType": "1", "phoneNumber": '12345678988'}# res_get = requests.get(url, params=request_params, headers=headers)# print(res_get.text)try:# 从队列中取出数据data = eval(er_data_queue.get_nowait())print("测试数据:%s" % data)payload = {"codeVerificationType": "1","phoneNumber": data['phoneNumber']}res = self.client.get(url1, params=payload, headers=headers1)print(res.text)hl = hashlib.md5()hl.update(str(data['phoneNumber']).encode(encoding='utf-8'))code = hl.hexdigest()print("⼿机号加密后:%s" % code)par_data = {"channel": 'cocos',"deviceId": None,"deviceType": None,"uniqueId": None,"loginType": 1,"phoneType": 1,"userIdentity": code,"userType": 1,"verificationCode": '123456',"version": '0.9',"versionName": '0.9',"accessToken": None,"token": None}res_post = self.client.post(url2, data=par_data, headers=headers2)self.token = res_post.json()["result"]["httpToken"]print("token:",self.token)# print(code)print(res_post.text)# return self.token# 使⽤get_nowait()⽅法,取不到数据,就进⼊这⾥except queue.Empty:print("测试数据已⽤完,结束!")exit(0)# print("获取的token是:", token)# return token@task(1)def join_room(self):headers = {'Content-Type': 'application/json;charset=UTF-8', 'ptype': '1','token': self.token}url = "http://xx"res_post = self.client.post(url, headers=headers)print("加⼊房间成功:",res_post.text)print("*" * 50)class WebsiteUser(HttpUser):host = "http://xx"tasks = [UserBehavior]# 创建队列,先进先出user_data_queue = queue.Queue()# 循环加⼊队列for index in range(16000000020, 16000000025):data = '''{"phoneNumber":"%d"}'''% indexuser_data_queue.put_nowait(data.replace('', '').replace('\n', ''))max_wait = 3000min_wait = 1000if __name__ == '__main__':import osos.system("locust -f locustlogin.py")⼆、参数化 ⽅式1:循环取数据,数据可重复使⽤ 所有并发虚拟⽤户共享同⼀份测试数据,各虚拟⽤户在数据列表中循环取值。

Locustno-web模式与参数详解

Locustno-web模式与参数详解

Locustno-web模式与参数详解读前参考:《》熟悉 Apache ab ⼯具的同学都知道,它是没有界⾯的,通过命令⾏执⾏。

Locust 同样也提供的命令⾏运⾏,好处就是更节省客户端资源。

命令⾏运⾏ Locust 测试以上⼀节的 baidu ⾸页测试(load_test.py)为例通过 no-web 模式运⾏测试。

> locust -f load_test.py --host=https:// --no-web -c 10 -r 2 -t 1m[2017-10-30 22:17:30,292] DESKTOP-SMGQBBM/INFO/locust.main: Run time limit set to 60 seconds[2017-10-30 22:17:30,302] DESKTOP-SMGQBBM/INFO/locust.main: Starting Locust 0.8[2017-10-30 22:17:30,302] DESKTOP-SMGQBBM/INFO/locust.runners: Hatching and swarming 10 clients at the rate 2 clients/s...Name # reqs # fails Avg Min Max | Median req/s....[2017-10-30 22:18:30,301] DESKTOP-SMGQBBM/INFO/locust.main: Time limit reached. Stopping Locust.[2017-10-30 22:18:30,302] DESKTOP-SMGQBBM/INFO/locust.main: Shutting down (exit code 0), bye.Name # reqs # fails Avg Min Max | Median req/s--------------------------------------------------------------------------------------------------------------------------------------------GET / 117 0(0.00%) 31 17 96 | 28 2.10--------------------------------------------------------------------------------------------------------------------------------------------Total 117 0(0.00%) 2.10Percentage of the requests completed within given timesName # reqs 50% 66% 75% 80% 90% 95% 98% 99% 100%--------------------------------------------------------------------------------------------------------------------------------------------GET / 117 28 30 36 37 49 62 69 72 96--------------------------------------------------------------------------------------------------------------------------------------------Total 117 28 30 36 37 49 62 69 72 96启动参数:–no-web 表⽰不使⽤Web界⾯运⾏测试。

Locust命令行参数详解

Locust命令行参数详解

Locust命令行参数详解Locust命令行参数详解-h, --help查看帮助-H HOST, --host=HOST被测试的主机地址,格式:http://10.21.32.33--web-host=WEB_HOSTLocust Web 页面的主机地址,默认为本机-P PORT, --port=PORT, --web-port=PORT被测试主机端口,默认8089-f LOCUSTFILE, --locustfile=LOCUSTFILE指定运行Locust 性能测试文件,默认为: locustfile.py--csv=CSVFILEBASE, --csv-base-name=CSVFILEBASE以CSV格式存储当前请求测试数据--master分布式模式使用,指定当前节点为master 节点--slave分布式模式使用,指定当前节点为slave节点--master-host=MASTER_HOST分布式模式运行,设置master节点的主机或IP地址,只在与slave节点一起运行时使用,默认为:127.0.0.1--master-port=MASTER_PORT分布式模式运行,设置master节点的端口号,只在与slave节点一起运行时使用,默认为:5557。

注意,slave节点也将连接到这个端口上的master节点--master-bind-host=MASTER_BIND_HOST绑定Locust的主机名,只有使用master参数时可用,默认为*--master-bind-port=MASTER_BIND_PORT绑定Locust的端口,只有使用master参数时可用,默认为5557。

注意Locust将使用这个端口,所以默认情况master节点将绑定到5557和5558--expect-slaves=EXPECT_SLAVES定义有多少台slave机器连接到master主机(使用no-web参数时可用)--no-web无web界面模式运行测试,需要-c和-r配合使用-c NUM_CLIENTS, --clients=NUM_CLIENTS指定并发用户数,no-web模式下可用-r HATCH_RATE, --hatch-rate=HATCH_RATE指定每秒启动的用户数,no-web模式下可用-n NUM_REQUESTS, --num-request=NUM_REQUESTS指定要请求的次数,no-web模式下可用,0.8.1版本不再提供t 参数来指定运行时间-L LOGLEVEL, --loglevel=LOGLEVEL指定log级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)。

Pythonlocust工具使用详解

Pythonlocust工具使用详解

Pythonlocust⼯具使⽤详解⽬录⼀、简介1、优势2、劣势⼆、安装三、locust的库和⽅法介绍1、from locust import task2、from locust import TaskSet3、from locust import HttpUser四、实战代码V1.0(⼊门代码)1、代码如下2、进⼊代码的⽬录,执⾏如下命令3、打开浏览器,输⼊http://localhost:8089/4、参数讲解五、实战代码V1.1(⼊门代码)1、任务集类中的on_start⽅法2、任务集类中的on_start⽅法六、实战代码V1.2(⼊门代码)1、如何判断请求是失败还是成功2、然后再响应的消息中指定判断逻辑即可,success即为成功,failure即为失败七、实战代码V1.3(全量代码)⼋、常见问题1、cookies2、多统计api的问题九、分布式调⽤的问题今年负责部门的⼈员培养⼯作,最近在部门内部分享和讲解了locust这个⼯具,今天再博客园记录下培训细节。

相信你看完博客,⼀定可以上⼿locust这个性能测试框架了。

⼀、简介1、优势locust是python语⾔开发的⼀款的开源的的性能测试框架,他⽐jmeter更加的轻量级,主要是通过协程(gevent)的⽅式去实现并发,通过协程的⽅式可以⼤幅提⾼单机的并发能⼒,同时避免系统级的资源调度。

locust具有开源性、分布式、⽀持⾼并发,⽀持webUI的操作⽅式。

2、劣势locust的图表功能较弱,只展⽰了很少的数据locust不⽀持监控服务端的状态,需要借助第三⽅⼯具,或者⾃⼰写代码去实现⼆、安装locust的安装⾮常简单,直接通过pip的⽅式就可以安装pip install locust三、locust的库和⽅法介绍1、from locust import task通过task可以把某个函数指定为任务,直接@task装饰对应的函数即可,在@tast(n)中可以有⼀个参数n,意思是这个任务的占⽐是多少2、from locust import TaskSet需要定义⼀个类,继承TaskSet这个类,这个是是⼀个任务集的概念,这个类中可以包括多个task3、from locust import HttpUser需要定义⼀个类,这个类要继承HttpUser,通过这个定义的类我们可以执⾏具体的任务集看了上⾯的介绍,可能⼤家有点云⾥雾⾥的,下⾯我们由浅⼊深看代码四、实战代码V1.0(⼊门代码)1、代码如下from locust import HttpLocustfrom locust import HttpUserfrom locust import taskfrom locust import TaskSet#指定⼀个任务集class My_task_set(TaskSet):#这是某个任务,30是⽐例,⽐如这⾥是30/50@task(30)def getindex1(self):# client就是个requests对象# catch_response,告诉locust如何判断请求失败还是成功res = self.client.get("/bainianminguo/p/10952586.html")@task(20)def getindex2(self):# client就是个requests对象res = self.client.get("/bainianminguo/p/7253930.html")class WebSite(HttpUser):# 指定要执⾏哪个任务集tasks = [My_task_set,]# 请求和请求之间最⼩的间隔时间min_wait = 1000# 请求和请求之间最⼤的间隔时间max_waif = 20002、进⼊代码的⽬录,执⾏如下命令3、打开浏览器,输⼊http://localhost:8089/4、参数讲解Number of total users to simulate 模拟的总的⽤户数Spawn rate 每秒钟新增的⽤户数五、实战代码V1.1(⼊门代码)1、任务集类中的on_start⽅法class My_task_set(TaskSet):#添加初始化⽅法def on_start(self):print("类似类中的构造⽅法,每个⽤户在任务开始前,只执⾏⼀次,在这⾥可以定义⼀个对象的属性,这样其它测试集就可以使⽤这个属性")这个⽅法类似pytest框架中的前置条件或者说是⾯向对象中的构造⽅法2、任务集类中的on_start⽅法def on_stop(self):print("类似类中的后置⽅法,每个⽤户在任务开始后,只执⾏⼀次,在这⾥可以定义⼀个对象的属性,这样其它测试集就可以使⽤这个属性")六、实战代码V1.2(⼊门代码)1、如何判断请求是失败还是成功2、然后再响应的消息中指定判断逻辑即可,success即为成功,failure即为失败七、实战代码V1.3(全量代码)from locust import HttpLocustfrom locust import HttpUserfrom locust import taskfrom locust import TaskSet# locust中的client会⾃动帮我们处理cookies。

Locust性能测试入门-1名词解释和最基本的用法

Locust性能测试入门-1名词解释和最基本的用法

Locust性能测试入门-1名词解释和最基本的用法Locust是基于事件的分布式负载测试工具。

名字和logo都代表蝗虫/蚂蚱,解释是因为它们总是成群。

特点•基于协程,资源占用率小,效率高补充说明进程、线程、协程区别进程:进程是资源分配的单位,程序运行时系统就会创建一个进程,并为它分配资源。

然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

线程:线程是系统调度的单位,是程序执行时的最小单位。

它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。

协程:又称微线程,协程是程序级别的,由程序员根据需要自己调度。

协程无需线程上下文切换的开销,只是单纯的操作CPU的上下文,所以资源占有率很小。

缺点是协程阻塞时可能会使整个程序都阻塞。

举个简单的例子便于理解一个生产车间需要生产线。

老板【CPU】刚开始投资【花费资源】买了一条生产线【创建了一个进程】,然后招聘了一个工人【创建单线程】进行生产,为了提高效率,老板又招聘了一些工人【多线程】。

人多了老板【CPU】发现总会有工人因为没有活干或者等待上一个工序的完成而闲下来无事可做,于是就分配这些恰好空闲的工人去完成其他的工作【协程】。

根据这个例子可以发现,切换进程需要资源较多,协程则只需要很少的资源(找他聊聊天,跟他说一下干什么)。

•基于webUI界面,可以实时显示相关的测试结果•支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点•所有繁琐的I/O和协同程序都被委托给gevent,替代其他工具的局限性•官网说:这个很简单,你快来学吧入门现在下载Locust 你的python版本至少要3.6的。

安装pip install locust即可。

我们先写一个简单的例子,看一下界面# coding: utf-8from locust import HttpUser, taskclass TestIndex(HttpUser):@taskdef getIndex(self):self.client.get('/s?wd=性能')然后在terminal输入locust -f testindex.py --host=https://回车执行,就可以看到点击生成的链接:http://0.0.0.0:8089跳转到浏览器上面6和2代表每秒增加2个用户,最多增加到6个(3秒增加完成)点击Start swarming开始执行可以看到数据是不停的在变动,点击红色Stop按钮,即可停止切换标签页到Charts即可查看图表在Download Data页签可以下载csv数据或者测试报告【提醒】做demo时建议不要把用户数做的太大,法律认为,在明知道有可能将对方服务器搞崩溃的情况下仍然进行操作,并对对方造成损失就属于违法。

压测工具Locuse的使用

压测工具Locuse的使用

压测⼯具Locuse的使⽤我是听朋友提起的"蝗⾍"(Locust),然⽽她不想⽤python,我就拿来试⼀试~http的各种压测⼯具也已经太多了,所以主要是试试locust在当前⽐较流⾏的rpc协议上的效果⽬的 -- 调研locust应⽤于grpc协议服务 -- grpc的helloworld⼀环境准备1 需要python环境,我使⽤的是python2.72 安装locustpip install locustiopip install pyzmq // 分布式运⾏多个起压locust时使⽤pip install gevent==1.1 // 据说是因为升级后的gevent不能很好的⽀持python2系列?locust -h // 查看可⽤参数⼆被测服务编写1 windows的web界⾯测试① python代码,写好保存在为test_001.pyfrom locust import HttpLocust,TaskSet,taskimport subprocessimport jsonclass UserBehavior(TaskSet):def on_start(self):pass@task(1)def list_header(self):r = self.client.get("/")class WebUserLocust(HttpLocust):weight = 1task_set = UserBehaviorhost = ""min_wait = 5000max_wait = 15000②在命令⾏执⾏locust -f E:\Work\PyCharmTest\locusttest\test_001.py③打开浏览器,输⼊⽹址:localhost:8089 (locust 的默认监听端⼝为8089)在显⽰页⾯输⼊模拟⽤户数和每个⽤户的req/s,点击 start swarming 即可开始④需要⼿动结束,在页⾯点击stop或者在命令⾏ctrl+c退出locust启动命令,即可查看结果如下:显⽰总请求数、失败请求数、请求的耗时分布、qps、传输字节数等2 linux运⾏① python代码 -- 此处写的proto⽂件,helloworldsyntax = "proto3";option java_package = "io.grpc.examples";package helloworld;// The greeter service definition.service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {}}// The request meesage containing the user'name.message HelloRequest {string name = 1;}// The response message containing the greetingsmessage HelloReply {string message = 1;}②转成python执⾏如下命令,⽣成helloworld_pb2.py和helloworld_pb2_grpc两个⽂件protoc --python_out=. helloworld.proto③启动helloworld的server(该部分随意,根据实际设置)该部分⽤的python的server,启动端⼝设置为50052import sysimport grpcimport timesys.path.append("..")from concurrent import futuresfrom helloworld.helloworld import helloworld_pb2, helloworld_pb2_grpc_ONE_DAY_IN_SECONDS = 60 * 60 * 24_HOST = 'localhost'_PORT = '50052'class Greeter(helloworld_pb2_grpc.GreeterServicer):def SayHello(self, request, context):str = return helloworld_pb2.HelloReply(message='hello, '+str)def serve():grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), grpcServer)grpcServer.add_insecure_port(_HOST + ':' + _PORT)grpcServer.start()try:while True:time.sleep(_ONE_DAY_IN_SECONDS)except KeyboardInterrupt:grpcServer.stop(0)if __name__ == '__main__':serve()④编写locust⽂件,对端⼝50052的服务进⾏压测,locust⽂件如下:#!/usr/bin/env python 2.7# -*- coding:utf-8 -*-import os,sys, argparsesys.path.append("..")import grpcimport jsonimport requestsimport timeimport randomimport stringfrom helloworld.helloworld import helloworld_pb2, helloworld_pb2_grpcfrom locust import Locust, TaskSet, task, eventsfrom locust.stats import RequestStatsfrom locust.events import EventHookdef parse_arguments():parser = argparse.ArgumentParser(prog='locust')parser.add_argument('--hatch_rate')parser.add_argument('--master', action='store_true')args, unknown = parser.parse_known_args()opts = vars(args)return args.host, int(args.clients), int(args.hatch_rate)#HOST, MAX_USERS_NUMBER, USERS_PRE_SECOND = parse_arguments() HOST, MAX_USERS_NUMBER, USERS_PRE_SECOND = '127.0.0.1:50052', 1, 10 # 分布式,需要启多台压测时,有⼀个master,其余为slaveslaves_connect = []slave_report = EventHook()ALL_SLAVES_CONNECTED = TrueSLAVES_NUMBER = 0def on_my_event(client_id, data):global ALL_SLAVES_CONNECTEDif not ALL_SLAVES_CONNECTED:slaves_connect.append(client_id)if len(slaves_connect) == SLAVES_NUMBER:print "All Slaves Connected"ALL_SLAVES_CONNECTED = True# print events.slave_report._handlersheader = {'Content-Type': 'application/x-www-form-urlencoded'}import resourcersrc = resource.RLIMIT_NOFILEsoft, hard = resource.getrlimit(rsrc)print 'RLIMIT_NOFILE soft limit starts as : ', softsoft, hard = resource.getrlimit(rsrc)print 'RLIMIT_NOFILE soft limit change to: ', softevents.slave_report += on_my_eventclass GrpcLocust(Locust):def __init__(self, *args, **kwargs):super(GrpcLocust, self).__init__(*args, **kwargs)class ApiUser(GrpcLocust):min_wait = 90max_wait = 110stop_timeout = 100000class task_set(TaskSet):def getEnviron(self, key, default):if key in os.environ:return os.environ[key]else:return defaultdef getToken(self):consumer_key = self.getEnviron('SELDON_OAUTH_KEY', 'oauthkey')consumer_secret = self.getEnviron('SELDON_OAUTH_SECRET', 'oauthsecret')params = {}params["consumer_key"] = consumer_keyparams["consumer_secret"] = consumer_secreturl = self.oauth_endpoint + "/token"r = requests.get(url, params=params)if r.status_code == requests.codes.ok:j = json.loads(r.text)# print jreturn j["access_token"]else:print "failed call to get token"return Nonedef on_start(self):# print "on start"# self.oauth_endpoint = self.getEnviron('SELDON_OAUTH_ENDPOINT', "http://127.0.0.1:50053")# self.token = self.getToken()self.grpc_endpoint = self.getEnviron('SELDON_GRPC_ENDPOINT', "127.0.0.1:50052")self.data_size = int(self.getEnviron('SELDON_DEFAULT_DATA_SIZE', "784"))@taskdef get_prediction(self):conn = grpc.insecure_channel(self.grpc_endpoint)client = helloworld_pb2_grpc.GreeterStub(conn)start_time = time.time()name = string.join(random.sample(['a','b','c','d','e','f','g'], 3)).replace("","")request = helloworld_pb2.HelloRequest(name=name)try:reply = client.SayHello(request)except Exception,e:total_time = int((time.time() - start_time) * 1000)events.request_failure.fire(request_type="grpc", name=HOST, response_time=total_time, exception=e) else:total_time = int((time.time() - start_time) * 1000)events.request_success.fire(request_type="grpc", name=HOST, response_time=total_time, response_length=0)⑤启动locust,查看结果locust --help可以看到命令的使⽤帮助。

python的自带性能压测工具locust

python的自带性能压测工具locust

python的⾃带性能压测⼯具locustLocust 的特征⽤ Python 编写测试⽅案不需要在 UI 界⾯上傻乎乎的点击,只需正常的写写代码就可以了。

Locust 基于协程⽽不是回调,这样会让您的代码类似于正常的 Python 阻塞代码那样同步执⾏。

分布式 & 可扩展⽀持模拟数⼗万的⽤户⾏为(还是⾮常给⼒的)Locust ⽀持分布在多台计算机上的运⾏负载测试(可以多台机器并⾏开搞)。

由于基于事件,因此即使⼀个蝗⾍节点也可以在单个过程中处理数千个⽤户。

不过即使您模拟了这么多⽤户,也并⾮所有⼈都是这种频率的使⽤您的系统,通常,⽤户会有思考的时候,会想⼀想下⼀步该怎么做。

需要明⽩每秒请求数不等于在线⽤户数。

统计结果基于 Web 界⾯Locust 有⼀个简单的⽤户界⾯,可实时显⽰相关的测试详细信息。

统计结果界⾯是基于⽹页的,⽽⽹页是天⽣跨平台的,所以 Locust 是跨平台且易于扩展的(Locust 作者的这种思维还是很不错的)。

可以测试任何⽹页 / 应⽤ / 系统即使 Locust 是⾯向 Web 的,它也可以测试⼏乎所有项⽬只需⽤ python 编写想要测试的⽅案,然后放"蝗⾍"去怼需要测试的项⽬就可以了,⾮常简单!虽然官⽅是这么宣传的,但是如果你对 python 了解的不怎么样,那可能就没有那么简单啊;就像商家把兰博基尼的操作宣传的再简单,我没钱买也是⽩搭(⽼铁,我太难了!)如果你对编程是懵逼的状态,那还是回去⽤ jmeter 吧,优雅不优雅的先不说,最起码你可以⽤它来⼲活;容易被⼊侵Locust 放出去的蝗⾍很⼩,很容易被⼊侵,开发团队是⼀只打算保持这种状态的。

事件 I/O 和协程的所有繁重⼯作都委托给 gevent团队是看到 jmeter 等其它测试⼯具,处理的太 low,太死板了,所以才写的 locust;Locust 是完全基于 Pythonhttp 请求完全是基于 requests 库;Locust ⽀持 http、https 协议,还⽀持测试其他协议,websocket 等;只要采⽤ Python 调⽤对应的库就可以了。

locust 参数

locust 参数

locust 参数`Locust` 是一个用于进行负载测试的开源工具,使用Python 编写。

在Locust 中,你可以通过命令行参数或者通过编写Python 脚本来配置并运行测试。

以下是一些常用的Locust 参数:1. --host:-用法:`--host=url`-描述:指定被测应用的主机地址。

2. --locustfile:-用法:`--locustfile=your_locust_file.py`-描述:指定Locust 测试脚本的文件路径。

3. -c, --clients:-用法:`-c 100`-描述:指定并发用户数量。

4. -r, --hatch-rate:-用法:`-r 10`-描述:指定每秒启动用户的数量。

5. -t, --run-time:-用法:`-t 1m30s`-描述:指定运行测试的时长。

6. --no-web:-描述:禁用Locust 的Web 界面。

7. --web-host:-用法:`--web-host=0.0.0.0`-描述:指定Locust Web 界面的主机地址。

8. --web-port:-用法:`--web-port=8089`-描述:指定Locust Web 界面的端口号。

9. --headless:-描述:在无头模式下运行Locust(不显示图形界面)。

10. --csv:-用法:`--csv=example`-描述:将结果保存为CSV 文件,文件名为`example.csv`。

11. --csv-full-history:-描述:将完整历史结果保存到CSV 文件中。

12. --csv-sep:-用法:`--csv-sep=,`-描述:指定CSV 文件中的分隔符,默认为逗号。

13. --only-summary:-描述:仅显示总结信息,而不显示详细请求信息。

14. --stop-timeout:-用法:`--stop-timeout=10`-描述:指定停止测试的超时时间。

locust性能测试实战

locust性能测试实战

locust性能测试实战locust性能测试实战1、在Linux上⾯部署好locust⼯具1)安装python3.6.9版本先安装OpenSSL# yum -y install openssl*# wget解压安装包# tar -xf Python-3.6.9.tar.xz# cd Python-3.6.9/# ./configure --prefix=/usr/local/python3 --with-ssl# make && make install建⽴软连接# ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3# ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3升级pip⼯具# pip3 install --upgrade pip2)安装locust⼯具使⽤如下命令进⾏安装:# pip3 install -e检查是否安装成功:看到有帮助信息,说明安装成功了# locust --help如果没有上⾯的信息,可以⾃⼰配置环境变量,如下:配置环境变量,找到locust安装⽬录 # vim /etc/profile export PATH=$PATH:/usr/local/python3/bin/ # source /etc/profile 查看有没有⽣效: # locust -h2、在windows上⾯安装好locust⼯具⾸先确保⾃⼰安装了python3.0以上版本在dos窗⼝中,使⽤命令:python -m pip install -e使⽤locust -h查看是否安装成功3、在pycharm⾥⾯开发(get,post)请求在pycharm中创建get请求的⽂件locust_get.py,⽂件内容如下:from locust import TaskSet,task,HttpLocustclass LocustApi(TaskSet):@task()def get_types(self):respose = self.client.get("/mobile/api/goods/gettypes")result = respose.json()# 断⾔#assert result['code'] ==0if result['code']==0:print('Pass_get')else:print('Fail_get')class WebsiteUser(HttpLocust):task_set = LocustApimin_wait = 3000 # 模拟负载的任务之间执⾏时的最⼩等待时间,单位为毫秒max_wait = 6000 # 模拟负载的任务之间执⾏时的最⼤等待时间,单位为毫秒#stop_timeout = 60000host = ''if __name__ == "__main__":import osos.system("locust -f locust_get.py --host=")运⾏结果为:在浏览器中查看执⾏结果:在pycharm中创建get请求的⽂件locust_post.py,⽂件内容如下:import jsonimport randomfrom locust import TaskSet,task,HttpLocustclass ApiLogin(TaskSet):# 登录@task()def login(self):headers = {'content-type':'application/json'}params = {'mobile':'182********','password':'123456'}data = json.dumps(eval(str(params)))data = data.encode('utf-8')self.client.post('/mobile/api/user/login',data,headers=headers)class WebsiteUser(HttpLocust):task_set = ApiLoginmin_wait = 3000 # 模拟负载的任务之间执⾏时的最⼩等待时间,单位为毫秒max_wait = 6000 # 模拟负载的任务之间执⾏时的最⼤等待时间,单位为毫秒stop_timeout = 300 # 设置多少秒停⽌,是这个场景要跑多长的时间,如果不设置这个字段,脚本会⼀直运⾏host = ""if __name__=="__main__":import os# 启动locustos.system("locust -f locust_post.py --host=host")在pycharm中运⾏脚本,如图所⽰:在浏览器中查看执⾏结果:4、跑性能测试场景,并熟悉每个参数的含义#!/usr/bin/env python#-*-coding:utf-8-*-#@Time:2019/7/25 14:48#@Author:xiaoxian#@File: api_get_post.pyfrom locust import TaskSet, HttpLocust, taskimport jsonimport randomclass LocustApi(TaskSet):# 获取商品列表@task(1)def get_types(self):response = self.client.get("/mobile/api/goods/gettypes")result = response.json()# 断⾔# assert result['code'] == 0if result['code'] == 0:print('Pass_get')else:print('Fail_get')@task(2)def login(self):with open("D:\\python\\locust\\mobile.txt") as f:mobile_id = f.readlines()mobile_ids = []# readlines获取每⼀⾏数据保存为list,每⼀⾏数据是⼀个元素,字符串形式,# 这⾥要遍历转为int可以去掉换⾏符号再append⼀个新数组。

Locust性能测试3-no-web模式和csv报告保存

Locust性能测试3-no-web模式和csv报告保存

Locust性能测试3-no-web模式和csv报告保存前言前面是在web页面操作,需要手动的点start启动,结束的时候也需要手工去点stop,没法自定义运行时间,这就不太方便。

locust提供了命令行运行的方法,不启动web页面也能运行,这就是no-web模式启动无web-UI模式在没有Web UI的情况下运行locust - 可以打开cmd 通过使用—no-web参数,•-c指定要生成的Locust用户数•-r每秒启动虚拟用户数先cd到脚本当前目录,然后执行指令locust -f locustfile.py —host=http://192.168.x.xx:80 —no-web -c 1 -r 1设置运行时间如果要指定测试的运行时间,可以使用—run-timelocust -f locustfile.py —host=http://192.168.x.xx:80 —no-web -c 1 -r 1 —run-time 10或使用-t参数locust -f locustfile.py —host=http://192.168.x.xx:80 —no-web -c 1 -r 1 -t 10运行时间单位,如果不写单位默认是s,也可以指定小时h,分钟m,可以参考以下时间格式•10s 10秒(不写单位默认s)•5m 表示5分钟•1h 1小时•1m30s 1分30秒导出csv格式报告您可能希望通过CSV文件保存的Locus结果。

在这种情况下,有两种方法可以做到这一点。

首先,使用Web UI运行Locust时,您可以在“下载数据”选项卡下点击下载CSV文件。

•Download request statistics CSV•Download response time distribution CSV•Download exceptions CSV也可以可以使用命令行志—no-web模式运行Locust,加上—csv=example参数保存前面两个CSV文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Locust命令行参数详解
-h, --help
查看帮助
-H HOST, --host=HOST
被测试的主机地址,格式:http://10.21.32.33
--web-host=WEB_HOST
Locust Web 页面的主机地址,默认为本机
-P PORT, --port=PORT, --web-port=PORT
被测试主机端口,默认8089
-f LOCUSTFILE, --locustfile=LOCUSTFILE
指定运行Locust 性能测试文件,默认为: locustfile.py
--csv=CSVFILEBASE, --csv-base-name=CSVFILEBASE
以CSV格式存储当前请求测试数据
--master
分布式模式使用,指定当前节点为master 节点
--slave
分布式模式使用,指定当前节点为slave节点
--master-host=MASTER_HOST
分布式模式运行,设置master节点的主机或IP地址,只在与slave节点一起运行时使用,默认为:127.0.0.1
--master-port=MASTER_PORT
分布式模式运行,设置master节点的端口号,只在与slave节点一起运行时使用,默认为:5557。

注意,slave节点也将连接到这个端口上的master节点
--master-bind-host=MASTER_BIND_HOST
绑定Locust的主机名,只有使用master参数时可用,默认为*
--master-bind-port=MASTER_BIND_PORT
绑定Locust的端口,只有使用master参数时可用,默认为5557。

注意Locust将使用这个端口,所以默认情况master节点将绑定到5557和5558
--expect-slaves=EXPECT_SLAVES
定义有多少台slave机器连接到master主机(使用no-web参数时可用)
--no-web
无web界面模式运行测试,需要-c和-r配合使用
-c NUM_CLIENTS, --clients=NUM_CLIENTS
指定并发用户数,no-web模式下可用
-r HATCH_RATE, --hatch-rate=HATCH_RATE
指定每秒启动的用户数,no-web模式下可用
-n NUM_REQUESTS, --num-request=NUM_REQUESTS
指定要请求的次数,no-web模式下可用,0.8.1版本不再提供t参数来指定运行时间
-L LOGLEVEL, --loglevel=LOGLEVEL
指定log级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)。

默认是INFO
--logfile=LOGFILE
日志文件路径。

如果没有设置,日志默认路径为stdout/stderr
--print-stats
在控制台中打印数据
--only-summary
只打印摘要统计
--no-reset-stats
完成测试后不要重置统计数据
-l, --list
显示Locust性能测试文件中可用的类,配合f参数使用
--show-task-ratio
显示locust性能测试文件中测试类的任务执行比例,配合f参数使用
--show-task-ratio-json
以json格式显示locust性能测试文件中测试类的任务执行比例,配合f参数使用
-V, --version
查看当前Locust工具的版本。

相关文档
最新文档