locust性能测试02—检查点

前言

上一篇文章已经简单的介绍了locust的基本使用和文件结构的组成,以及报告如何查看。

那么这篇文章,就来说说怎么样给locust设置检查点。

和jmeter一样,locust的性能测试也有检查点。

检查点

locust默认情况下会使用默认的检查点,比如当接口超时、链接失败等原因是,会自动判断这条失败了。

但是这好像不太能满足我们的需求,我们需要的是能够自主的控制这个是否失败了,就像jmeter一样提供了丰富的断言组件。我们可以自由的选择一个组件或多个组件进行检查点的设置。

让我们看看怎么样给locust设置检查点吧,回到我们上一篇编写的代码中:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from locust import HttpUser, task, between


class DemoTest(HttpUser):
    host = 'https://www.baidu.com'
    wait_time = between(2, 15)

    def on_start(self):
        self.client.get('/')

    @task
    def search_locust(self):
        self.client.get('/s?ie=utf-8&wd=locust')

要在这个实现一个检查点我们只需要把self.client方法改造一下就好了,接下来我们开始改造。

怎么改造呢,首先self.client提供了一个catch_response=True参数,把这个参数添加在请求中我们就可以使用locust提供的ResponseContextManager类的上下文方法来手动设置检查点。ResponseContextManager里面的有两个方法来声明成功和失败,分别是successfailure。其中failure方法需要我们传入一个参数,内容就是失败的原因。

既然是上下文,我们就应该用with表达式来实现这个功能。我们先来简单的实现一下吧:

with self.client.get('/', catch_response=True) as r: # 传入catch_response参数,值为True
    if r.status_code == 200:
        r.success()
    else:
        r.failure("运行失败了哦哦哦")

就这样实现了一个检查点的功能当然你可以自己定义一个更复杂的判断。

改造代码

我们把上一篇的代码改造一下

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from requests import codes
from locust import HttpUser, task, between


class DemoTest(HttpUser):
    host = 'https://www.baidu.com'
    wait_time = between(2, 15)

    def on_start(self):
        with self.client.get('/', catch_response=True) as r:
            if r.status_code == codes.bad:
                r.success()
            else:
                r.failure("请求百度首页失败了哦哦")

    @task
    def search_locust(self):
        with self.client.get('/s?ie=utf-8&wd=locust', catch_response=True) as r:
            if r.status_code == codes.ok:
                r.success()
            else:
                r.failure("搜索locust失败了哦哦")

其中我们把on_start的判断条件故意设置成失败的,来验证我们编写的检查点是否真实有效。

执行分析

我们启动locust执行一下。

D:VScodelocust-demo>locust -f demo.py
[2020-10-14 21:52:41,782] LAPTOP-5ELHTT45/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow 
locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info.        
[2020-10-14 21:52:41,783] LAPTOP-5ELHTT45/INFO/locust.main: Starting web interface at http://:8089
[2020-10-14 21:52:41,789] LAPTOP-5ELHTT45/INFO/locust.main: Starting Locust 1.1.1

我这次设置了10个用户进行测试。

  • 类似jmeter的聚合报告

可以看到报告里面箭头所指的/方法10次全部都失败了,因为我们在设置检查点的时候预先设置了一个错误的结果,所以就失败了。

  • 趋势图

再看看趋势图可以看到的执行了大约15秒错误的就执行完了,因为我们的on_start请求只有10次。红颜色的线表示的是我们的失败的请求。

  • 失败的请求

可以看到里面详细的说明了失败的请求的次数、方法、和名称以及我们定义的内容。我们在代码定义的错误消息是请求百度首页失败了哦哦,所以这里显示也是这个内容了(滑稽)。

好了说到这里,检查点的内容就这么些了,其实也并不复杂,locust这个工具还是值得学习的,简单又实用。

如果你有其他更好的玩法,欢迎留言。

原文地址:https://www.cnblogs.com/wxhou/p/locust2.html