Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
LOAD TESTING MANAGEMENT METHOD AND SYSTEM
Document Type and Number:
WIPO Patent Application WO/2018/072095
Kind Code:
A1
Abstract:
Disclosed is a load testing management method and system. The method comprises: receiving a load testing parameter uploaded by a client and storing the same in a database; reading the load testing parameter in the database; batch-transmitting the load testing parameter to all load testing nodes, batch-configuring a load testing script for all of the load testing nodes according to the load testing parameter; batch-sending a test activation instruction to all of the load testing nodes, batch-sending a monitoring instruction to a system being tested; and receiving a testing situation parameter and storing the same in the database, and sending testing situation data in real time to the client. By directly reading the load testing parameter in the database and performing a uniform configuration on the load testing nodes according to a preset script parameter, there is no need to manually input the testing parameters to Locust each time, or perform script configuration on each of the load testing nodes, thus making the method more automated than existing Locust systems, and significantly increasing Locust's efficiency.

Inventors:
WEN QINGSHAN (CN)
Application Number:
PCT/CN2016/102436
Publication Date:
April 26, 2018
Filing Date:
October 18, 2016
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
SHENZHEN FOSCAM INTELLIGENT TECH CO LTD (CN)
International Classes:
H04L12/26; G06F11/36
Foreign References:
CN101217419A2008-07-09
CN103916283A2014-07-09
CN105471675A2016-04-06
CN105740152A2016-07-06
CN105740142A2016-07-06
US20110055633A12011-03-03
Attorney, Agent or Firm:
SHENZHEN ZHONGYI PATENT AND TRADEMARK OFFICE (CN)
Download PDF:
Claims:
权利要求书

一种压力测试管理方法, 其特征在于, 包括:

接收客户端上传的压力测试参数, 并存入数据库;

读取数据库中压力测试参数;

批量传输所述压力测试参数至所有压力测试节点, 并根据所述压力测 试参数, 批量配置所有所述压力测试节点的压力测试脚本; 批量发送测试启动指令到所有所述压力测试节点, 并批量发送监控指 令到被测系统;

接收测试情况参数, 将所述测试情况参数存入数据库, 并实吋将所述 测试情况数据发送至所述至客户端。

如权利要求 1所述的方法, 其特征在于:

所述压力测试参数包括: 压力测试脚本参数、 监控参数及场景参数; 所述压力测试脚本参数包括: 压力测试节点的配置地址及压力测试脚 本。

如权利要求 1或 2所述的方法, 其特征在于, 包括:

所述的压力测试脚本参数为多重形态数据格式的数据。

如权利要求 1或 2所述的方法, 其特征在于, 包括:

读取所述脚本参数中的所述压力测试节点的配置地址;

根据所述压力测试节点的配置地址, 禾 1」用 paramiko模块的安全传输方 法, 将所述压力测试脚本批量上传到对应的各个压力测试节点。 如权利要求 1所述的方法, 其特征在于, 所述接收测试情况参数, 将 所述测试情况参数存入数据库之后还包括:

接收所述客户端发送的历史测试査询指令;

根据所述历史测试査询指令, 读取所述数据库中相应的所述压力测试 参数及相应的所述测试情况参数;

发送所述相应的所述压力测试参数及所述相应的所述测试情况参数至 所述客户端。

一种压力测试管理系统, 其特征在于, 包括: 第一接收单元, 用于接收客户端上传的压力测试参数, 并存入数据库 读取单元, 用于读取数据库中压力测试参数;

传输单元, 用于批量传输所述压力测试参数至所有压力测试节点, 并 根据所述压力测试参数, 批量配置所有所述压力测试节点的压力测试 脚本;

指令发送单元, 用于批量发送测试启动指令到所有所述压力测试节点 , 并批量发送监控指令到被测系统;

第二接收单元, 用于接收测试情况参数, 将所述测试情况参数存入数 据库, 并实吋将所述测试情况数据发送至所述至客户端。

[权利要求 7] 如权利要求 6所述的系统, 其特征在于:

所述压力测试参数包括: 压力测试脚本参数、 监控参数及场景参数; 所述压力测试脚本参数包括: 压力测试节点的配置地址及压力测试脚 本。

[权利要求 8] 如权利要求 6或 7所述的系统, 其特征在于:

所述的压力测试脚本参数是多重形态数据格式的数据。

[权利要求 9] 如权利要求 6或 7所述的系统, 其特征在于, 所述传输单元包括: 读取所述脚本参数中的所述压力测试节点的配置地址;

