8-更大并、可混合接口模式压测的FastHttpUser

FastHttpUser

和HttpUser相比,这个类的运行占用更少压测机的CPU并且可以支撑更大的并发数,并且可以配合gevent类来实现接口混合模式压测(一个user在几乎同一时间并发多个api请求),直接上例子

import time

from gevent.pool import Pool
from locust import FastHttpUser, task


def api_01():
    print(time.time())
    time.sleep(5)
    print('api1')


def api_02():
    print(time.time())
    print('api2')


def api_03():
    print(time.time())
    print('api3')


class MyFastHttpUser(FastHttpUser):
    host = 'https://www.baidu.com'

    @task
    def test_01(self):
        p = Pool()
        p.spawn(api_03())
        p.spawn(api_02())
        p.spawn(api_01())
        p.join()

[2023-09-19 15:04:59,369] HUAWEI-MateBook-X-Pro.local/INFO/locust.main: Run time limit set to 10 seconds
[2023-09-19 15:04:59,369] HUAWEI-MateBook-X-Pro.local/INFO/locust.main: Starting Locust 2.15.1
[2023-09-19 15:04:59,370] HUAWEI-MateBook-X-Pro.local/INFO/locust.runners: Ramping to 1 users at a rate of 1.00 per second
[2023-09-19 15:04:59,370] HUAWEI-MateBook-X-Pro.local/INFO/locust.runners: All users spawned: {"MyFastHttpUser": 1} (1 total users)
1695107099.3706381
api3
1695107099.370649
api2
1695107099.3706539
api1
1695107104.3773599
api3
1695107104.377412
api2
1695107104.377436

从结果可以看出,每一次user执行时,3个请求几乎是同一时间发起的,用过jmeter都知道,jmeter一个线程组的http取样器的执行是串行的,也就是说第一个取样器没结束请求前,第二个取样器是不会发起请求的,而当我们需要模拟一个页面的并发访问(前端发起请求大多数是使用异步并发请求),使用jmeter就肯定模拟不出来,因此使用locust的fasthttpuser就可以解决该问题。同时也可以配置每个请求的超时时间,避免某次请求等待时间太长,影响整体测试结果,代码如下:

class MyFastHttpUser(FastHttpUser):
    host = 'https://www.baidu.com'
    network_timeout = 10.0 # 直接重写FastHttpUser的network_timeout属性即可,最长请求时间修改为10s
posted @ 2023-09-19 18:32  威力Kami  阅读(98)  评论(0编辑  收藏  举报