Locust接口性能测试_python locust 接口性能

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

restful_api_locust.py

from locust import  HttpLocust,TaskSet,task

class UserBehavior(TaskSet):

    @task(2)
    def test_users(self):
        self.client.get("/users/",auth=('51zxw','zxw20182018'))


    @task(1)
    def test_groups(self):
        self.client.get("/groups/",auth=('51zxw','zxw20182018'))


class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 3000
    max_wait = 6000



UserBehavior类继承TaskSet类,用于描述用户行为。

  • @task装饰该方法为一个事务,后面的数字表示请求比例,上面的比例为2:1 默认都是1:1
  • test_users()方法表示一个用户行为,这里是请求user接口。
  • test_groups()方法表示请求group接口。
  • client.get()用于指定请求的路径。

WebsiteUser类用于设置性能测试。

  • task_set:指向一个定义的用户行为类。
  • min_wait:执行事务之间用户等待时间的下界(单位:毫秒)。
  • max_wait:执行事务之间用户等待时间的上界(单位:毫秒)。
执行测试

使用如下命令开始启动测试

C:\Users\Shuqing>locust -f D:\api_test\locust\restful_api_locust.py --host=http://127.0.0.1:8000
[2018-07-24 15:39:22,917] LAPTOP-8B5JADC8/INFO/locust.main: Starting web monitor at *:8089
[2018-07-24 15:39:22,917] LAPTOP-8B5JADC8/INFO/locust.main: Starting Locust 0.8.1

在浏览器打开localhost:8089可以看到如下页面:

  • Number of users to simulate:设置模拟用户数。
  • Hatch rate(users spawned/second):每秒产生(启动)的虚拟用户数。
  • 单击“Start swarming”按钮,开始运行性能测试

运行之后可以看到主界面如下:

性能测试参数如下。

  • Type:请求的类型,例如GET/POST。
  • Name:请求的路径。
  • request:当前请求的数量。
  • fails:当前请求失败的数量。
  • Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。
  • Average:平均值,单位毫秒,所有请求的平均响应时间。
  • Min:请求的最小服务器响应时间,单位毫秒。
  • Max:请求的最大服务器响应时间,单位毫秒。
  • Content Size:单个请求的大小,单位字节。
  • reqs/sec:每秒钟请求的个数。

点击 Charts 菜单可以查看性能图表

图表含义如下:

  • Total Request per Second :每秒的请求数
  • Average Response Time: 平均响应时间
  • Number of Users: 用户数

参数化

测试场景

如果想对如下接口进行并发测试,则可以将id进行参数化设置

http://127.0.0.1:8000/groups/1/
http://127.0.0.1:8000/groups/2/
http://127.0.0.1:8000/users/1/
http://127.0.0.1:8000/users/2/

代码实现

locust_users_groups.py


from locust import  HttpLocust,TaskSet,task

class UserBehavior(TaskSet):

    def on_start(self):
        #设置user和group参数下标初始值
        self.users_index=0
        self.groups_index=0

    @task
    def test_users(self):
        #读取参数
        users_id=self.locust.id[self.users_index]
        url="/users/"+str(users_id)+'/'
        self.client.get(url,auth=('51zxw','zxw20182018'))
        #取余运算循环遍历参数
        self.users_index=(self.users_index+1)%len(self.locust.id)

    @task
    def test_groups(self):
        #参数化
        groups_id=self.locust.id[self.groups_index]
        url="/groups/"+str(groups_id)+"/"
        self.client.get(url,auth=('51zxw','zxw20182018'))
        self.groups_index=(self.groups_index+1)%len(self.locust.id)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    #参数配置
    id=[1,2]
    min_wait = 3000
    max_wait = 6000
    #host配置
    host = 'http://127.0.0.1:8000'



运行结果

执行如下命令即可运行测试

C:\Users\Shuqing>locust -f D:\api_test\locust\locust_users_groups.py

运行模式

no-web运行

前面是通过登录web来运行测试的,其实也可以非web状态来运行,如cmd命令来运行。如果需要非Web形式运行,则需使用--no-web参数,并会用到如下几个参数。

  • -c, --clients:指定并发用户数;
  • -r, --hatch-rate:指定并发加压速率,默认值位1。
  • -t, --run-time:设置运行时间。如(300s,20m, 3h, 1h30m等);

运行命令如下:

locust -f D:\api_test\locust\locust_users_groups.py --no-web -c 10 -r 2 -t 15s

运行结果如下:

