OpenStack Rally 质量评估与自动化测试利器
目录
文章目录
问题描述
需求实现 Rally 扩展插件的缘起是因为希望通过 Rally 来自动化测试 Octavia 项目的稳定性以及评估大规模 LB 工作负载对自身云平台的性能影响,所以下述的内容主要记录了在 Rally(stable/0.12)Benchmark Engine/Task Framework 中实现 Octavia Plugin 的方式。
Rally 简介
OpenStack Rally 是一个自动化测试工具,社区希望通过 Rally 来解答 “How does OpenStack work at scale?(如何规模化运行 OpenStack)” 的问题。为了实现这一目的,Rally 被设计成集自动化部署、功能验证、性能测试和分析报告于一体,作为 OpenStack CI/CD 系统中的基础工具,帮助用户不断提高系统的 SLA(服务等级协议)、性能和稳定性。
简而言之,Rally 能够帮助用户完成整个 OpenStack 平台或者某个单一组件功能的压力测试,帮助用户验证和评估稳定系统工作负载的规模。
应用场景
应用案例
- 自动化测试、分析,评估新引入的代码如何影响云平台的性能;
- 自动化测试、分析新引入的代码是否完美兼容云平台功能清单;
- 评估不同的部署方式如何影响云平台的性能,以此得出性能峰值最高的云平台部署架构;
- 评估不同硬件设备对云平台的性能影响,以此得出性能峰值最高的云平台硬件设施;
更多案例,请浏览官方文档:https://docs.openstack.org/rally/latest/overview/overview.html#who-is-using-rally
Rally 安装
下载源码:
git clone https://github.com/openstack/rally.git
安装项目:
cd rally && ./install_rally.sh
NOTE:建议在沙盒环境安装
Rally 使用
本篇以自动化测试为例,使用 Rally 自动化完成云平台功能的压力测试。
Step 1. 创建 Deploy
这里我们使用 Existing Cloud,所以 deploy file 如下:
# vim ~/existing.json
{
"openstack": {
"auth_url": "http://172.18.22.222/identity",
"region_name": "RegionOne",
"endpoint_type": "public",
"admin": {
"username": "admin",
"password": "admin",
"tenant_name": "admin"
},
"https_insecure": false,
"https_cacert": ""
}
}
执行 deployment 执行进行创建及查看:
$ rally deployment create --filename=~/existing.json --name=existing
$ rally deployment list
+--------------------------------------+----------------------------+----------+------------------+--------+
| uuid | created_at | name | status | active |
+--------------------------------------+----------------------------+----------+------------------+--------+
| 97f7ccce-76dc-4af0-8583-f1a15be56c99 | 2018-10-25T03:22:11.399523 | existing | deploy->finished | * |
+--------------------------------------+----------------------------+----------+------------------+--------+
Existing Cloud deployment status 为 deploy->finished
则表示正常。
验证是否成功对接 OpenStack 云平台:
$ rally deployment check
--------------------------------------------------------------------------------
Platform openstack:
--------------------------------------------------------------------------------
Available services:
+-------------+----------------+-----------+
| Service | Service Type | Status |
+-------------+----------------+-----------+
| __unknown__ | block-storage | Available |
| __unknown__ | compute_legacy | Available |
| __unknown__ | placement | Available |
| __unknown__ | volumev2 | Available |
| __unknown__ | volumev3 | Available |
| cinder | volume | Available |
| glance | image | Available |
| keystone | identity | Available |
| neutron | network | Available |
| nova | compute | Available |
| octavia | load-balancer | Available |
+-------------+----------------+-----------+
打印 Available services 表示正常对接。
Step 2. 自动化执行 Task
Rally 自动化执行 Task 的功能依赖于 Task file,Task file 描述了任务的内容和执行任务所必须要的参数。Rally 自身就提供非常完善的 Task file sample,满足了大部分的测试需求,在路径 rally/samples/tasks/scenarios
下查看。
[root@control01 rally]# cd ../samples/tasks/scenarios/
[root@control01 scenarios]# ll
total 100
drwxr-xr-x 2 root root 4096 Oct 25 10:43 authenticate
drwxr-xr-x 2 root root 4096 Oct 25 10:43 ceilometer
drwxr-xr-x 2 root root 4096 Oct 25 10:43 cinder
drwxr-xr-x 2 root root 4096 Oct 25 10:43 designate
drwxr-xr-x 2 root root 4096 Oct 25 10:43 dummy
drwxr-xr-x 2 root root 90 Oct 25 10:43 ec2
drwxr-xr-x 2 root root 4096 Oct 25 10:43 glance
drwxr-xr-x 2 root root 4096 Oct 25 10:43 gnocchi
drwxr-xr-x 3 root root 4096 Oct 25 10:43 heat
drwxr-xr-x 2 root root 142 Oct 25 10:43 ironic
drwxr-xr-x 2 root root 4096 Oct 25 10:43 keystone
drwxr-xr-x 3 root root 4096 Oct 25 10:43 magnum
drwxr-xr-x 2 root root 4096 Oct 25 10:43 manila
drwxr-xr-x 2 root root 4096 Oct 25 10:43 mistral
drwxr-xr-x 2 root root 56 Oct 25 10:43 monasca
drwxr-xr-x 2 root root 4096 Oct 25 10:43 murano
drwxr-xr-x 2 root root 8192 Oct 25 18:20 neutron
drwxr-xr-x 2 root root 8192 Oct 25 10:43 nova
drwxr-xr-x 2 root root 50 Oct 26 15:07 octavia
drwxr-xr-x 2 root root 4096 Oct 25 10:43 quotas
-rw-r--r-- 1 root root 452 Oct 25 10:43 README.rst
drwxr-xr-x 2 root root 124 Oct 25 10:43 requests
drwxr-xr-x 3 root root 4096 Oct 25 10:43 sahara
drwxr-xr-x 2 root root 98 Oct 25 10:43 senlin
drwxr-xr-x 2 root root 4096 Oct 25 10:43 swift
drwxr-xr-x 2 root root 4096 Oct 25 10:43 vm
drwxr-xr-x 2 root root 234 Oct 25 10:43 watcher
drwxr-xr-x 2 root root 50 Oct 25 10:43 workload
drwxr-xr-x 2 root root 116 Oct 25 10:43 zaqar
这里我们以 Nova 的 boot-and-delete-server 为例,直接使用 Task file:rally/samples/tasks/scenarios/nova/boot-and-delete.json
来频繁创建和删除云主机。
rally task start ~/rally/samples/tasks/scenarios/nova/boot-and-delete.json
Step 3. 生成并查看测试报告
$ rally task report 5b24ef46-6061-443a-be14-dab1e5cdf51a --out output.html
使用浏览器打开 output.html 即可查看 Report 的内容。
Report 中展示了 Task 描述、SLA(服务质量协议)、Durations(任务持续时间)、Task Details 和执行成功率等用于评估性能参数的有效信息。
Rally 架构
上图是 Rally 的总体架构,描述了 Rally 的组成结构、数据流和 OpenStack 的调用方式。
- Deploy Engine:存储部署所需要的凭证(credentials)信息,以插件的形式集成第三方自动化部署工具(e.g. Devstack, Fuel, etc.),提供自动化部署能力。
- Verification:通过调用 Tempest(基于 unittest 的功能测试框架)来验证云平台的功能清单。
- Benchmark Engine/Task Engine:是一个通用的测试用例插件框架,允许用户编写参数化的 Plugin 实现以及对应的 Task File(YAML/JSON)来满足自定义功能、性能测试需求,使用这种通用的方式来生成真实的用户负载。
Rally 最初被设计成一种不需要 Daemon 的 CLI-Driver,这使 Rally 非常易于使用和开发。但通常 OpenStack Projects 总是以 “as-a-Service” 来实现的,所以现在社区也提出了 RaaS 的理念,并付诸于行动(work in progress)。
上图描述了 “Rally-as-a-Service” 和 “Rally-as-an-APP” 两种形式的实现架构,显然两者在实现上的区别主要在于是否具有 Daemon 以及相应的 HTTP、RPC Invoke,也就是所谓的是否实现了泛 “Service” 化。实际上,对于用户而言无需太过于关心上层的调用方式,用户只需关心 Rally Core 的 Benchmark Engine/Task Framework 的应用。所以本文采用的是更为成熟、简单以及常用的 “Rally-as-an-APP” 模式。
Rally Plugin 分析与实现
程序入口
依旧从 setup.cfg 切入:
[entry_points]
console_scripts =
rally = rally.cli.main:main
rally-manage = rally.cli.manage:main
可见 Rally 只有 rally
和 rally-manage
两个启动脚本,其中 rally-manage
主要用于打印 Version 信息、程序编译以及比较重要的数据库版本控制 3 个功能,不过这些功能至 0.10.0 之后都被移植到了rally
中,rally-manage
也被标记为了 deprecated
:
`rally-manage db <command>` was deprecated since 0.10.0 version and is going to be removed soon. Please use `rally db <command>`.
所以我们重点要关注的程序入口还是 rally = rally.cli.main:main
。
# file: ~/rally/rally/cli/main.py
"""CLI interface for Rally."""
from __future__ import print_function
import sys
from rally.cli import cliutils
from rally.cli.commands import db
from rally.cli.commands import deployment
from rally.cli.commands import env
from rally.cli.commands import plugin
from rally.cli.commands import task
from rally.cli.commands import verify
categories = {
"db": db.DBCommands,
"env": env.EnvCommands,
"deployment": deployment.DeploymentCommands,
"plugin": plugin.PluginCommands,
"task": task.TaskCommands,
"verify": verify.VerifyCommands
}
def main():
return cliutils.run(sys.argv, categories)
if __name__ == "__main__":
sys.exit(main())
- cliutils module:实现了常见的 CLI 调用的封装
- db/env/deployment/plugin/task/verify modules:每个 module 对应一个 rally 子命令 API 的调用封装
下文以 rally task start
子命令为例。
执行 rally task start 的 UML
从上述 UML 分析得出,当 Rally 执行一个任务时主要进行了以下工作:
- 加载、解析 Task File 并以统一的形式(TaskConfig Object)返回,TaskConfig 中包含了:
- benchmark scenarios name
- benchmark scenarios args
- runner type
- runner args
- 基于 TaskConfig 生成 TaskEngine Object,TaskEngine 是执行 benchmark scenarios 的对象,所谓的 benchmark scenarios 就是实际 Plugin Class/Method 实现的代码逻辑
- 基于 TaskConfig 生成 Runner Object,Runner 设定了执行 Task 进程拓扑(总数、并发数)
显然,开发者需要关心的主要有两点:
- task file 的定义
- benchmark scenarios 的实现
最后
最后总结一下完成实现所需要解决的几个问题:
- 如何通过 Task file 的 benchmark scenario name 加载指定的 Plugin Class/Method?
- 如何传入 Task file 中定义的 args 到 Plugin Class/Method?
- 如何返回 Octavia REST API 的 client?
OpenStack Rally 质量评估与自动化测试利器的更多相关文章
- python实现六大分群质量评估指标(兰德系数、互信息、轮廓系数)
python实现六大分群质量评估指标(兰德系数.互信息.轮廓系数) 1 R语言中的分群质量--轮廓系数 因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评 ...
- OpenStack Rally 性能测试
注意点:在测试nova,在配置文件里面如果不指定网络id,那么默认是外网的网络(该网络是共享的),如果想要指定网络,那么该网络必须是共享的状态,否则将会报错:无法发现网络.如果测试多于50台的虚拟机需 ...
- 视频质量评估学习Note
术语"编解码器 Coder/Decoder"是压缩器/解压缩器或编码器/解码器一词的缩写.顾名思义,编码可使视频文件变小以进行存储,然后在需要再次使用时将压缩后的数据转换成可用的图 ...
- 基于android的语音质量评估
最近研究如何通过android评估通话质量,希望获取的参数有:(1)接通时长 (2)掉话次数 (3)语音是否清晰,以下将给出接通时长和掉话次数的详细定义: 接通时长:通话一方开始拨号到另一方开始振铃的 ...
- API自动化测试利器——Postman
自从开始做API开发之后,我就在寻找合适的API测试工具.一开始不是很想用Chrome扩展,用的WizTools的工具,后来试过一次Postman之后就停不下来了,还买了付费的Jetpacks.推出T ...
- ffmpeg 增加视频流媒体质量评估滤镜 (Video Multimethod Assessment Fusion, VMAF)
URL: https://github.com/Netflix/vmaf libvmaf Obtain the VMAF (Video Multi-Method Assessment Fusion) ...
- 直播P2P技术3-伙伴节点质量评估及子流订阅
以上模型,暂且称之为W-P2P吧.
- REST API 自动化测试 利器Rest Assured(API接口自动化测试框架体系)
现在,越来越多的 Web 应用转向了 RESTful 的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来.从这 ...
- 视频质量评估 之 VMAF
VMAF 方法: 基本想法: 面对不同特征的源内容.失真类型,以及扭曲程度,每个基本指标各有优劣.通过使用机器学习算法(支持向量机(Support Vector Machine,SVM)回归因子)将基 ...
随机推荐
- 在docker容器中为elasticsearch配置跨域访问
一.在docker容器中进入elasticsearch对应的容器 docker exec -it [容器名] /bin/bash 二.安装vim编辑器 因为我们需要更改配置文件,安装过的朋友就不用安装 ...
- Maven项目构建利器04——Maven的一些核心概念
1.坐标 1)数学上的坐标: [1].在平面上. 使用X,Y两个向量可以唯一的定位平面上的任意一个点 [2]在空间中, 使用X,Y,Z三个向量可以唯一的定位空间中的任何一个点 2)Maven中的坐标: ...
- python-字符编码的转换
python-字符编码的转换 1.了解基础知识 ASCII 一个英文,占一个字节.只能存英文和特殊字符. gb2312 约可以存7000中文 gb1830 约可以存27000中文 gbk 默认中文, ...
- 测试 windows 发布日志
<script>alert("hellow world")</script>
- keepalived和lvs实现mysql读负载均衡
keepalived+lvs实现对mysql读负载均衡 环境:redhat 6.5 real server: 172.25.254.189 172.25.254.224 lvs: 172.25.254 ...
- php扩展安装,指定新的openssl
1 自己从源码编译一个新的openssl 下载源码下来解压到 /mnt/soft/openssl-1.0.2m (openssl 安装到) ./config -h /usr/bin/perl ./Co ...
- Ubuntu打开中文输入法
方法/步骤: 1.从system settings 进入language support 在keyboard input method system 中选择 ibus (这里以ibus为例) 然后cl ...
- LB_GETCURSEL和LB_GETTEXT的使用
case IDC_LIST1: { switch (HIWORD(wParam)) { case LBN_DBLCLK: { HWND hwndList = GetDlgItem(hDlg, IDC_ ...
- http.sys_DDos攻击(ms15-043)
远程执行代码漏洞存在于HTTP协议堆栈(HTTP.sys)中,当HTTP.sys未正确分析经特殊设计的HTTP请求时会导致该漏洞.该漏洞利用成功可使目标机器蓝屏. 微软官方说明: https://do ...
- 【洛谷P1220】关路灯
题目有点难描述,内容请直接看原题.. 题解: 可以发现人在关路灯时无论走什么样的路径,从宏观上来看被关的灯总是构成一段包含初始点的连续区间.比如要关掉下标为 l (l < st)的灯,则一定要先 ...