深聊性能测试,从入门到放弃之: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性能自动化(四)自定义客户端测试》


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

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
3月前
|
存储 测试技术 Linux
添加E1000网卡进行测试,只有VMXNET3性能的四分之一
添加E1000网卡进行测试,只有VMXNET3性能的四分之一
42 0
|
4月前
|
Java 应用服务中间件 测试技术
Tomcat压力测试tps性能下降问题
Tomcat压力测试tps性能下降问题
|
3月前
|
敏捷开发 API
【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
|
5天前
|
机器学习/深度学习 JSON 自然语言处理
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
21 0
|
1月前
|
测试技术 BI
性能基准测试基本流程
性能基准测试基本流程
|
2月前
|
安全 测试技术 5G
你了解客户端测试吗?
你了解客户端测试吗?
|
2月前
|
存储 算法 Java
内存管理探秘:自动化与性能的完美平衡
内存管理探秘:自动化与性能的完美平衡
16 0
|
3月前
|
存储 测试技术 区块链
阿里云、百度云及移动云对象存储横向性能对比测试
在企业的数字化转型进程中,我们观察到越来越多的公司将其IT基础设施迁移到云端。随着企业业务的持续运营,无论是储存、处理、分享还是删除,都会产生大量的数据,这就要求有一个既可靠又高效的系统来管理和存储这些信息。对象存储产品在这个场景中扮演了至关重要的角色。它们以一种可扩展、安全、持久的方式,有效地满足了对大规模非结构化数据存储的需求。 尽管市场上云计算提供商众多,各自都有自己独特的对象存储产品,面对这样的丰富选择,如何寻找最符合企业需求的产品呢?这正是企业今天寻求解答的问题。 在本篇文章中,我们将深入进行一项横向对比测试,专门对阿里云OSS、百度云BOS和移动云EOS这三大云服务提供商的对象
531 0
|
3月前
|
NoSQL 测试技术 Redis
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
50 0
|
3月前
|
NoSQL 测试技术 Redis
Redis【性能 01】Redis 5.x 6.x 7.x 共5个不同版本延迟及性能测试对比分析(单机版默认配置)
Redis【性能 01】Redis 5.x 6.x 7.x 共5个不同版本延迟及性能测试对比分析(单机版默认配置)
62 0

相关产品

  • 云迁移中心