中国领先的IT技术网站
|
|

【博文推荐】如何进行 OpenStack 的性能测试及平台功能性测试

社区对OpenStack平台功能性的测试工具采用Tempest,性能测试采用Rally。本篇博文对Rally、Tempest是什么;如何安装Rally、Tempest的详细过程进行介绍。下面就让我们一起学习。

作者:wang1511766618来源:51CTO|2015-03-19 09:35

沙龙活动 | 去哪儿、陌陌、ThoughtWorks在自动化运维中的实践!10.28不见不散!


  本博文出自51CTO博客再生细胞博主,有任何问题请进入博主页面互动讨论!

博文地址:http://wangtianfa.blog.51cto.com/5281093/1621797

OpenStack平台功能性测试工具Tempest安装

一、OpenStack Rally 性能测试

1.注意点

在测试nova,在配置文件里面如果不指定网络id,那么默认是外网的网络(该网络是共享的),如果想要指定网络,那么该网络必须是共享的状态,否则将会报错:无法发现网络。如果测试多于50台的虚拟机需要修改默认值,因为默认值是有限制的可用如下命令查看:

  1. [root@rally nova]# nova absolute-limits 
  2. +-------------------------+---------+ 
  3. | Name | Value | 
  4. +-------------------------+---------+ 
  5. | maxServerMeta | 128 | 
  6. | maxPersonality | 100 | 
  7. | maxImageMeta | 128 | 
  8. | maxPersonalitySize | 10240 | 
  9. | maxTotalRAMSize | 5120000 | 
  10. | maxSecurityGroupRules | 20 | 
  11. | maxTotalKeypairs | 100 | 
  12. | totalRAMUsed | 58960 | 
  13. | maxSecurityGroups | 10 | 
  14. | totalFloatingIpsUsed | 0 | 
  15. | totalInstancesUsed | 24 | 
  16. | totalSecurityGroupsUsed | 1 | 
  17. | maxTotalFloatingIps | 10 | 
  18. | maxTotalInstances | 200 | 
  19. | totalCoresUsed | 51 | 
  20. | maxTotalCores | 500 | 
  21. +-------------------------+---------+ 

修改默认值可以在界面,管理员->默认值,进行修改;其次可以在运行nova-api服务的节点上修改配置文件nova.conf

2.安装rally:

  1. [root@rally nova]#git clone https://github.com/stackforge/rally.git
  1. [root@rally rally]# /usr/bin/easy_install pip (安装pip,有就不需要装了) 
  1. [root@rally rally]# mkdir /root/.pip 
  2.  
  3. [root@rally rally]# vim /root/.pip/pip.conf (设置pip源,加快安装速度) 
  4. [global]
  1. [root@rally nova]#pip install -U virtualenv 安装虚拟环境(可装可不装,一般为了系统的干净还是装个虚拟环境)
  1. [root@rally nova]#virtualenv .venv
  1. [root@rally nova]#. .venv/bin/activate
  1. [root@rally nova]#yum install gcc-c++ (安装编译工具)
  1. [root@rally nova]#cd rally
  1. [root@rally rally]#./install_rally.sh 
  2. .... 

======================================================================
Information about your Rally installation:
* Method: system
* Database at: /var/lib/rally/database
* Configuration file at: /etc/rally
======================================================================

安装完成,数据库的配置这里暂时没做。

创建一个随便命名的.json格式文件:

  1. [root@rally rally]# : : 
  2. [root@rally rally]# rally deployment create --file=existing.json --name=existing
    +--------------------------------------+----------------------------+----------+------------------+--------+
    | uuid | created_at | name | status | active |
    +--------------------------------------+----------------------------+----------+------------------+--------+
    | 15ef811a-6460-407c-b391-c0f435f1ae54 | 2015-03-05 10:09:36.468176 | existing | deploy->finished | |
    +--------------------------------------+----------------------------+----------+------------------+--------+
    Using deployment: 15ef811a-6460-407c-b391-c0f435f1ae54
  1. [root@rally rally]# rally deployment check 
  2. keystone endpoints are valid and following services are available: 
  3. +------------+-----------+-----------+ 
  4. | services | type | status | 
  5. +------------+-----------+-----------+ 
  6. | ceilometer | metering | Available | 
  7. | cinder | volume | Available | 
  8. | cinderv2 | volumev2 | Available | 
  9. | glance | image | Available | 
  10. | keystone | identity | Available | 
  11. | neutron | network | Available | 
  12. | nova | compute | Available | 
  13. | nova_ec2 | ec2 | Available | 
  14. | novav3 | computev3 | Available | 
  15. +------------+-----------+-----------+ 