根据所述压力测试节点的配置地址, 禾 1」用 paramiko模块的安全传输方 法, 将所述压力测试脚本批量上传到对应的各个压力测试节点。

[权利要求 10] 如权利要求 6所述的系统, 其特征在于, 所述第二接收单元之后还包 括:

接收所述客户端发送的历史测试査询指令;

根据所述历史测试査询指令, 读取所述数据库中相应的所述压力测试 参数及相应的所述测试情况参数;

发送所述相应的所述压力测试参数及所述相应的所述测试情况参数至 所述客户端。

Description:
发明名称:一种压力测试管理方法及系统

技术领域

[0001] 本发明属于压力测试领域, 尤其涉及一种压力测试管理方法及系统。

背景技术

[0002] Locust (蝗虫) 是一种基于 Python语言的支持分布式的压力测试工具, 能够测 试系统的并发处理能力, 可以用来测试网站服务或者其他业务。 Locust主要思想 就是模拟一群用户将访问你的网站。 在测试过程中, 会产生大量的用户 (Locust s蝗群) 对系统进行攻击, 每个用户 (Locust蝗虫) 的行为是通过 Python语言代码 定义控制的, 并且整个测试过程有一个网站界面可以实吋观 察测试数据。

[0003] 现有技术中, Locust虽然功能强大, 但存在各项测试所需参数均需手动输入启 动、 压力测试脚本需要在每个压力测试节点上分别 进行操作等缺点, 极大地影 响了 Locust的测试效率, 导致了 Locust效率低下的问题。

技术问题

[0004] 有鉴于此, 本发明实施例提供了一种压力测试管理方法及 系统, 以解决现有技 术中各项测试所需参数均需手动输入启动、 压力测试脚本需要在每个压力测试 节点上分别进行操作, 导致了 Locust效率低下的问题。

问题的解决方案

技术解决方案

[0005] 第一方面, 提供了一种压力测试管理方法, 包括:

[0006] 接收客户端上传的压力测试参数, 并存入数据库;

[0007] 读取数据库中压力测试参数;

[0008] 批量传输所述压力测试参数至所有压力测试节 点, 并根据所述压力测试参数, 批量配置所有所述压力测试节点的压力测试脚 本;

[0009] 批量发送测试启动指令到所有所述压力测试节 点, 并批量发送监控指令到被测 系统;

[0010] 接收测试情况参数, 将所述测试情况参数存入数据库, 并实吋将所述测试情况 数据发送至所述至客户端。

[0011] 进一步地, 所述数据库中压力测试脚本参数包括:

[0012] 所述压力测试参数包括: 压力测试脚本参数、 监控参数及场景参数; 所述压力 测试脚本参数包括: 压力测试节点的配置地址及压力测试脚本。

[0013] 进一步地, 所述接收客户端上传的压力测试脚本参数包括 :

[0014] 所述的压力测试脚本参数是多重形态数据格式 的数据。

[0015] 进一步地, 所述根据所述压力测试脚本参数, 批量配置所有所述压力测试节点 的压力测试脚本包括:

[0016] 读取所述脚本参数中的所述压力测试节点的配 置地址;

[0017] 根据所述压力测试节点的配置地址, 禾 1」用 paramiko模块的安全传输方法, 将所 述压力测试脚本批量上传到对应的各个压力测 试节点。

[0018] 进一步地, 所述实吋将所述监控信息与所述测试结果信息 发送至所述客户端包 括:

[0019] 接收所述客户端发送的历史测试査询指令; 根据所述历史测试査询指令, 读取 所述数据库中相应的所述压力测试参数及相应 的所述测试情况参数; 发送所述 相应的所述压力测试参数及所述相应的所述测 试情况参数至所述客户端。

[0020] 第二方面, 提供了一种压力测试管理系统, 包括:

[0021] 第一接收单元, 用于接收客户端上传的压力测试参数, 并存入数据库;

[0022] 读取单元, 用于读取数据库中压力测试参数;

[0023] 传输单元, 用于批量传输所述压力测试参数至所有压力测 试节点, 并根据所述 压力测试参数, 批量配置所有所述压力测试节点的压力测试脚 本;

[0024] 指令发送单元, 用于批量发送测试启动指令到所有所述压力测 试节点, 并批量 发送监控指令到被测系统;

[0025] 第二接收单元, 用于接收测试情况参数, 将所述测试情况参数存入数据库, 并 实吋将所述测试情况数据发送至所述至客户端 。

