前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Locust-参数化之批量创建任务

Locust-参数化之批量创建任务

作者头像
用户5521279
发布2020-01-02 11:48:47
1.9K1
发布2020-01-02 11:48:47
举报
文章被收录于专栏:搜狗测试搜狗测试

一、背景

最近测试汪小电APP,需要针对后端创建任务的接口进行压力测试。压力测试,大部分同学第一时间想到的就是Jmeter。Jmeter虽然可以为每个用户分配一个单独的线程,提高每个用户并发数,但是每个步骤的线程分配和基准测试需要大量资源,导致一台机器上模拟的用户数量非常有限。针对大规模用户请求的性能测试使用Jmeter显然很难达到测试要求,所以决定使用Locust来模拟大规模用户请求。

关于Locust基本用法的介绍可以参考公众号里面其他文章的介绍,本文主要写的是Locust参数化批量创建任务。

(1)蝗虫过境,你的系统扛得住吗?

(2)一款hackable的压测工具Locust(一)

(3)一款hackable的压测工具Locust(二)

二、应用

1、场景设计

测试场景是所有并发虚拟用户共享同一份测试数据,并且保证虚拟用户使用的数据不重复。 例如,模拟1000用户并发创建任务并提交任务到后端,总共有10000个任务,每个任务要求任务内容不重复(通过不同的电话号码来区分),任务创建并提交到后端结束测试。

数据准备

虚拟用户数,可以在启动的时候设置,这里先准备需要用到的手机号。

代码语言:javascript
复制
# 生成测试手机号
Tel = 15616160000
Teldatas = [str(demo+i) for i in range(10000)]

将测试数据加到队列

代码语言:javascript
复制
import queue
# 添加到队列
Telqueue = queue.Queue()
for i in Teldatas:
    Telqueue.put_nowait(i)

2、编写任务创建请求

locust里面请求是基于requests的,每个方法请求和requests差不多,请求参数、方法、响应对象和requests一样的使用。

  • requests.get 对应client.get
  • requests.post 对应client.post
代码语言:javascript
复制
# coding:utf-8
from locust import HttpLocust,TaskSet,task
import queue
import json
class TaskDemo(TaskSet):
    @task(1)
    def Request_Task(self):
      try:
          Tel = self.locust.telqueue.get()# 获取队列里的数据
          print(tel)
      except queue.Empty:                 # 队列取空后,直接退出
          print("no data exist")
          exit(0)
      header = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
      "Appid":"15Dy8oGpZg25DldDip",
      "Authorization":"Bearer eyJhbGciOiJkaXIiLC"  
      }
      body =json.dumps({
        "name":"wangxiaodian",
        "time":"2019-12-20T00:00:00Z"
      })
      url = "/api/test"
      response = self.client.post(url,data=body,headers = header)
      assert response.status_code == 200
    class websitUser(HttpLocust):
    task_set = TaskDemo
    min_wait = 3000  # 单位毫秒
    max_wait = 6000  
    Teldatas = [str(15616160000+i) for i in range(10000)]
    Telqueue = queue.Queue()  # 添加到队列
    for i in Teldatas:
      Telqueue.put_nowait(i)
    if __name__ == "__main__":
    import os
    os.system("locust -f demo.py --host=http://sogou" )

3、Locust启动

locust可以直接在命令行中启动

$ locust -f demo.py --host=http://test.sogou

-f 参数是指定运行的脚本

—host是指定运行服务的host地址

可以在命令后添加参数--master和--slave进行分布式测试

运行成功后,会成功返回服务启动的端口号,如果是在本机上搭建的locust,可以直接在浏览器中输入http://localhost:8089(默认端口)。

三、测试结果

本次测试共启动了8个slave。测试的结果展示如下。

  • 吞吐量/每秒响应事务数(rps)实时统计
  • 平均响应时间/平均事务数实时统计
  • 虚拟用户数运行

四、总结

本期为大家简单的介绍了Locust-参数化批量创建任务的使用方法,针对性能或并发用户要求较大的测试场景,可以充分利用Locust的特点进行测试。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档