深聊性能测试,从入门到放弃之:Locust性能自动化(四)自定义客户端测试

简介: 深聊性能测试,从入门到放弃之:Locust性能自动化(四)自定义客户端测试

1、引言


十一期间,看着朋友圈的各个大佬都是北京游,上海游,云南游,海南游等等。

我就不一样了,github游,CSDN游,B站游,知乎游,掘金游等等…


反正,十一假期,我是没闲着(开没开车,不确定)…


我们今天来看看Locust如何自定义客户端测试系统的 ,

由于基础内容,在第一章节,已经介绍完。

所以本章内容,就是实例展示!!


2、实例展示


2.1 定义

Locust以HTTP为主要目标构建。但是,通过编写触发request_success 和request_failure事件的自定义客户端,可以轻松扩展对任何基于请求/响应的系统进行负载测试。


2.2 客户端代码展示

我们使用User类XmlRpcUser的示例,来看看XmlRpcUser如何发送请求。

老规矩,上代码


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-05
"""
import time
from xmlrpc.client import ServerProxy, Fault
from locust import User, task, between
class XmlRpcClient(ServerProxy):
    """
    Simple, sample XML RPC client implementation that wraps xmlrpclib.ServerProxy and
    fires locust events on request_success and request_failure, so that all requests
    gets tracked in locust's statistics.
    """
    _locust_environment = None
    def __getattr__(self, name):
        func = ServerProxy.__getattr__(self, name)
        def wrapper(*args, **kwargs):
            start_time = time.time()
            try:
                result = func(*args, **kwargs)
            except Fault as e:
                total_time = int((time.time() - start_time) * 1000)
                self._locust_environment.events.request_failure.fire(
                    request_type="xmlrpc", name=name, response_time=total_time, exception=e
                )
            else:
                total_time = int((time.time() - start_time) * 1000)
                self._locust_environment.events.request_success.fire(
                    request_type="xmlrpc", name=name, response_time=total_time, response_length=0
                )
                # In this example, I've hardcoded response_length=0. If we would want the response length to be
                # reported correctly in the statistics, we would probably need to hook in at a lower level
        return wrapper
class XmlRpcUser(User):
    """
    This is the abstract User class which should be subclassed. It provides an XML-RPC client
    that can be used to make XML-RPC requests that will be tracked in Locust's statistics.
    """
    abstract = True
    def __init__(self, *args, **kwargs):
        super(XmlRpcUser, self).__init__(*args, **kwargs)
        self.client = XmlRpcClient(self.host)
        self.client._locust_environment = self.environment
class ApiUser(XmlRpcUser):
    host = "http://127.0.0.1:8877/"
    wait_time = between(0.1, 1)
    @task(10)
    def get_time(self):
        self.client.get_time()
    @task(5)
    def get_random_number(self):
        self.client.get_random_number(0, 100)

这段示例,也是没有什么难度,如果 通过Locust编写过测试脚本或者进行过测试,那么就很容易理解。

但是,在这里,小鱼还是强调一次,

在这段代码中:


①你可以认识到ApiUser的类,这是一个普通的类,只是声明了几个任务;


②ApiUser继承自XmlRpcUser ,这个可以在ApiUser类上看到;


③abstract = True,则标记为Locust不会尝试从该类创建模拟用户(仅扩展该类的类)。


④ XmlRpcUser在客户端属性下提供XmlRpcClient的实例。


2.3 服务器端代码展示

这是XML-RPC服务器的实现,该服务器可用作客户端代码的服务器。

代码展示:


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-05
"""
import time
from xmlrpc.server import SimpleXMLRPCServer
def get_time():
    time.sleep(random.random())
    return time.time()
def get_random_number(low, high):
    time.sleep(random.random())
    return random.randint(low, high)
server = SimpleXMLRPCServer(("localhost", 8877))
print("Listening on port 8877...")
server.register_function(get_time, "get_time")
server.register_function(get_random_number, "get_random_number")
server.serve_forever()

今天的代码,就分享到这里,

今天的代码,也很简单,

小鱼不写这么多,是因为怕耽误各位十一假期出游啊 ~ ~


同样,小鱼再唠叨一次,可能是习惯性,毕竟写的是系列博文。


①、《深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust》


带你认识 locust,从此不再仅限于 Loadrunner、Jmeter性能功能。


②、《深聊性能测试,从入门到放弃之:Locust性能自动化(二)代码实战》


让你了解locust的内涵,自己也可以动手写性能测试脚本。


③、《深聊性能测试,从入门到放弃之:Locust性能自动化(三)提高locust性能》


让你提高性能,遨游性能的海洋。


④、《深聊性能测试,从入门到放弃之:Locust性能自动化(四)自定义客户端测试》


带你揭开,客户端测试其他系统的方法。

目录
相关文章
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
323 4
|
4月前
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
|
7月前
|
测试技术
软考软件评测师——可靠性测试测试方法
软件可靠性是指软件在规定条件和时间内完成预定功能的能力,受运行环境、软件规模、内部结构、开发方法及可靠性投入等因素影响。失效概率指软件运行中出现失效的可能性,可靠度为不发生失效的概率,平均无失效时间(MTTF)体现软件可靠程度。案例分析显示,嵌入式软件需满足高可靠性要求,如机载软件的可靠度需达99.99%以上,通过定量指标评估其是否达标。
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
337 13
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
190 11
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
228 10
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
695 13
|
12月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
7月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1132 23
|
9月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1440 24