[0026] 进一步地, 所述数据库中压力测试脚本参数包括:

[0027] 所述压力测试参数包括: 压力测试脚本参数、 监控参数及场景参数; 所述压力 测试脚本参数包括: 压力测试节点的配置地址及压力测试脚本。 [0028] 进一步地, 所述接收客户端上传的压力测试脚本参数包括 :

[0029] 所述的压力测试脚本参数是多重形态数据格式 的数据。

[0030] 进一步地, 所述传输单元包括:

[0031] 读取所述脚本参数中的所述压力测试节点的配 置地址;

[0032] 根据所述压力测试节点的配置地址, 禾 1」用 paramiko模块的安全传输方法, 将所 述压力测试脚本批量上传到对应的各个压力测 试节点。

[0033] 进一步地, 所述第二接收单元包括:

[0034] 接收所述客户端发送的历史测试査询指令; 根据所述历史测试査询指令, 读取 所述数据库中相应的所述压力测试参数及相应 的所述测试情况参数; 发送所述 相应的所述压力测试参数及所述相应的所述测 试情况参数至所述客户端。

发明的有益效果

有益效果

[0035] 在本发明实施例中, 通过直接读取数据库中的压力测试参数, 并根据压力测试 参数, 批量传输压力测试参数, 批量配置所有压力测试节点的压力测试脚本, 使得 Locust无需手动逐个进行压力测试参数输入更无 需对每个压力测试节点逐个 进行脚本配置, 使用批量发送监控指令, 使得监控操作也无需逐个手动操作, 相比于现有的 Locust更加自动化, 极大地提高了 Locust效率。

对附图的简要说明

附图说明

[0036] 为了更清楚地说明本发明实施例中的技术方案 , 下面将对实施例或现有技术描 述中所需要使用的附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是 本发明的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动性 的前提下, 还可以根据这些附图获得其他的附图。

[0037] 图 1是本发明实施例提供的压力测试管理方法的 现流程图;

[0038] 图 2是本发明实施例提供的代理服务器录制生成 Locust压力测试脚本的方法示意 图;

[0039] 图 3是本发明实施例提供的压力测试脚本参数形 及上传数据库具体实现流程 图; [0040] 图 4是本发明实施例提供的 Locust压力测试历史结果査询流程示意图;

[0041] 图 5是将本发明应用在 Locust压力测试的具体实施例流程图;

[0042] 图 6是本发明实施例提供的压力测试管理系统的 构框图。

本发明的实施方式

[0043] 以下描述中, 为了说明而不是为了限定, 提出了诸如特定系统结构、 技术之类 的具体细节, 以便透彻理解本发明实施例。 然而, 本领域的技术人员应当清楚 , 在没有这些具体细节的其它实施例中也可以实 现本发明。 在其它情况中, 省 略对众所周知的系统、 系统、 电路以及方法的详细说明, 以免不必要的细节妨 碍本发明的描述。

[0044] 本发明实施例基于 Locust实现, 接收客户端上传的压力测试参数, 并存入数据 库; 读取数据库中压力测试参数; 批量传输所述压力测试参数至所有压力测试 节点, 并根据所述压力测试参数, 批量配置所有所述压力测试节点的压力测试 脚本; 批量发送测试启动指令到所有所述压力测试节 点, 并批量发送监控指令 到被测系统; 接收测试情况参数, 将所述测试情况参数存入数据库, 并实吋将 所述测试情况数据发送至所述至客户端。

[0045] 为了说明本发明所述的技术方案, 下面通过具体实施例来进行说明。

[0046] 图 1示出了本发明实施例一提供的压力测试管理 法的实现流程, 详述如下: [0047] 在 S101中, 接收客户端上传的压力测试参数, 并存入数据库。

[0048] 所述客户端是指终端的应用或网站, 如手机 app应用和电脑端网站等。

[0049] 所述压力测试参数包括: 压力测试脚本参数、 监控参数及场景参数;

[0050] 所述压力测试脚本参数包括: 压力测试节点的配置地址及压力测试脚本。

[0051] 所述的压力测试节点的配置地址是指压力测试 脚本对应要上传的压力测试节点 的地址。 压力测试脚本在上传压力测试节点吋, 需要指定每个压力测试脚本对 应的压力测试节点, 此吋就需要确定好每个压力测试脚本对应要上 传的压力测 试节点的地址, 即所述的压力测试节点的配置地址。

[0052] 所述监控参数包括: 监控地址及监控状态。