如此便可继续往下进行OpenStack基准测试了。

举个测试启动虚拟机的例子:boot.json文件内容如下:

doc/samples/tasks/scenarios/nova/boot.json

  1. [root@rally nova]# cat boot.json 
  2. "NovaServers.boot_server": [ 
  3. "args": { 
  4. "flavor": { 
  5. "name""m1.large" 
  6. }, 
  7. "image": { 
  8. "name""Windows_Server_2008R2_SP1_Standard_64bit" 
  9. }, 
  10. "nics":[{"net-id""c7048568-c966-4d57-a927-90dd8830fb96"}],(默认是没有这行的) 
  11. }, 
  12. "runner": { 
  13. "type""constant"
  14. "times"100, (测试次数100) "concurrency"2 (并发数) 
  15. }, 
  16. "context": { 
  17. "users": { 
  18. "tenants"3
  19. "users_per_tenant"2 

  20. }
  1. [root@rally nova]# . /root/rally/.venv/bin/activate 
  2. [root@rally nova]# rally -v task start boot.json(/root/rally/doc/samples/tasks/scenarios/nova这是当前的目录) 

OpenStack Rally 性能测试

以上的图是测试结果。

相关链接:https://wiki.openstack.org/wiki/Rally

https://rally.readthedocs.org/en/latest/tutorial/step_0_installation.html

https://rally.readthedocs.org/en/latest/tutorial/step_1_setting_up_env_and_running_benchmark_from_samples.html

社区对OpenStack平台功能性的测试工具采用Tempest,性能测试采用Rally。

二、OpenStack平台功能性的测试工具Tempest

1、什么是Tempest

1).Tempest

  • api # API的测试集
  • cli # OpenStack的命令行工具测试集
  •  common # 一些公共的工具类和函数
  •  scenario # 对OpenStack的常用场景进行测试,包括基本的启动VM,挂载volumn和网络配置等
  •  services # tempest自己实现的OpenStack API Client,自己实现是为了不让一些bug隐藏在官方实现的Client里面。
  • stress # 压力测试集,利用multiprocessing来启动多个进程来同时对OpenStack发起请求。
  •  thirdparty # EC2兼容的API测试集
  •  whitebox # 白盒测试集,主要是对DB操作,然后发起请求,然后比对结果

2).tempest是通过nose驱动的,python语言编写,使用testtools和testresources等几个测试工具库

3).tempest.test.BaseTestCase,BaseTestCase声明config属性,读取配置文件

4).tempest.test.TestCase声明很多工具函数,供调用

5).每个测试可以分别测试JSON格式和XML格式

2.安装Tempest

下载源码

  1. git clone https: 

查看python版本

  1. python --version 

如若是2.6执行如下,2.7不需要

  1. wget https://pypi.python.org/packages/source/u/unittest2/unittest2-0.5.1.tar.gztar zxvf unittest2-0.5.1.tar.gz 
  2. cd unittest2-0.5.1python setup.py install 

查看xslt-config命令是否存在

  1. [root@controller001 ~]# whereis xslt-config 
  2. xslt-config: /usr/bin/xslt-config(代表存在) 

如果没有执行安装命令

  1. [root@controller001 ~]#yum install libxslt-devel 

检查是否有gcc环境,没有则安装

  1. [root@controller001 ~]#yum install gcc-c++ 

安装一些相关的包

  1. [root@controller001 ~]#yum install libevent-devel openssl-devel libffi-devel python-devel 
  2.  
  3. [root@controller001 ~]#/usr/bin/easy_install pip 

进入tempest目录进行安装(没有安装虚拟机环境)

  1. [root@controller001 ~]#python setup.py install 

(可选)如果不想将tempest安装在真实环境中那么执行如下命令

  1. [root@controller001 ~]#pip -U virtualenv 
  2.  
  3. [root@controller001 ~]#virtualenv .venv 
  4.  
  5. [root@controller001 ~]#. .venv/bin/activate 
  6.  
  7. [root@controller001 ~]#python setup.py install 

安装junitxml,是测试报告输出为xml格式

  1. [root@controller001]#pip install junitxml 

