如何解释LocustIO的输出/如何模拟短暂的用户访问

时间:2019-11-20 20:06:47

标签: locust

我喜欢蝗虫,但在解释结果时遇到问题。

例如我的用例是我有一个请愿网站。我预计在12小时内将有10,000人签署请愿书。

我已经编写了一个模拟用户行为的蝗虫文件:

  1. 某些用户加载但不签署请愿书
  2. 某些用户加载并提交无效数据
  3. (希望)一些用户成功提交。

在现实生活中,用户现在走了(因为请愿书是API而不是主要网站)。

蝗虫向我展示了类似的东西

  • 有50个并发用户,中位时间为11秒
  • 有100个并发用户,中位时间为20秒

但是,由于一个“蝗虫”只是一遍又一遍地重复执行任务,因此它并不是真正像一个用户。如果我将其设置为1个用户,那么在一段时间内,它仍然代表许多现实世界的用户;例如在1分钟内,它可能会执行5次任务:总共5位用户。

是否可以解释数据(“这意味着我们每小时可以处理N个人”),或者可以通过某种方式查看每秒或每分钟执行多少“任务”(例如,蝗虫给了我)每秒请求,但不是任务

2 个答案:

答案 0 :(得分:1)

在蝗虫的记录级别上确实没有任务。

如果需要,您可以记录自己的假样本,并将其用作任务计数器。不幸的是,这会增加请求率,但不会影响平均响应时间。

赞:

from locust.events import request_success 

...

      @task(1)
      def mytask(self):
          # do your normal requests
          request_success.fire(request_type="task", name="completed", response_time=None, response_length=0)

答案 1 :(得分:0)

这是我在某个地方遇到问题的方式。我对此不满意,很想听听其他答案。

在我的HttpLocustWebsiteUser)类上创建类变量:

WebsiteUser.successfulTasks = 0

然后在UserBehaviour任务集中:


      @task(1)
      def theTaskThatIsConsideredSuccessful(self):
          WebsiteUser.successfulTasks += 1
          # ...do the work...

      # This runs once regardless how many 'locusts'/users hatch
      def setup(self):
          WebsiteUser.start_time = time.time();
          WebsiteUser.successfulTasks = 0

     # This runs for every user when test is stopped.
     # I could not find another method that did this (tried various combos)
     # It doesn't matter much, you just get N copies of the result!
     def on_stop(self):
          took = time.time() - WebsiteUser.start_time
          total = WebsiteUser.successfulTasks
          avg = took/total
          hr = 60*60/avg
          print("{} successful\nAverage: {}s/success\n{} successful signatures per hour".format(total, avg, hr)

然后设置一个零wait_time并运行直到它解决(或出现故障),然后使用Web UI中的停止按钮停止测试。

输出就像

188 successful
0.2738157498075607s/success
13147.527132862522 successful signatures per hour

因此,我认为这为我提供了服务器可以应付的最大可想象的吞吐量(通过更改填充的用户数量来确定,直到出现故障或平均响应时间变得无法忍受为止)。

显然,实际用户会有暂停,但是这使得测试最大值变得更加困难。

缺点

  • 不能使用分布式蝗虫实例
  • 凌乱也不能“重置”-必须退出该过程并重新启动以进行另一项测试。