Clean up packaging and docs to make this consumable

* add a convenience Makefile
* add license headers
* rationalized requirements.txt
* add wheel building capabilities
* update README
This commit is contained in:
Chris Dent 2018-01-09 17:12:00 +00:00
parent d570f5da52
commit 487ebec24f
7 changed files with 99 additions and 17 deletions

23
Makefile Normal file
View File

@ -0,0 +1,23 @@
# simple Makefile for some common tasks
.PHONY: clean dist release pypi tagv
clean:
find . -name "*.pyc" |xargs rm || true
rm -r dist || true
rm -r build || true
rm -r .eggs || true
rm -r gabbi_tempest.egg-info || true
tagv:
git tag -s \
-m `python -c 'import gabbi_tempest; print gabbi_tempest.__version__'` \
`python -c 'import gabbi_tempest; print gabbi_tempest.__version__'`
git push origin master --tags
dist:
python setup.py sdist bdist_wheel
release: clean tagv pypi
pypi:
python setup.py sdist bdist_wheel upload --sign

View File

@ -2,16 +2,26 @@
Gabbi + Tempest Gabbi + Tempest
=============== ===============
This is an exploration of running gabbi_ as a tempest plugin. This Gabbi-tempest is an experimental Tempest_ plugin_ that enables
code is based entirely on the work of Mehdi Abaakouk who made a testing the APIs of running OpenStack services, integrated with
tempest plugin for gnocchi_. This code models that but tries to tempest but without needing to write Python. Instead the YAML
be more generic: it allows you to set a ``GABBI_TEMPEST_PATH`` format_ provided by gabbi_ is used to write and evaluate HTTP
environment variable pointing to multiple directories containing requests and responses.
gabbi YAML files.
Tests are placed in YAML files in one or more directories. Those
directories are added to a ``GABBI_TEMPEST_PATH`` environment
variable. When that variable is passed into a tempest test
runner that is aware of the gabbi plugin, the files on that path
will be used to create tempests tests.
The test harness sets a series of enviornment variables that can The test harness sets a series of enviornment variables that can
be used in the YAML to reach the available services. These will be used in the YAML to reach the available services. The available
eventually need to be extended (or can be extended by subclasses). variables may be extended in two ways:
* Adding them to the environment that calls tempest if the values are
known.
* Setting them in a subclass of the plugin if the values need to
be calculated from what tempest knows.
For each service in the service catalog there are For each service in the service catalog there are
``<SERVICE_TYPE>_SERVICE`` and ``<SERVICE_TYPE>_BASE`` variables ``<SERVICE_TYPE>_SERVICE`` and ``<SERVICE_TYPE>_BASE`` variables
@ -19,38 +29,55 @@ For each service in the service catalog there are
``SERVICE_TOKEN``, ``IMAGE_REF``, ``FLAVOR_REF`` and ``FLAVOR_REF_ALT`` ``SERVICE_TOKEN``, ``IMAGE_REF``, ``FLAVOR_REF`` and ``FLAVOR_REF_ALT``
are also available. are also available.
For the time being the ``SERVICE_TOKEN`` is ``admin``.
Trying It Trying It
--------- ---------
To experiment with this you need a working tempest installation and To experiment with this you need a working tempest installation and
configuration. I used devstack with:: configuration. One way to do that is to use devstack_ with the
following added to the local.conf::
enable_service tempest enable_service tempest
INSTALL_TEMPEST=True INSTALL_TEMPEST=True
in local.conf. in local.conf.
Once tempest is confirmed to be working, make a clone of this repo, Once tempest is confirmed to be working, gabbi-tempest must be
cd into it and do the equivalent of:: installed. Either install it from PyPI::
pip install gabbi-tempest
Or make a clone of this repo_, cd into it, and do the equivalent of::
pip install -e . pip install -e .
If you are using virtualenvs or need sudo, your form will be If you are using virtualenvs or need sudo, your form will be
different. different.
Create some gabbi_ tests that exercise the OpenStack services. There
are sample files in the ``samples`` directory in the repo_.
Go to the tempest directory (often ``/opt/stack/tempest``) and run Go to the tempest directory (often ``/opt/stack/tempest``) and run
tempest limiting the test run to gabbi related tests and setting tempest as follows. Adding the ``regex`` will limit the test run
the PATH variable:: to just gabbi related tests::
GABBI_TEMPEST_PATH=/path/one:/path/two tempest run --regex gabbi GABBI_TEMPEST_PATH=/path/one:/path/two tempest run --regex gabbi
This will run the tests described by the YAML files in This will run the tests described by the YAML files in
``/path/one`` and ``/path/two``. ``/path/one`` and ``/path/two``.
There is a sample files in ``samples`` in the repo which you can try History
with:: -------
GABBI_TEMPEST_PATH=/path/to/samples tempest run --regex gabbi This code is based on the work of Mehdi Abaakouk who made a tempest
plugin for gnocchi_ that worked with gabbi_. He figured out the
details of the plugin structure.
.. _devstack: https://docs.openstack.org/devstack/latest/
.. _Tempest: https://docs.openstack.org/tempest/latest/
.. _plugin: https://docs.openstack.org/tempest/latest/plugin.html
.. _gnocchi: https://review.openstack.org/#/c/301585/ .. _gnocchi: https://review.openstack.org/#/c/301585/
.. _gabbi: https://gabbi.readthedocs.org/ .. _gabbi: https://gabbi.readthedocs.org/
.. _format: https://gabbi.readthedocs.io/en/latest/format.html
.. _repo: https://github.com/cdent/gabbi-tempest

View File

@ -0,0 +1,14 @@
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
__version__ = '0.1.0'

View File

@ -0,0 +1,11 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

View File

@ -1 +1,3 @@
pbr
gabbi gabbi
six

View File

@ -89,7 +89,9 @@ tests:
response_json_paths: response_json_paths:
$.server.status: VERIFY_RESIZE $.server.status: VERIFY_RESIZE
# expected to fail because we don't double this way anymore
- name: check for double allocations - name: check for double allocations
xfail: True
GET: *s1_alloc GET: *s1_alloc
poll: poll:
count: 10 count: 10

View File

@ -15,8 +15,8 @@ classifier =
Programming Language :: Python :: 2 Programming Language :: Python :: 2
Programming Language :: Python :: 2.7 Programming Language :: Python :: 2.7
Programming Language :: Python :: 3 Programming Language :: Python :: 3
Programming Language :: Python :: 3.4
Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.5
Programming Language :: Python :: 3.6
Topic :: Software Development :: Testing Topic :: Software Development :: Testing
[files] [files]
@ -31,3 +31,6 @@ source-dir = docs/source
[entry_points] [entry_points]
tempest.test_plugins = tempest.test_plugins =
gabbi = gabbi_tempest.plugin:GabbiTempestPlugin gabbi = gabbi_tempest.plugin:GabbiTempestPlugin
[bdist_wheel]
universal=1