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

1、什么是Tempest

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

##下载源码

[root@controller001 ~]#git clone

###查看python版本

[root@controller001 ~]#python --version

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

[root@controller001 ~]#wget [root@controller001 ~]#tar zxvf unittest2-0.5.1.tar.gz
[root@controller001 ~]#cd unittest2-0.5.1
[root@controller001 ~]#python setup.py install

###查看xslt-config命令是否存在

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

###如果没有执行安装命令

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

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

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

###安装一些相关的包

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

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

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

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

[root@controller001 ~]#pip  -U virtualenv
[root@controller001 ~]#virtualenv .venv
[root@controller001 ~]#. .venv/bin/activate
[root@controller001 ~]#python setup.py install

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

[root@controller001]#pip install junitxml

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

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

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

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

[root@controller001 etc]#cp etc/tempest.conf.sample etc/tempest.conf
[root@controller001 etc]# egrep "^[^#]" tempest.conf
[DEFAULT]
lock_path =keystone
[auth]
[baremetal]
[boto]
[cli]
cli_dir = /usr/bin      (是否测试cli命令)
enabled=true
[compute]
catalog_type= compute  (keystone service-list命令显示type的值)
endpoint_type = publicURL (keystone endpoint-list命令显示)
fixed_network_name=53f6877e-2f46-43e3-93b7-7e22786cacb2
flavor_ref = 1
flavor_ref_alt = 2
floating_ip_range = 172.16.101.0/24
p_w_picpath_ref = 7e4b08b4-d7a1-4eff-9757-25e2234ca4db     (镜像id)
p_w_picpath_ref_alt = 7e4b08b4-d7a1-4eff-9757-25e2234ca4db
region =RegionOne        (与keystone endpoint-list命令列出值region值相同)
ssh_user = root
use_floatingip_for_ssh = true
volume_device_name = vdb                              (挂载云硬盘)
[compute-admin]
domain_name = nova
password =admin
tenant_name = admin
username = admin
[compute-feature-enabled]
live_migration = true
rescue = trueresize = true
shelve = truesnapshot = true
suspend = true
vnc_console = true
[dashboard]
dashboard_url = login_url = [data_processing]
[database]
[debug]
[identity]                                         (keystone方面的配置)
admin_password = admin
admin_role = admin
admin_tenant_name = admin
admin_username = admin
alt_password = tempest
alt_tenant_name = tempest
alt_username = tempest
catalog_type = identity
endpoint_type = publicURL
password = admin
region = RegionOne
tenant_name = admin
uri = uri_v3 = 172.16.100.162username = admin
[identity-feature-enabled]
api_v2 = true
api_v3 = true
[p_w_picpath]                             (glance方面的配置)
catalog_type = p_w_picpath
endpoint_type = publicURL
http_p_w_picpath = region =RegionOne
[p_w_picpath-feature-enabled]
api_v1 = true
api_v2 = true
[input-scenario]
[messaging]
[negative]
catalog_type = network
dns_servers = 8.8.8.8,8.8.4.4
endpoint_type = publicURL
public_network_id =53f6877e-2f46-43e3-93b7-7e22786cacb2
public_router_id =ac4a4d9b-27c7-492b-824a-ae384710ab2a
region =RegionOne
tenant_network_cidr = 10.100.0.0/16
tenant_network_mask_bits = 28
tenant_networks_reachable = true
[network-feature-enabled]
[object-storage]
[object-storage-feature-enabled]
[orchestration]
[scenario]
[service_available]  (这里配置需要测试哪些模块)
ceilometer = false
cinder = true
glance = true
heat = false
horizon = true
ironic = false
neutron = true
nova = true
sahara = false
swift = false
trove = false
zaqar = false
[stress]
[telemetry]
[volume]
[volume-feature-enabled]
multi_backend =true      (测试cinder的后端存储有多个backend)

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