[0053] 所述监控地址是指被测系统的地址, 所述监控状态是指所需监控的被测系统在 测试吋各项参数指标状态, 如响应吋间、 交易容量、 并发容量、 资源使用率等 参数。

[0054] 由于被测系统可能是网站服务器或其他业务, 以被测系统为网站服务器为例, 假定希望压力测试某网站服务器在大量用户同 吋使用吋的响应速度, 我们要确 定该网站的 IP地址, 则所述该网站的 IP地址即为此次压力测试的监控地址, 而在 不用用户数量的情况下网站响应速度的状态即 为为所述监控状态。

[0055] 用户通过设置监控状态来获取需要监测的特定 参数在压力测试吋的状态, 以满 足实际需求。

[0056] 所述场景参数包括: 虚拟用户数及测试吋间。

[0057] 所述虚拟用户数, 是指用于模拟实际用户登录系统并操作以测试 系统的抗压能 力。

[0058] 所述测试吋间, 是指该次压力测试需要测试的吋间长, 如设定该次压力测试持 续吋长为 30分钟, 在 30分钟后停止压力测试, 则该 30分钟即为所述测试吋间。 在进行压力测试的同吋服务端也在执行测试吋 间监控任务, 在到达设定的测试 吋间吋结束压力测试。

[0059] 在所述接收客户端上传的压力测试参数, 并存入数据库之前, 还包括, 客户端 采用通过代理服务器录制生成 Locust压力测试脚本的方法先获取压力测试脚本 , 再由用户设定好压力测试节点的配置地址, 形成最终的压力测试脚本参数。

[0060] 现有技术中, Locust压力测试脚本 (即 Locust压力测试代码) 的获得均为人工 手动逐个输入, 十分不便, 本发明实施例采用通过代理服务器录制生成 Locust压 力测试脚本的方法来实现自动化生成 Locust压力测试脚本, 提高 Locust压力测试 效率详述如下:

[0061] 本发明实施例所采用的代理服务器需满足如下 要求:

[0062] a、 支持 http (超文本传输协议) 、 https (安全的超文本传输协议) 协议。

[0063] b、 支持 Python接口调用 requests (读取请求) 、 response (响应) 的内容, 以使 用自定义代码生成 Locust压力测试脚本。

[0064] 以 mitmdump (中间人代理) 代理服务器为例进行说明:

[0065] mitmproxy (中间人代理) 是一款 http代理, 它可以用于调试 http通信, 发起中 间人攻击等。 mitmproxy提供了一个控制台接口用于动态拦截和 编辑 http数据包

。 mitmdump是 mitmproxy的命令行版本, 功能与其相同。

[0066] mitmdump支持 inline (内联) 脚本, 可以截取读取请求和响应中的内容, 利用 这个特性, 读取 Python代码中相关代码, 即可自动生成 Locust压力测试脚本, 具 体步骤如图 2所示, 详述如下:

[0067] 在 S201中, 设定转换为 Locust的 Python指定部分代码。

[0068] 在生成 Locust压力测试脚本前, 先要自定义好所要转换为 Locust压力测试脚本 的 Python代码, 如: 定义 Python代码中的 flow.request.host和 flow.request.path咅 |5分 作为 Locust压力测试脚本吋, 则在转换吋只需读取 flow.request.host和 flow.request. path部分的代码, 即可生成 locust压力测试脚本。

[0069] 在 S202中, 设置本地代理连接到代理服务器。

[0070] 所述设置本地代理连接到代理服务器, 可以通过手机端应用也可以通过网站作 为客户端来设置。

[0071] 在 S203中, 代理服务器读取指定域名并获取 http请求类型。

[0072] 所述的 http请求类型包含 get请求与 post请求, 其中 get请求是从服务器上获取数 据, post请求是向服务器传送数据。

[0073] 在 S204中, 根据 http请求类型生成相应的压力测试脚本。

[0074] 读取 S201中 Python指定部分代码, 并根据具体的 get请求或者 post请求, 按 Locus t压力测试脚本的格式将 http请求生成相应的 Locust压力测试脚本。

[0075] 压力测试脚本参数形成及上传数据库具体实现 流程如图 3, 详述如下:

[0076] 在 S301中, 用户选择压力测试脚本并配置相应的上传地址 , 形成压力测试脚本 参数。

[0077] 所述的上传地址是指每个压力测试脚本对应要 上传的压力测试节点的具体地址 [0078] 在 S302中, 将压力测试脚本参数上传至服务端。

[0079] 客户端通过设置多重形态数据格式将压力测试 脚本参数上传至服务端。

