Skip to content

Commit

Permalink
Pulish former wiki page as README.md
Browse files Browse the repository at this point in the history
https://wiki.opnfv.org/display/functest/Write+your+own+Xtesting+driver

Change-Id: If135bf9d84e1c357911eb0b2331539844288969a
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
  • Loading branch information
collivier committed Feb 17, 2021
1 parent 5887ce9 commit 3ec6653
Showing 1 changed file with 198 additions and 0 deletions.
198 changes: 198 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
# Xtesting in a nutshell

Xtesting is a simple framework to assemble sparse test cases and to accelerate
the adoption of continuous integration best practices. By managing all
the interactions with the components (test scheduler, test results database,
artifact repository), it allows the developer to work only on the test suites
without diving into CI/CD.

It asks for a few low constraints
[quickly achievable](https://www.sdxcentral.com/articles/news/opnfvs-6th-release-brings-testing-capabilities-that-orange-is-already-using/2018/05/)
to verify multiple components in the same CI/CD toolchain. Even more, it brings
the capability to run third-party test cases in our CI toolchains and then to
also rate network functions by the coverage.

Please see
[the Katacoda scenarios](https://www.katacoda.com/ollivier/courses/xtestingci)
to try Xtesting. You will love them!

## [Write your own Xtesting driver](https://www.katacoda.com/ollivier/courses/xtestingci/firstdriver)

### dump all the following files in an empty dir

weather.py

```python
#!/usr/bin/env python

# pylint: disable=missing-docstring

import json
import os
import sys
import time

import requests

from xtesting.core import testcase


class Weather(testcase.TestCase):

url = "https://samples.openweathermap.org/data/2.5/weather"
city_name = "London,uk"
app_key = "439d4b804bc8187953eb36d2a8c26a02"

def run(self, **kwargs):
try:
self.start_time = time.time()
req = requests.get("{}?q={}&&appid={}".format(
self.url, self.city_name, self.app_key))
req.raise_for_status()
data = req.json()
os.makedirs(self.res_dir, exist_ok=True)
with open('{}/dump.txt'.format(self.res_dir), 'w+') as report:
json.dump(data, report, indent=4, sort_keys=True)
for key in kwargs:
if data["main"][key] > kwargs[key]:
self.result = self.result + 100/len(kwargs)
self.stop_time = time.time()
except Exception: # pylint: disable=broad-except
print("Unexpected error:", sys.exc_info()[0])
self.result = 0
self.stop_time = time.time()
```

setup.py

```python
#!/usr/bin/env python

# pylint: disable=missing-docstring

import setuptools

setuptools.setup(
setup_requires=['pbr>=2.0.0'],
pbr=True)
```

setup.cfg

```
[metadata]
name = weather
version = 1
[files]
packages = .
[entry_points]
xtesting.testcase =
weather = weather:Weather
```

requirements.txt

```
xtesting
requests!=2.20.0,!=2.24.0 # Apache-2.0
```

testcases.yaml

```yaml
---
tiers:
-
name: simple
order: 0
description: ''
testcases:
-
case_name: humidity
project_name: weather
criteria: 100
blocking: true
clean_flag: false
description: ''
run:
name: weather
args:
humidity: 80
-
case_name: pressure
project_name: weather
criteria: 100
blocking: true
clean_flag: false
description: ''
run:
name: weather
args:
pressure: 1000
-
case_name: temp
project_name: weather
criteria: 100
blocking: true
clean_flag: false
description: ''
run:
name: weather
args:
temp: 280
-
name: combined
order: 1
description: ''
testcases:
-
case_name: half
project_name: weather
criteria: 50
blocking: true
clean_flag: false
description: ''
run:
name: weather
args:
humidity: 90
pressure: 1000
temp: 280
```
Dockerfile
```
FROM alpine:3.12

ADD . /src/
RUN apk --no-cache add --update python3 py3-pip py3-wheel git && \
git init /src && pip3 install /src
COPY testcases.yaml /usr/lib/python3.8/site-packages/xtesting/ci/testcases.yaml
CMD ["run_tests", "-t", "all"]
```

### make world

Deploy your own Xtesting toolchain

```bash
virtualenv xtesting
. xtesting/bin/activate
pip install ansible
ansible-galaxy install collivier.xtesting
ansible-galaxy collection install ansible.posix community.general community.grafana community.kubernetes
ansible-playbook site.yml
deactivate
rm -r xtesting
```

Build your container

```bash
sudo docker build -t 127.0.0.1:5000/weather .
```

### That's all folks!

0 comments on commit 3ec6653

Please sign in to comment.