全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

完整的Locust测试脚本编写

发布时间:2022-06-02 15:29:00
发布人:qyf

软件测试分为几个阶段

  在上一篇文章中,介绍了运行一个Locust测试脚本的完整过成,包括设置运行场景、运行命令、运行中的数据监控等内容,接下来的本文中将会介绍一个完整的测试脚本如何编写。

  首先,看一段完整的测试脚本:

  import time

  from locust import HttpUser, task, between

  class QuickstartUser(HttpUser):

  wait_time = between(1. 5)

  @task

  def hello_world(self):

  self.client.get("/hello")

  self.client.get("/world")

  @task(3)

  def view_items(self):

  for item_id in range(10):

  self.client.get(f"/item?id={item_id}", name="/item")

  time.sleep(1)

  def on_start(self):

  self.client.post("/login", json={"username":"foo", "password":"bar"})

  脚本的内容对于新手来说,可能真的还是有点难度的,不过也没关系,接下来一一的解释一番。

  1、导入常用的包

  Locust测试脚本也是正常的Python代码,也需要导入各种程序包才能很好的运行,所以,第一步就是导入包:

  import time

  from locust import HttpUser, task, between

  以上的包就是time包、Locust包中的部分模块。

  HttpUser模块的作用是模拟用户发送HTTP请求;

  Time模块是为了使用休眠等时间控制函数;

  Task模块是为了使用Locust框架的任务模块

  Between模块是为了设置等待时间的区间的;。

  2、定义测试类

  这里为将要模拟的用户定义一个类。它从HttpUser继承,HttpUser给每个用户一个client属性,这是HttpSession的一个实例,可以用来向想要加载测试的目标系统发出HTTP请求。当测试开始时,locust将为它模拟的每个用户创建该类的实例,每个用户将开始在自己的绿色gevent线程中运行。

  class QuickstartUser(HttpUser):

  一个文件要成为一个有效的locustfile,它必须包含至少一个继承自User的类。

  3、定义wait_time

  它将使模拟用户在每个任务执行后等待1到5秒。

  wait_time = between(1. 5)

  接下来,用@task装饰的方法是Locust文件的核心。对于每个运行的用户,Locust创建一个greenlet(微线程),该线程将调用这些方法。

  4、定义方法

  通过用@task装饰两个方法,案例中已经声明了两个任务,其中一个被赋予了更高的权重(3)。当QuickstartUser运行时,它会选择一个已声明的任务——在本例中是hello_world或view_items——并执行它。任务是随机挑选的,但可以给它们不同的权重。

  上述配置将使Locust选择view_items的可能性是hello_world的三倍。当一个任务完成执行时,User将在它的等待时间(在本例中是1到5秒)中休眠。在它的等待时间之后,它会选择一个新任务并不断重复。

  @task

  def hello_world(self):

  ...

  @task

  def hello_world(self):

  self.client.get("/hello")

  self.client.get("/world")

  @task(3)

  def view_items(self):

  ...

  注意,只有装饰了@task的方法才会被选中,所以可以任意定义自己的内部助手方法。

  5、发送请求

  self.client.get("/hello")

  self.client属性使得发出将被Locust记录的HTTP调用成为可能。案例中使用get方法发送请求。

  HttpUser不是一个真正的浏览器,因此不会解析HTML响应来加载资源或呈现页面。但它会跟踪cookie。

  @task(3)

  def view_items(self):

  for item_id in range(10)

  self.client.get(f"/item?id={item_id}", name="/item")

  time.sleep(1)

  6、设置多参数运行

  在view_items任务中,使用一个可变的查询参数加载10个不同的url。为了不在Locust的统计数据中获得10个单独的条目(因为统计数据是根据URL分组的),使用name参数将所有这些请求分组到一个名为“/item”的条目下。

  def on_start(self):

  self.client.post("/login", json={"username":"foo", "password":"bar"})

  此外,案例还声明了一个on_start方法。当每个模拟用户启动时,将调用具有此名称的方法。

  更多关于软件测试培训的问题,欢迎咨询千锋教育在线名师,如果想要了解我们的师资、课程、项目实操的话可以点击咨询课程顾问,获取试听资格来试听我们的课程,在线零距离接触千锋教育大咖名师,让你轻松从入门到精通。

相关文章

抖音小店运营做什么的

抖音小店运营做什么的

2023-10-08
抖音小店怎么样才有达人标签呢

抖音小店怎么样才有达人标签呢

2023-10-08
抖音小店怎么查看关联账号

抖音小店怎么查看关联账号

2023-10-08
抖音小店怎样推广商品视频呢

抖音小店怎样推广商品视频呢

2023-10-08

最新文章

上海物联网培训一般费用多少

上海物联网培训一般费用多少

2023-09-12
北京物联网培训费用大概多少

北京物联网培训费用大概多少

2023-09-12
北京物联网培训需要费用高不高

北京物联网培训需要费用高不高

2023-09-12
上海效果好的物联网培训费用高吗

上海效果好的物联网培训费用高吗

2023-09-12
在线咨询 免费试学 教程领取