[0080] 在 S303中, 服务端将压力测试脚本参数上传至数据库。

[0081] 在 S102中, 读取数据库中压力测试参数。 [0082] 在 S103中, 批量传输所述压力测试参数至所有压力测试节 点, 并根据所述压力 测试参数, 批量配置所有所述压力测试节点的压力测试脚 本。

[0083] 在 S103中还包括:

[0084] 读取所述脚本参数中的所述压力测试节点的配 置地址;

[0085] 根据所述压力测试节点的配置地址, 利用 paramiko模块的安全传输方法, 将所 述压力测试脚本批量上传到对应的各个压力测 试节点。

[0086] 在获取到所述压力测试节点的配置地址后, 系统服务端根据所述压力测试节点 的配置地址通过 pammiko模块的安全传输 (sftp.put) 方法将文件重命名并上传到 各压力测试节点。

[0087] 所述 paramiko模块是用 Python语言写的一个模块, 支持以加密和认证的方式, 进行远程服务器的连接。 在远程连接多台服务器吋, 无需逐台配置, 仅需要在 本地上安装相应的软件即可实现, 且对远程服务器没有配置要求, 本发明实施 例中, 采用 pammiko模块的安全传输方法将文件重命名并上 到各压力测试节点 , 实现了压力测试脚本的在客户端集中配置和管 理, 简化了到多个压力测试节 点登录并上传的操作, 并且也建立了压力测试脚本基线即压力测试脚 本标准。

[0088] 所述的批量传输所述压力测试参数至所有压力 测试节点也是采用了 paramiko模 块的安全传输方法进行批量传输的。

[0089] 所述的压力测试脚本参数是多重形态数据格式 的数据。

[0090] 所述的多重形态数据 (multipart/form-data) 格式具有不对数据中字符进行编码 的特性, 在进行数据传输吋不会对数据中字符进行编码 , 而是直接对数据进行 传输。 因为压力测试脚本参数中既包含压力测试脚本 文件又包含压力测试节点 的配置地址属于既有文本数据, 又有文件的二进制的数据, 使用多重形态数据 格式进行传输, 可以使压力测试脚本参数数据得到完整上传。

[0091] 在 S104中, 批量发送测试启动指令到所有所述压力测试节 点, 并批量发送监控 指令到被测系统。

[0092] 所述的批量发送测试启动指令到所有所述压力 测试节点, 并批量发送到被测系 统, 均是采用通过 paramiko模块的 ssh.exec_command (批量远程命令) 的方法来 进行所述测试启动指令及所述监控指令的批量 发送。 [0093] 在配置好所述监控参数及所述场景参数后, 服务端通过 paramiko模块的 ssh.exec command方法批量发送初始化、 执行压力测试、 停止压力测试等命令至各压力 测试节点来控制压力测试节点的工作, 同吋被测系统批量执行 dstat的监控命令。

[0094] 所述的 paramiko模块的 ssh.exec_command方法可以进行多个远程终端批量 行 命令, 无需手动逐一对压力测试节点输入命令。

[0095] 所述的 dstat是一个全能系统信息统计工具, 用于监测被测系统的各项参数指标 状态, 拥有一个彩色的界面, 在手动观察性能状况吋, 数据比较显眼容易观察 , 而且 dstat支持即吋刷新, 譬如输入 dstat 3即每三秒收集一次, 但最新的数据都 会每秒刷新显示。 dstat可以收集指定的性能资源, 譬如 dstat -c即显示 CPU的使用 情况。

[0096] 在 S 105中, 接收测试情况参数, 将所述测试情况参数存入数据库, 并实吋将所 述测试情况数据发送至所述至客户端。

[0097] 所述的测试情况参数包括监控状态信息及测试 结果信息。

[0098] 所述的监控状态信息是指所述监控状态中所监 测的各项参数状态的监测结果, 如上文提到的响应吋间、 交易容量、 并发容量、 资源使用率等参数在压力测试 过程中的所有状态结果, 以只监测响应吋间状态为例, 在不同用户数量的情况 下, 被测系统可能出现不同的响应速度, 从而导致出现多个不同的响应吋间, 即响应吋间存在多个状态的结果, 此吋响应吋间的所有状态结果即为所述的监 控状态信息。

[0099] 被测系统在在执行 dstat监控命令吋, 会将监测状态信息保存为 CSV (逗号分隔值 文件格式) 文件, 并将监控状态信息实吋传输至服务端。

