千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 完整的Locust测试脚本编写

完整的Locust测试脚本编写

来源:千锋教育
发布人:qyf
时间: 2022-06-02 15:29:00 1654154940

软件测试分为几个阶段

  在上一篇文章中,介绍了运行一个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方法。当每个模拟用户启动时,将调用具有此名称的方法。

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

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT