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

   日期:2020-10-07     浏览:150    评论:0    
核心提示:自定义客户端测试其他系统1、引言2、实例展示2.1 定义2.2 客户端代码展示2.3 服务器端代码展示1、引言十一期间,看着朋友圈的各个大佬都是北京游,上海游,云南游,海南游等等。我就不一样了,github游,CSDN游,B站游,知乎游,掘金游等等…反正,十一假期,我是没闲着(开没开车,不确定)…我们今天来看看Locust如何自定义客户端测试系统的 ,由于基础内容,在第一章节,已经介绍完。所以本章内容,就是实例展示!!2、实例展示2.1 定义Locust以HTTP为主要目标构建。但是,通

自定义客户端测试其他系统

  • 1、引言
  • 2、实例展示
    • 2.1 定义
    • 2.2 客户端代码展示
    • 2.3 服务器端代码展示

1、引言

十一期间,看着朋友圈的各个大佬都是北京游,上海游,云南游,海南游等等。
我就不一样了,github游,CSDN游,B站游,知乎游,掘金游等等…

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

我们今天来看看Locust如何自定义客户端测试系统的 ,
由于基础内容,在第一章节,已经介绍完。
所以本章内容,就是实例展示!!

2、实例展示

2.1 定义

Locust以HTTP为主要目标构建。但是,通过编写触发request_successrequest_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性能自动化(四)自定义客户端测试》

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

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服