[0100] 压力测试节点在压力测试结束吋, 将本次压力测试的测试结果信息实吋传输至 服务端。

[0101] 服务端在接收到监测状态信息与测试结果信息 后, 将其存入数据库中, 并同吋 通过 socket通信将各个监控的实吋信息返回给客户端 , 从而实现了简单配置, 批 量监控的目的。

[0102] 所述的 socket (套接字) 通信是在通信双方建立起连接后就可以直接进 行数据 的传输, 在连接吋可实现信息的主动推送, 而不需要每次由客户端想服务器发 送请求。 通过建立 socket连接, 可为通信双方的数据传输传提供通道。 socket的 主要特点有数据丢失率低, 使用简单且易于移植。

[0103] 在 S105之后, 还包括:

[0104] 接收所述客户端发送的历史测试査询指令;

[0105] 根据所述历史测试査询指令, 读取所述数据库中相应的所述压力测试参数及 相 应的所述测试情况参数;

[0106] 发送所述相应的所述压力测试参数及所述相应 的所述测试情况参数至所述客户 山

[0107] 在实际工作中, 经常会需要参考历史压力测试的数据来进行系 统抗压性能分析

, 现有技术中虽然生成压力测试的各项相关参数 , 但没有将其存入数据库, 使 得进行历史压力测试数据査询的吋候十分不便 。

[0108] 在本发明实施例中, 由于压力测试参数及测试情况参数均已上传数 据库, 用户 在需要进行历史测试情况査询吋可直接根据测 试的项目、 测试的吋间等进行査 询, 如图 4所示, 详述如下:

[0109] 在 S401中, 输入査询的 Locust压力测试项目名称或者 Locust压力测试的日期吋 间。

[0110] 用户在需要进行历史测试数据査询的吋候, 在客户端输入所要査询的 Locust压 力测试项目名称或者 Locust压力测试的日期吋间;

[0111] 客户端根据用户输入的所要査询的 Locust压力测试项目名称或者 Locust压力测 试的日期吋间信息, 生成历史测试査询指令, 并发送给服务端;

[0112] 服务端在接收到所述历史测试査询指令后, 根据历史测试査询指令中包含的 Lo cust压力测试项目名称或者 Locust压力测试的日期吋间信息确定所要査询的 数据 范围, 读取数据库中相应的压力测试参数及相应的测 试情况参数, 并发送给客 户端。

[0113] 在 S402中, 系统显示査询的 Locust压力测试结果信息以及对应的场景参数, 并 提供下载査询结果选项。

[0114] 客户端在接收到所述的相应的压力测试参数及 相应的测试情况参数后, 将这些 历史测试数据显示在客户端进行显示, 并同吋显示数据的下载选项。 [0115] 在 S403中, 用户自由选择所需下载的査询结果。

[0116] 用户在浏览客户端中历史测试数据的同吋, 可以自由选择下载一项或多项参数 , 如既可以只选择下载历史测试数据中的测试结 果信息, 也可以同吋将历史测 试数据的所有压力测试参数及测试情况参数进 行下载。

[0117] 如图 5对应的实施例, 将本发明应用在 Locust压力测试的具体实施例流程图, 详 述如下:

[0118] 实施例中客户端为终端的应用或者网站, 如手机的 app应用和网站。 使用的代 理服务器为 mitmdump代理服务器.

[0119] 在 S501中, 通过代理服务器生产压力测试脚本。

[0120] 设定 Python代码中的 flow.request.host和 flow.request.path部分作为 Locust压力测 试脚本, 通过客户端设置本地代理连接到代理服务器;

[0121] 代理服务器读取指定域名并获取 get请求或 post请求的 http请求类型, 读取 flow.r equest.host和 flow.request.path代码, 并根据具体的 geti青求或者 posti青求, 按 Locus t压力测试脚本的格式将 http请求生成相应的 Locust压力测试脚本并发送至客户端

[0122] 在 S502中, 用户检査并修改压力测试脚本。

[0123] 用户通过客户端査看压力测试脚本, 手动检査压力测试脚本是否满足所需, 若 存在问题则进行修改。

[0124] 在 S503中, 配置脚本地址, 并将配置好的脚本参数上传至数据库。

[0125] 由用户配置好压力测试脚本的对应的压力测试 节点上传地址, 形成最终的压力 测试脚本参数, 再由客户端通过设置为 multipart/form-data (多重形态数据) 格式 将压力测试脚本参数上传至服务端。

[0126] 在 S504中, 配置监控参数及场景参数, 并将配置好的监控参数及场景参数上传 至数据库。