由于tempest在Icehouse时期上使用是有bug的,bug如下:

在/root/tempest/tempest/openstack/common/log.py文件下添加

OpenStack平台功能性测试工具Tempest安装

注意:在Juno版本时期,此bug已修复,故而可以跳过。

修改tempest.conf文件,注意创建外网的时候不要共享,否则在测试启动虚拟机以及进行网络测试的时候会报错

  1. cp etc/tempest.conf.sample etc/tempest.conf 
  2.  
  3. [root@controller001 etc]# == /usr/bincatalog_type===53f6877e-2f46-43e3-93b7-7e22786cacb2 
  4. flavor_ref = 1 
  5.  
  6. = = ./= 7e4b08b4-d7a1-4eff--= 7e4b08b4-d7a1-4eff--=== =-====-feature-= = = = = = = = http:login_url = http:============= http:uri_v3 = .=-feature-= = === http:region =-feature-= = 
  1. public_router_id =ac4a4d9b-27c7-492b-824a-ae384710ab2a 
  2. region =RegionOne 
  3. tenant_network_cidr = 10.100.0.0/16 
  4. tenant_network_mask_bits = 28 
  5. tenant_networks_reachable = true 
  6. [network-feature-enabled] 
  7. [object-storage] 
  8. [object-storage-feature-enabled] 
  9. [orchestration] 
  10. [scenario] 
  11. [service_available] (这里配置需要测试哪些模块) 
  12. ceilometer = false 
  13. cinder = true 
  14. glance = true 
  15. heat = false 
  16. horizon = true 
  17. ironic = false 
  18. neutron = true 
  19. nova = true 
  20. sahara = false 
  21. swift = false 
  22. trove = false 
  23. zaqar = false 
  24. [stress] 
  25. [telemetry] 
  26. [volume] 
  27. [volume-feature-enabled] 
  28. multi_backend =true (测试cinder的后端存储有多个backend) 

修改好配置文件之后,进行测试(以测试keystone当中token为例)

  1. [root@controller001 tempest]# nosetests tempest/api/identity/admin/test_tokens.py --with-xunit --xunit-file=/root/keystone_test_tokens.xml 

----------------------------------------------------------------------
Ran 2 tests in 1.532s

