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

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 深聊性能测试,从入门到放弃之: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进行规格选择与性能压测。
目录
相关文章
|
29天前
|
运维 自然语言处理 安全
自动化运维的利器:Ansible入门与实践
【8月更文挑战第33天】在现代IT基础设施的管理中,自动化运维已成为提高效率、减少错误的关键技术。Ansible作为一款开源的自动化配置管理和应用部署工具,以其简洁性、易用性和强大的功能受到广泛欢迎。本文将介绍Ansible的基本概念、安装步骤和简单使用,通过实际案例展示其在自动化运维中的应用。
|
2月前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible入门与实践
【8月更文挑战第27天】在这个数字化时代,高效的系统管理变得尤为重要。Ansible,作为一个简单而强大的自动化运维工具,正逐渐成为DevOps工程师的首选。本篇文章将带你了解Ansible的基本概念,通过实际操作演示其如何简化日常任务,以及它如何帮助你实现自动化部署和配置管理。无论你是初学者还是有经验的运维人员,这篇文章都将为你提供有价值的信息和启示。
|
24天前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
67 36
|
2天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【9月更文挑战第28天】在追求高效、稳定的IT运维时代,自动化工具Ansible凭借其简洁性、易用性和强大的功能脱颖而出。本文旨在通过实际案例引导读者理解Ansible的核心概念和操作流程,并分享如何通过Ansible简化日常运维任务,提升工作效率。从基础安装到高级应用,我们将一步步揭开Ansible的神秘面纱,让初学者也能轻松掌握自动化运维的要诀。
|
7天前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
9天前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
13天前
|
存储 运维 网络安全
自动化运维工具:Ansible入门与实践
【9月更文挑战第17天】本文将介绍Ansible的基本概念、安装和简单使用,以及如何编写一个简单的Ansible playbook。通过本文,您可以了解到Ansible的基本原理和使用方法,以及如何在实际工作中应用Ansible进行自动化运维。
|
21天前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
17天前
|
运维 应用服务中间件 nginx
自动化运维的利器:Ansible入门与实践
【9月更文挑战第13天】在这个快速发展的IT时代,自动化运维已成为提升效率、减少失误的关键。本文将带你了解Ansible,一个强大的自动化工具,它简化了配置管理、应用部署和任务自动化。通过实际案例,我们将探索Ansible的基本概念、安装步骤、关键组件以及如何编写Playbook来自动化日常任务。无论你是新手还是有经验的运维专家,这篇文章都将为你提供宝贵的见解和技巧,让你在自动化运维的道路上更进一步。
|
29天前
|
运维 监控 应用服务中间件
自动化运维的新篇章:Ansible Playbooks入门与实战
【9月更文挑战第1天】在追求效率和稳定性的今天,自动化运维已经成为IT行业的必修课。本文将带你走进自动化工具Ansible的世界,通过实战案例深入理解Ansible Playbooks的编写和应用。文章不仅介绍基础概念,更通过具体代码示例,展示如何利用Ansible简化日常运维任务,提升工作效率。无论你是运维新手还是希望深化自动化技能的资深人士,本指南都将为你开启一段新的学习旅程。
下一篇
无影云桌面