一、rally中的json文件
rally执行过程:读取json文件中的配置,根据json文件中的配置执行相应的并发资源,rally的json文件的存放路径/usr/share/openstack-rally/samples/tasks/scenarios,server代码的存放路径/usr/lib/python2.7/site-packages/rally/plugins/openstack/scenarios/,整个代码包的存放路径/usr/lib/python2.7/site-packages/rally/。
二、json文件详解
整个json文件大致分为以下四部分:args、runner、context、sla,各部分的功能大致如下:
- args:主要是定义创建某个资源所需要的参数,定义参数的方式为键值对,调用创建某个资源的方式时,这些参数都会传递过去。
- runner:提供测试的运行器情况,比如:并发测试、串行测试等等。runner目前支持四中方式:constant、constant_for_duration、rps、serial。
- 2.1constant方式,是利用mutiprocessing的Pool方式创建一个进程池,池中的进程数量等于runner的配置参数中的concurrency,执行每个tast时,由池中所有的进程同时测试、模拟多用户并 发的情况。constant方式中要求提供参数times,用于指定一个tast中执行测试用例的次数。
- constant_for_duration方式,与constant相似,也是构建一个进程池实现并发测试,区别在于,constant_for_duration方式要求额外提供一个参数duration,但是没有参数times。该参数用于指明执行测试的时间, rally一直执行task指定的测试用例,直到达到duration规定的时间长度,任务结束;
- rps方式,测试任务平均分配到每个processer上,通过对每个process创建thread实现高并发测试。不同于前两种方式(使用multiprocessing.Pool 构建进程池),rps方式使用multiprocessing.Process构建执行task的worker,每个worker执行测试次数的总和是配置中的times,每个worker的rps总和是配置中rps。workers的数量由times和运行rally测试的主机上实际processer数量的最小值确定,times平均分配到每个worker上。
- serial方式,是使用一个process串行的执行测试 ,在单个基准线程中运行指定次数的脚本。
- context:提供运行测试用例的上下文环境变量信息,包括模拟几个用户同时测试、租户情况等;定义运行基准测试脚本的环境类型。通常,context的概 念定义了有多少个租户和活动用户与给定的OpenStack项目相关。它还 可以指定特定的授权角色中,每个租户/用户所拥有的资源配额。
- quotas:指定测试中涉及到资源的配额限制,
- sla: 成功标准。
{
"NeutronNetworks.create_and_list_routers": [
{
"args": {
"network_create_args": {},
"subnet_create_args": {},
"subnet_cidr_start": "1.1.0.0/30",
"subnets_per_network": 2,
"router_create_args": {}
},
"runner": {
"type": "constant",
"times": 10,
"concurrency": 5
},
"context": {
"network": {},
"users": {
"tenants": 3,
"users_per_tenant": 3
},
"quotas": {
"neutron": {
"network": -1,
"subnet": -1,
"router": -1
}
}
},
"sla": {
"failure_rate": {
"max": 0
}
}
}
]
}
三、rally执行流程
1.由命令行发起start_task的任务请求
- ally task start --task test.json --deployment deployment_uuid --tag task_tag
- --task参数必选参数,无默认值(必须输入),后跟的test.json对应执行task的配置文件路径。
- --deployment必选参数,有默认值(可以不输入),用于指定使用rally哪一个部署,如果不指定该参数,自动使用默认的deployment。
- --tag可选参数,用于为当前的task设置标签(task执行完成后,可以根据标签进行过滤)
- 命令行执行task的代码:cmd.commands.task.TaskCommands.start_tas。
2.创建的engine对象执行run方法
- ask validation
- 验证配置中提供的待测试方法是scenario方法
- 验证配置文件中的context配置项是否正确
- 验证配置文件的句法正确
- 遍历配置文件中的每个待测试scenario类型方法