性能测试

性能测试工具Locust使用指南(二)

2017-11-27  本文已影响37人  yytester

上一篇文章性能测试工具Locust使用指南(一)主要介绍了Locust的基本概念,主要功能和一个示例,这篇主要讲进阶的功能.


一个locustfile至少包含一个继承了Locust的类.Locust会为被模拟的每个用户生成locust的实例,这些属性是应该被实现的:


每个Locust类必须有一个task_set属性,task_set指向一个TaskSet类。TaskSet相当于Locust的大脑.
任务设置任务的典型方法是使用任务修饰器:

from locust import Locust, TaskSet, task

class MyTaskSet(TaskSet):
    @task
    def my_task(self):
        print("Locust instance (%r) executing my_task" % (self.locust))

class MyLocust(Locust):
    task_set = MyTaskSet

taskset的一个非常重要的特性是它们可以被嵌套,因为真正的网站通常是以分层的方式构建的,有多个子节。嵌套taskset将允许我们定义一个行为,以更现实的方式模拟用户。例如,可以用以下结构定义taskset:

class ForumPage(TaskSet):
  @task(20)
  def read_thread(self):
      pass

  @task(1)
  def new_thread(self):
      pass

  @task(5)
  def stop(self):
      self.interrupt()

class UserBehaviour(TaskSet):
  tasks = {ForumPage:10}

  @task
  def index(self):
      pass

在上面的例子中,如果ForumPage在执行UserBehaviour任务集时被选择执行,那么ForumPage任务集就会开始执行。ForumPage任务集将选择它自己的任务之一执行它.

有一个重要的事情需要注意,那就是在ForumPage的stop方法中调用self.interrupt()。这实际上是停止执行ForumPage任务集,但UserBehaviour实例将会继续运行。如果没有调用ForumPage的中断()方法,那么Locust一旦启动就不会停止运行该ForumPage任务。通过使用中断函数,我们可以结合任务权重定义一个模拟用户离开测试网站的可能。

还可以使用@ task decorator声明嵌套的TaskSet,就像声明普通任务时一样:

class MyTaskSet(TaskSet):
  @task
  class SubTaskSet(TaskSet):
      @task
      def my_task(self):
          pass
上一篇 下一篇

猜你喜欢

热点阅读