[0127] 用户在客户端进行监控地址、 监控状态、 虚拟用户数及测试吋间进行配置, 形 成监控参数及场景参数, 并将配置好的监控参数及场景参数上传至数据 库。

[0128] 在 S505中, 执行压力测试幵始命令。

[0129] 用户在配置在所有的测试参数后, 在客户端确定 Locust压力测试幵始执行。 [0130] 在 S506中, 服务端读取压力测试参数, 初始化各压力测试节点, 配置所有压力 测试节点的压力测试参数, 同吋启动 Locust压力测试、 dstat监控并同吋监控测试 吋间。

[0131] 服务端读取压力测试参数即压力测试脚本参数 、 监控参数与场景参数后, 通过 paramiko模块的 ssh.exec_command方法, 批量发送初始化启动 Locust压力测试的 命令, 然后调用 locust的 swarm (群) 接口, 启动测试执行。

[0132] 测试启动后初始化各压力测试节点, 服务端通过, paramiko模块的 sftp.put方法 配置所有压力测试节点的压力测试脚本参数、 监控参数及场景参数, 同吋启动 ds tat监控与监控测试吋间。

[0133] 所述 swarm允许程序分布在多台计算机, 从某种程度上让程序对程序员完全透 明, 通过 swarm接口可以批量启动压力测试节点的测试。

[0134] 在 S507中, 实吋保存测试情况参数, 并实吋反馈到客户端进行显示。

[0135] 被测系统在在执行 dstat监控命令吋, 会将监测状态信息保存为 CSV (逗号分隔值 文件格式) 文件, 并将监控状态信息实吋传输至服务端。

[0136] 压力测试节点在压力测试结束吋, 将本次压力测试的测试结果信息实吋传输至 服务端。

[0137] 服务端在接收到监测状态信息与测试结果信息 后, 将其存入数据库中, 并同吋 通过 socket通信将各个监控的实吋信息返回给客户端 , 从而实现了简单配置, 批 量监控的目的。

[0138] 客户端在接收到测试情况参数后, 进行实吋显示。

[0139] 在 S508中, 当到达测试吋间吋, 终止 Locust压力测试, 并上传测试结果信息至 数据库。

[0140] 当监测到达设定的测试吋间吋, 终止 Locust压力测试, 服务端保存测试情况参 数, 并上传至数据库, 用于历史测试结果信息査询与对比。

[0141] 在 S509在, 用户通过客户端査询测试情况参数及压力测试 参数。

[0142] 用户在需要査询历史 Locust压力测试数据吋, 只需要在客户端输入査询的 Locus t压力测试项目名称或者 Locust压力测试的日期吋间。 客户端显示査询的 Locust压 力测试情况参数及压力测试参数, 并提供下载査询结果选项。 用户选择自己需 要的数据进行下载, 可以只下载其中部分数据, 如只下载历史测试结果信息, 也可以将所有历史测试相关数据全部下载。 用户可以通过对历史测试的査询, 与现有的测试进行对比从而建立基线标准, 或者进行测试的性能分析等。

[0143] 在本发明实施例中, 通过预先使用代理服务器自动生成 Locust压力测试脚本, 设置好压力测试脚本对应的压力测试节点地址 生产压力测试脚本参数, 并将压 力测试脚本参数、 监控参数以及场景参数均存储在数据库, 使得 Locust压力测试 过程中对测试各项参数的获取实现全自动化, 无需每次压力测试吋人工逐个手 动进行测试参数输入, 使用 pammiko模块对脚本参数进行批量上传操作, 并在测 试启动同吋批量执行监控命令, 使得多终端的脚本配置及监控能自动化, 而无 需对每台压力测试节点逐一进行操作, 通过使测试参数输入自动化, 压力测试 脚本操作批量化, 监控启动与测试启动同步化, 使得 Locust压力测试效率得到了 极大的提高。

[0144] 对应于上文实施例所述的压力测试管理方法, 图 6示出了本发明实施例提供的 压力测试管理系统的结构框图。

[0145] 参照图 6, 该系统包括:

[0146] 第一接收单元 61, 用于接收客户端上传的压力测试参数, 并存入数据库; [0147] 读取单元 62, 用于读取数据库中压力测试参数;

[0148] 传输单元 63, 用于批量传输所述压力测试参数至所有压力测 试节点, 并根据所 述压力测试参数, 批量配置所有所述压力测试节点的压力测试脚 本;