C:\Users\Shuqing>locust -f D:\api_test\locust\locust_users_groups.py --no-web -c 10 -r 2 -t 15s
[2018-08-21 10:12:59,017] LAPTOP-8B5JADC8/INFO/locust.main: Run time limit set to 15 seconds
[2018-08-21 10:12:59,017] LAPTOP-8B5JADC8/INFO/locust.main: Starting Locust 0.8
[2018-08-21 10:12:59,018] LAPTOP-8B5JADC8/INFO/locust.runners: Hatching and swarming 10 clients at the rate 2 clients/s...
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                              0     0(0.00%)                                       0.00

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     2     0(0.00%)     134     122     146  |     120    0.00
 GET /users/1/                                                      2     0(0.00%)     118     100     136  |     100    0.00
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                              4     0(0.00%)                                       0.00

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     4     0(0.00%)     135     122     146  |     130    1.00
 GET /users/1/                                                      4     0(0.00%)     115     100     136  |     100    1.00
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                              8     0(0.00%)                                       2.00

[2018-08-21 10:13:04,034] LAPTOP-8B5JADC8/INFO/locust.runners: All locusts hatched: WebsiteUser: 10
[2018-08-21 10:13:04,034] LAPTOP-8B5JADC8/INFO/locust.runners: Resetting stats

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     1     0(0.00%)     147     147     147  |     150    0.00
 GET /users/1/                                                      2     0(0.00%)     110      92     128  |      92    0.00
 GET /users/2/                                                      1     0(0.00%)     102     102     102  |     100    0.00
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                              4     0(0.00%)                                       0.00

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     3     0(0.00%)     129     101     147  |     140    0.00
 GET /users/1/                                                      3     0(0.00%)     108      92     128  |     100    0.00
 GET /users/2/                                                      1     0(0.00%)     102     102     102  |     100    0.00
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                              7     0(0.00%)                                       0.00

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     4     0(0.00%)     125     101     147  |     110    1.00
 GET /groups/2/                                                     2     0(0.00%)     136     116     156  |     120    0.00
 GET /users/1/                                                      3     0(0.00%)     108      92     128  |     100    1.00
 GET /users/2/                                                      2     0(0.00%)     102     102     102  |     100    0.33
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                             11     0(0.00%)                                       2.33

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     5     0(0.00%)     123     101     147  |     120    0.75
 GET /groups/2/                                                     3     0(0.00%)     124     100     156  |     120    0.50
 GET /users/1/                                                      3     0(0.00%)     108      92     128  |     100    0.75
 GET /users/2/                                                      4     0(0.00%)     114     102     153  |     100    0.25
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                             15     0(0.00%)                                       2.25

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     6     0(0.00%)     128     101     157  |     120    0.67
 GET /groups/2/                                                     5     0(0.00%)     127     100     156  |     120    0.33
 GET /users/1/                                                      4     0(0.00%)     108      92     128  |     100    0.50
 GET /users/2/                                                      5     0(0.00%)     121     102     153  |     100    0.50
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                             20     0(0.00%)                                       2.00

[2018-08-21 10:13:13,691] LAPTOP-8B5JADC8/INFO/locust.main: Time limit reached. Stopping Locust.
[2018-08-21 10:13:13,693] LAPTOP-8B5JADC8/INFO/locust.main: Shutting down (exit code 0), bye.
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                     6     0(0.00%)     128     101     157  |     120    0.67
 GET /groups/2/                                                     5     0(0.00%)     127     100     156  |     120    0.33
 GET /users/1/                                                      4     0(0.00%)     108      92     128  |     100    0.50
 GET /users/2/                                                      5     0(0.00%)     121     102     153  |     100    0.50
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                             20     0(0.00%)                                       2.00

Percentage of the requests completed within given times
 Name                                                           # reqs    50%    66%    75%    80%    90%    95%    98%    99%   100%
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /groups/1/                                                      6    140    140    150    150    160    160    160    160    157
 GET /groups/2/                                                      5    120    150    150    160    160    160    160    160    156
 GET /users/1/                                                       4    110    110    130    130    130    130    130    130    128
 GET /users/2/                                                       5    100    150    150    150    150    150    150    150    153
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                              20    120    140    150    150    160    160    160    160    157
 


分布式运行

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

[外链图片转存中…(img-PZpZjAKj-1715807343398)]
[外链图片转存中…(img-db3FyIRA-1715807343399)]
[外链图片转存中…(img-35AGlVcq-1715807343399)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值