doc | ||
docker | ||
etc | ||
refstack_client | ||
specs | ||
.dockerignore | ||
.gitignore | ||
.gitreview | ||
.stestr.conf | ||
.zuul.yaml | ||
LICENSE | ||
README.rst | ||
refstack-client | ||
requirements.txt | ||
setup_env | ||
setup.cfg | ||
setup.py | ||
tempest-additional-requirements.txt | ||
test-requirements.txt | ||
tox.ini |
RefStack Client
Overview
refstack-client
is a command line utility that allows
you to execute Tempest test runs based on configurations you specify.
When finished running Tempest it can send the passed test data to a
RefStack API server.
Environment setup
We've created an "easy button" for Ubuntu, Centos, RHEL and openSUSE.
Make sure you have
git
installedGet the refstack client:
git clone https://opendev.org/openinfra/refstack-client.git
Go into the
refstack-client
directory:cd refstack-client
Run the "easy button" setup:
./setup_env
Options:
a. -c option allows to specify SHA of commit or branch in Tempest repository which will be installed.
b. -t option allows to specify tag in Tempest repository which will be installed. For example: execute
./setup_env -t tags/3
to install Tempest tag-3. By default, Tempest will be installed from commit 1d500e79156ada6bc6fdb628ed1da0efd4121f6a (Oct, 2019).c. -p option allows to specify python version - python 2.7 (-p 2), 3.6 (-p 3) or any specific one by -p X.X.X. Default to python 3.6.
d. -q option makes
refstack-client
run quitely - if.tempest
directory existsrefstack-client
is considered as installed.e. -s option makes
refstack-client
usepython-tempestconf
from the given source (path) - used when running f.e. in Zuul.
Usage
Prepare a tempest configuration file (or let
refstack-client
generate it for you, see step #4) that is customized to your cloud environment. Samples of minimal Tempest configurations are provided in theetc
directory intempest.conf.sample
andaccounts.yaml.sample
. Note that these samples will likely need changes or additional information to work with your cloud.Note: Use Tempest Pre-Provisioned credentials to provide user test accounts.
Go into the
refstack-client
directory:cd ~/refstack-client
Source to use the correct Python environment:
source .venv/bin/activate
(optional) Generate tempest.conf using
refstack-client
:refstack-client config --use-test-accounts <path to account file>
The above command will create the tempest.conf in etc folder.
Note: If account file is not available, then:
Source the keystonerc file containing cloud credentials and run:
refstack-client config
It will create accounts.yaml and temepst.conf file in etc folder.
Validate your setup by running a short test:
refstack-client test \ -c <Path of the tempest configuration file to use> -v -- \ --regex tempest.api.identity.v3.test_tokens.TokensV3Test.test_create_token
Run tests.
To run the entire API test set:
refstack-client test -c <Path of the tempest configuration file to use> -v
To run only those tests specified in an OpenStack Powered (TM) Guideline:
refstack-client test -c <Path of the tempest configuration file to use> -v --test-list <Absolute path of test list>
For example:
refstack-client test \ -c ~/tempest.conf -v \ --test-list "https://refstack.openstack.org/api/v1/guidelines/2020.11/tests?target=platform&type=required&alias=true&flag=false"
This will run only the test cases required by the 2020.11 guidelines under Platform OpenStack Marketing Program that have not been flagged. More about the marketing programs at Interop and OpenStack Marketing Programs.
For example tests under the compute program are available: https://refstack.openstack.org/api/v1/guidelines/2020.11/tests?target=compute&type=required&alias=true&flag=false Tests of add-on programs can be found similarly, f.e. tests under dns program: https://refstack.openstack.org/api/v1/guidelines/dns.2020.11/tests?target=dns&type=required&alias=true&flag=false or tests under orchestration program: https://refstack.openstack.org/api/v1/guidelines/orchestration.2020.11/tests?target=orchestration&type=required&alias=true&flag=false
Note:
- Adding the
-v
option will show the Tempest test result output. - Adding the
--upload
option will have your test results be uploaded to the default RefStack API server or the server specified by--url
. - Adding the
--test-list
option will allow you to specify the file path or URL of a test list text file. This test list should contain specific test cases that should be tested. Tests lists passed in using this argument will be normalized with the current Tempest environment to eliminate any attribute mismatches. - Adding the
--url
option will allow you to change where test results should be uploaded. - Adding the
-r
option with a string will prefix the JSON result file with the given string (e.g.-r my-test
will yield a result file like 'my-test-0.json'). - Adding
--
enables you to pass arbitrary arguments to tempest run. After the first--
, all other subsequent arguments will be passed to tempest run as is. This is mainly used for quick verification of the target test cases. (e.g.-- --regex tempest.api.identity.v2.test_token
) - If you have provisioned multiple user/project accounts you can run
parallel test execution by enabling the
--parallel
flag.
Use
refstack-client test --help
for the full list of arguments.- Adding the
Upload your results.
If you previously ran a test with
refstack-client
without the--upload
option, you can later upload your results to a RefStack API server with your digital signature. By default, the results are private and you can decide to share or delete the results later.Following is the command to upload your result:
refstack-client upload <Path of results file> -i <path-to-private-key>
The results file is a JSON file generated by
refstack-client
when a test has completed. This is saved in .tempest/.stestr. When you use theupload
command, you can also override the RefStack API server uploaded to with the--url
option.Alternatively, you can use the
upload-subunit
command to upload results using an existing subunit file. This requires that you pass in the Keystone endpoint URL for the cloud that was tested to generate the subunit data:refstack-client upload-subunit \ --keystone-endpoint http://some.url:5000/v3 <Path of subunit file> \ -i <path-to-private-key>
Intructions for uploading data with signature can be found at https://opendev.org/openinfra/refstack/src/branch/master/doc/source/uploading_private_results.rst
View uploaded test set.
You can list previously uploaded data from a RefStack API server by using the following command:
refstack-client list --url <URL of the RefStack API server> -i <path to private key>
Alternatively, if you uploaded the results to the official RefStack server you can view them by using RefStack page where all uploaded results associated with the particular account (the account private key used to upload the results belongs to) will be shown and may be further managed.
Tempest hacking
By default, refstack-client
installs Tempest into the
.tempest
directory. If you're interested in working with
Tempest directly for debugging or configuration, you can activate a
working Tempest environment by switching to that directory and using the
installed dependencies.
cd .tempest
source ./.venv/bin/activate
and run tests manually withtempest run
.
This will make the entire Tempest environment available for you to
run, including tempest run
. More about Tempest can be found
at its documentation.
Interop and OpenStack Marketing Programs
The tests refstack-client
runs are defined within interop repository and
divided into several OpenStack Marketing Programs, the list of the
programs can be found at RefStack page.
ansible-role-refstack-client
We have created an ansible role called ansible-role-refstack-client
in order to simplify and automate running of
refstack-client
. The role can be easily integrated to an
automation machinery - f.e. we use the role for running
refstack-client
on a devstack environment
in Zuul where we run tests of every OpenStack Marketing Program of the
current guideline. The latest builds can be found here.