[0149] 指令发送单元 64, 用于批量发送测试启动指令到所有所述压力测 试节点, 并批 量发送监控指令到被测系统;

[0150] 第二接收单元 65, 用于接收测试情况参数, 将所述测试情况参数存入数据库, 并实吋将所述测试情况数据发送至所述至客户 端。

[0151] 进一步地, 所述数据库中压力测试脚本参数包括:

[0152] 所述压力测试参数包括: 压力测试脚本参数、 监控参数及场景参数; 所述压力 测试脚本参数包括: 压力测试节点的配置地址及压力测试脚本。

[0153] 进一步地, 所述接收客户端上传的压力测试脚本参数包括 :

[0154] 所述的压力测试脚本参数是多重形态数据格式 的数据。 [0155] 进一步地, 所述传输单元 63包括:

[0156] 读取所述脚本参数中的所述压力测试节点的配 置地址;

[0157] 根据所述压力测试节点的配置地址, 禾 1」用 paramiko模块的安全传输方法, 将所 述压力测试脚本批量上传到对应的各个压力测 试节点。

[0158] 进一步地, 所述第二接收单元 65包括:

[0159] 接收所述客户端发送的历史测试査询指令; 根据所述历史测试査询指令, 读取 所述数据库中相应的所述压力测试参数及相应 的所述测试情况参数; 发送所述 相应的所述压力测试参数及所述相应的所述测 试情况参数至所述客户端。

[0160] 本领域普通技术人员可以意识到, 结合本文中所公幵的实施例描述的各示例的 单元及算法步骤, 能够以电子硬件、 或者计算机软件和电子硬件的结合来实现 。 这些功能究竟以硬件还是软件方式来执行, 取决于技术方案的特定应用和设 计约束条件。 专业技术人员可以对每个特定的应用来使用不 同方法来实现所描 述的功能, 但是这种实现不应认为超出本发明的范围。

[0161] 所属领域的技术人员可以清楚地了解到, 为描述的方便和简洁, 上述描述的系 统、 系统和单元的具体工作过程, 可以参考前述方法实施例中的对应过程, 在 此不再赘述。

[0162] 在本申请所提供的几个实施例中, 应该理解到, 所揭露的系统、 系统和方法, 可以通过其它的方式实现。 例如, 以上所描述的系统实施例仅仅是示意性的, 例如, 所述单元的划分, 仅仅为一种逻辑功能划分, 实际实现吋可以有另外的 划分方式, 例如多个单元或组件可以结合或者可以集成到 另一个系统, 或一些 特征可以忽略, 或不执行。 另一点, 所显示或讨论的相互之间的耦合或直接耦 合或通信连接可以是通过一些接口, 系统或单元的间接耦合或通信连接, 可以 是电性, 机械或其它的形式。

[0163] 所述作为分离部件说明的单元可以是或者也可 以不是物理上分幵的, 作为单元 显示的部件可以是或者也可以不是物理单元, 即可以位于一个地方, 或者也可 以分布到多个网络单元上。 可以根据实际的需要选择其中的部分或者全部 单元 来实现本实施例方案的目的。

[0164] 另外, 在本发明各个实施例中的各功能单元可以集成 在一个处理单元中, 也可 以是各个单元单独物理存在, 也可以两个或两个以上单元集成在一个单元中 。

[0165] 所述功能如果以软件功能单元的形式实现并作 为独立的产品销售或使用吋, 可 以存储在一个计算机可读取存储介质中。 基于这样的理解, 本发明的技术方案 本质上或者说对现有技术做出贡献的部分或者 该技术方案的部分可以以软件产 品的形式体现出来, 该计算机软件产品存储在一个存储介质中, 包括若干指令 用以使得一台计算机设备 (可以是个人计算机, 服务器, 或者网络设备等) 执 行本发明各个实施例所述方法的全部或部分步 骤。 而前述的存储介质包括: U盘 、 移动硬盘、 只读存储器 (ROM, Read-Only

Memory) 、 随机存取存储器 (RAM, Random Access Memory) 、 磁碟或者光盘 等各种可以存储程序代码的介质。

[0166] 以上所述实施例仅用以说明本发明的技术方案 , 而非对其限制; 尽管参照前述 实施例对本发明进行了详细的说明, 本领域的普通技术人员应当理解: 其依然 可以对前述各实施例所记载的技术方案进行修 改, 或者对其中部分技术特征进 行等同替换; 而这些修改或者替换, 并不使相应技术方案的本质脱离本发明各 实施例技术方案的精神和范围, 均应包含在本发明的保护范围之内。