[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

[root@controller001 ~]# cat keystone_test_tokens.xml
<?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": ""}}
I want to the url'value and body's value users,{"user": {"tenantId": "b8f636519ff949d19405e59fce2f78ac", "password": "pass--1460623961", "name": "user--1945966900", "email": ""}}
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": ""}}
I want to the url'value and body's value tenants,{"tenant": {"enabled": true, "name": "tenant--781047271", "description": ""}}
I want to the url'value and body's value tenants,{"tenant": {"enabled": true, "name": "tenant--1886860973", "description": ""}}
I want to the url'value and body's value OS-KSADM/roles,{"role": {"name": "role--684861165"}}
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>

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

相关链接:http://www.oschina.net/question/129540_146999

转载于:https://blog.51cto.com/wangtianfa/1621797

OpenStack平台功能性测试工具Tempest安装相关推荐

  1. Linux平台代码覆盖率测试工具GCOV的前端工具LCOV简介

    本博客 http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! Content 1. Lcov是什么? 2 ...

  2. 2022年Android官方模拟器安装Xposed教程+测试工具PatDroid安装教程

    碎碎念:截至笔者写此教程的2022.10.10,xposed官网貌似已经G了(?),网上有的教程已经过时,有的是针对奇怪的商用的Android模拟器的教程(以科研工作者的角度来说),在此环境下出一篇A ...

  3. 测试工具AppScan安装使用

    测试工具AppScan安装使用 1. 概念 2. 下载安装 2.1 下载路径 2.2 安装过程 3. 使用说明 3.1 进入主界面 3.2 创建新扫描 3.4 登录管理 3.5 开启全面扫描 3.6 ...

  4. 其他平台上测试工具的使用

    1.软件测试定义 软件测试应该要"尽早地和不断地进行测试"! 软件测试就是在产品上线前,对软件需求.设计方案和编码实现的核查. 软件测试的定义: 1.软件测试是为了发现错误而执行程 ...

  5. python的web压力测试工具-pylot安装使用

    pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相对稳定. 这里不得不鄙视一下apache 的ab测试,那结果真是让人蛋疼,同样的url,测试结果飘忽不定,看得人心惊肉 ...

  6. 网站压力测试工具webbench 安装与使用

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好用,安装使用也特别方便,并且非常小. 主要是 -t 参数用着比较爽,下面参考了张宴的文章 ...

  7. Linux平台代码覆盖率测试工具GCOV简介

    本博客 http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! Content 1. gcov是什么? 2 ...

  8. Yuki Chan全自动渗透测试工具的安装及使用

    Yuki Chan是一个自动渗透测试工具,将为您审核所有标准安全评估.它是最好的渗透测试工具之一,它提供许多集成安全工具和执行许多渗透测试操作到目标网络. 已经有超过15个模块与Yuki chan集成 ...

  9. 压力测试工具gatling安装和介绍

    Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等. 1 优点: 1.gatling和其他压力工具相比有个好处是放在同一内网环境下linux服务器上,这样避免其他 ...

最新文章

  1. Kafka的常见错误分析
  2. 递归 和 迭代 斐波那契数列
  3. opa847方波放大电路_比例阀伺服放大器设计(一)
  4. ubuntu 安装搜狗输入法_超详细的ubuntu14.04安装搜狗输入法教程
  5. 永久居家办公,你愿意吗?
  6. 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
  7. 理解与学习linux 文件系统的目录结构
  8. #博学谷it学习技术支持# Java学习心得
  9. js中的dataset的使用
  10. UG GC工具箱中的齿轮与弹簧
  11. power BI爬取网页数据方法
  12. GIS中的栅格数据结构
  13. 【点赞收藏】36个顶级数据分析方法与模型!
  14. 03-能看懂代码,就是自己写不出来,怎么办?
  15. c语言转义字符详解,C语言转义字符和格式控制符参考
  16. 中层管理者八大绝招 —— 如何培养基层管理者?
  17. 行车记录仪android,车叮咚:一款搭载 Android 系统的行车记录仪是怎样的?
  18. windows重建linux引导,Linux引导修复 利用Linux重建Windows引导
  19. UVA340紫外线灯管
  20. Dobot的一些理解

热门文章

  1. Java源码下载和阅读(JDK1.8/Java 11)
  2. Linux: debian,ubuntu命令行安装chrome/chromium
  3. python缩进用什么键盘好_关于Python基础缩进和选择的介绍
  4. arraycopy用法_Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan...
  5. Intellij idea高效使用教程
  6. jquery怎么获取radio的值
  7. 给接口自动化测试框架增色,实现企业微信测试报告
  8. 拼装sql_3分钟短文 | Laravel复杂SQL超多WHERE子句,本地作用域你没用过
  9. liferay7.0 mysql_Liferay7 BPM门户开发之6: Activiti数据库换为mysql
  10. return true Java_[Java教程]js中return,return true,return false的用法及区别