OK

  1. [root@controller001 ~]# cat keystone_test_tokens.xml 
  2. <?xml version="1.0" encoding="UTF-8"?><testsuite name="nosetests" tests="2" errors="0" failures="0" skip="0"><testcase classname="tempest.api.identity.admin.test_tokens.TokensTestJSON" name="test_create_get_delete_token[gate]" time="0.270"><system-out><![CDATA[I want to the url'value and body's value tenants,{"tenant": {"enabled"true"name""tenant--1612865724""description"""}} 
  3. I want to the url'value and body's value users,{"user": {"tenantId""b8f636519ff949d19405e59fce2f78ac""password""pass--1460623961""name""user--1945966900""email"""}} 
  4. I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"tenantName": "tenant--1612865724", "passwordCredentials": {"username": "user--1945966900", "password": "pass--1460623961"}}}]]></system-out></testcase><testcase classname="tempest.api.identity.admin.test_tokens.TokensTestJSON" name="test_rescope_token[gate]" time="0.526"><system-out><![CDATA[I want to the url'value and body's value users,{"user": {"password": "pass--46178537", "name": "user--996425809", "email": ""}} 
  5. I want to the url'value and body's value tenants,{"tenant": {"enabled"true"name""tenant--781047271""description"""}} 
  6. I want to the url'value and body's value tenants,{"tenant": {"enabled"true"name""tenant--1886860973""description"""}} 
  7. I want to the url'value and body's value OS-KSADM/roles,{"role": {"name""role--684861165"}} 
  8. I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"passwordCredentials": {"username": "user--996425809", "password": "pass--46178537"}}}I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"token": {"id": "MIIDLgYJKoZIhvcNAQcCoIIDHzCCAxsCAQExCTAHBgUrDgMCGjCCAYQGCSqGSIb3DQEHAaCCAXUEggFxeyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNS0wMS0yMlQwNTo1MDowNy42NDg5NjIiLCAiZXhwaXJlcyI6ICIyMDE1LTAxLTIyVDA2OjUwOjA3WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJhdWRpdF9pZHMiOiBbIkpIZ0U0eDgwVFJXSkJORjJFUjdXV3ciXX0sICJzZXJ2aWNlQ2F0YWxvZyI6IFtdLCAidXNlciI6IHsidXNlcm5hbWUiOiAidXNlci0tOTk2NDI1ODA5IiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICI4OGQwNGVkZmU0YWE0MmEyYWUzZWQxZjAyNzVmYWQ3NCIsICJyb2xlcyI6IFtdLCAibmFtZSI6ICJ1c2VyLS05OTY0MjU4MDkifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFtdfX19MYIBgTCCAX0CAQEwXDBXMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVW5zZXQxDjAMBgNVBAcMBVVuc2V0MQ4wDAYDVQQKDAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tAgEBMAcGBSsOAwIaMA0GCSqGSIb3DQEBAQUABIIBAAjoxz4e-hnwHy45cd+o3tgQI1SdvidiOIfRrDAg5hMc0Fn9pGxnt-fYmZIBRH9b0LMjkjJa32OO2M0xmlcwCmaALsMMpBk5ouaECzNEJNGb2UyFW6Lpi5r5seM5HBO40brE0muMraOnzoRqkmGijEXf0RDn84iFrX40pvwo-htACNsB9fm1BkqUg8A+ANOJNHRGnqY80fIj+ipp5-53drN0VxbakHZvYJHAut5GsOdK-+TThj3fvbDA1fM-wa-SmZNV7xl-X8F9NChbe7VV3AFdE4XQHpdFZr+c4ZEDGlcq6VVRyD0OpeM2Nt9GbN8gevNWJpK2qjVJ2dxXgCZnDZg="}, "tenantName": "tenant--781047271"}}I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"token": {"id": "MIIDLgYJKoZIhvcNAQcCoIIDHzCCAxsCAQExCTAHBgUrDgMCGjCCAYQGCSqGSIb3DQEHAaCCAXUEggFxeyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNS0wMS0yMlQwNTo1MDowNy42NDg5NjIiLCAiZXhwaXJlcyI6ICIyMDE1LTAxLTIyVDA2OjUwOjA3WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJhdWRpdF9pZHMiOiBbIkpIZ0U0eDgwVFJXSkJORjJFUjdXV3ciXX0sICJzZXJ2aWNlQ2F0YWxvZyI6IFtdLCAidXNlciI6IHsidXNlcm5hbWUiOiAidXNlci0tOTk2NDI1ODA5IiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICI4OGQwNGVkZmU0YWE0MmEyYWUzZWQxZjAyNzVmYWQ3NCIsICJyb2xlcyI6IFtdLCAibmFtZSI6ICJ1c2VyLS05OTY0MjU4MDkifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFtdfX19MYIBgTCCAX0CAQEwXDBXMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVW5zZXQxDjAMBgNVBAcMBVVuc2V0MQ4wDAYDVQQKDAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tAgEBMAcGBSsOAwIaMA0GCSqGSIb3DQEBAQUABIIBAAjoxz4e-hnwHy45cd+o3tgQI1SdvidiOIfRrDAg5hMc0Fn9pGxnt-fYmZIBRH9b0LMjkjJa32OO2M0xmlcwCmaALsMMpBk5ouaECzNEJNGb2UyFW6Lpi5r5seM5HBO40brE0muMraOnzoRqkmGijEXf0RDn84iFrX40pvwo-htACNsB9fm1BkqUg8A+ANOJNHRGnqY80fIj+ipp5-53drN0VxbakHZvYJHAut5GsOdK-+TThj3fvbDA1fM-wa-SmZNV7xl-X8F9NChbe7VV3AFdE4XQHpdFZr+c4ZEDGlcq6VVRyD0OpeM2Nt9GbN8gevNWJpK2qjVJ2dxXgCZnDZg="}, "tenantName": "tenant--1886860973"}}]]></system-out></testcase></testsuite> 

若有不足之处,欢迎批评指正!

【编辑推荐】

  1. 红帽推出全新企业级Linux OpenStack平台培训课程
  2. 红帽推出企业Linux OpenStack平台5
  3. Openstack平台搭建之第一天 基于RDO方式搭建
  4. 红帽推出企业Linux OpenStack平台6 全面升级IaaS服务
【责任编辑:Ophira TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

软件架构设计

本书紧紧围绕“软件架构设计”这一主题,立足实践解析了软件架构的概念,阐述了切实可行的软件架构设计方法,提供了可操作性极强的完整的架...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× Python最火的编程语言