快速入门Python性能测试框架Locust(文末赠书)

目前做性能测试,比较简单常用的工具就是jmeter,但是对于一些复杂需求和场景需要编写java代码,如果只会Python能做性能测试吗,当然可以,今天就介绍一下Python强大的性能测试框架Locust。

Locust简介

一个基于python语言的开源性能测试工具,Locust直译为蝗虫,比喻他能产生蝗虫般成千上万的并发,内部使用requests完成http请求,使用协程完成并发请求,提供WebUI美观方便,支持分布式并发,当然也可以根据需要进行二次开发。

它的最重要优点是运行开销小,可以产生更高的并发请求。

更详细的介绍和使用可以查看官网介绍:https://locust.io/2f31caaa700bfb4ac565f6ef34544cc7.png

Github地址:https://github.com/locustio/locust

Locust安装

需要Python版本3.6及以上环境。

pip install locust

查看是否安装成功

locust -V

一个简单的Locust案例

新建一个用户行为类,定义任务集(用户行为),包含一个或多个请求。设置压测的基本参数,比如指向压测的host,等待时间等。

from locust import task, HttpUser, between

# 定义用户行为
class UserBehavior(HttpUser):
    host = "https://www.baidu.com" # 配置URL
    wait_time = between(1,2) # 用户执行每个task之后等待1-2秒
    # task装饰的方法会在Locust虚拟用户运行过程中被调用
    # 定义任务Locust发送请求是基于requests实现,请求的使用requests库一致
    @task
    def test_baidu(self):
        resp = self.client.get("/")
        return resp.status_code

当然,你也可以添加多个请求

from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
    wait_time = between(1, 2)
    # wait_time = constant(3)  # 每次请求停顿时间 (思考时间)
    # 每个模拟用户开始执行,只执行一次
    def on_start(self):
        self.client.post("/login", json={"username":"foo", "password":"bar"})

    @task
    def hello_world(self):
        self.client.get("/hello")
        self.client.get("/world")
    # task()参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。
    @task(3)
    def view_item(self):
        for item_id in range(10):
            self.client.get(f"/item?id={item_id}", name="/item")

运行Locust

在命令行运行Locust脚本,在cmd下(win),进入到脚本目录,执行命令:

locust -f 文件名.py

设置测试

命令行运行之后,通过浏览器访问:http://localhost:8089(Locust启动网络监控器,默认为端口号为:8089)951a6deff2d30b1954f0131c94e0585a.png出现如下界面启动成功,输入对应的虚拟用户数、用户启动速度,点击Start swarming,开始运行性能测试。047f578f1a4afdd5fad1d31ad091ebca.png

  • Number of users:设置模拟用户总数

  • Spawn rate(users started/second):每秒新增虚拟用户数

  • Host:目标服务器的ip端口或域名

测试监控字段说明

点击STOP,运行完成,查看测试统计如下,类似于jmeter中聚合报告的内容:ad24b01055bf271457ceda12d7f802d2.png

  • Type:请求的类型,例如GET/POST。

  • Name:请求的路径。这里为百度首页,即:https://www.baidu.com/

  • request:当前请求数量。

  • fails:当前请求失败的数量。

  • Median:50%的用户响应时间,单位毫秒

  • 90%ile:90%请求响应时间

  • Average:所有请求的平均响应时间,单位毫秒。

  • Min:最小响应时间,单位毫秒。

  • Max:最大响应时间,单位毫秒。

  • Average size:平均网络字节数

  • Current RPS:每秒请求书(TPS)。

  • Current Failures/s:每秒失败数。

响应时间和TPS曲线图

46345ad237ea49f73fbea3bc95e7b9d5.png

好书推荐

《Python编程从入门到精通》

本书侧重于Python程序开发过程中重点和难点的理解,结合具有典型性的程序案例,用通俗的语言由浅入深、循序渐进地帮助读者掌握Python语言。知识点都使用生活中的案例帮助理解,每个案例都有详尽的代码解释,实战部分也会将Python语言与Web和数据分析等技术相结合,进行技术应用上的扩展。

留言点赞送此书:点在看本文并留言(本文内容相关、本书相关、其他公众号建议),我将随机挑选一位粉丝包邮送出本书(同一人一个月只有一次机会),送书活动会持续进行,机会多多,大家持续关注,感谢。

99bef2a9ae4156a4ef7499275ec44a34.png

猜你喜欢

转载自blog.csdn.net/XingLongSKY/article/details/121551285