initial pytest core redone

This commit is contained in:
Gleb Boushev
2021-03-09 12:25:20 +03:00
parent 82f55b1e86
commit 70a52e64c3
7 changed files with 163 additions and 2 deletions

4
.gitignore vendored
View File

@@ -149,4 +149,6 @@ pytest/*
!pytest/test_*.py !pytest/test_*.py
!pytest/helpers !pytest/helpers
!pytest/pytest.ini !pytest/pytest.ini
pytest/nightly*log pytest/nightly*log
test_everything.xml

View File

@@ -0,0 +1,29 @@
import pytest
@pytest.mark.usefixtures('setup_cloudsdk')
@pytest.mark.usefixtures('update_firmware')
@pytest.mark.UHF # example of a class mark
class Test24ghz(object):
@pytest.mark.wpa2
def test_single_client_wpa2(self, setup_cloudsdk, update_firmware):
print(setup_cloudsdk)
assert 1 == 0
@pytest.mark.open
def test_single_client_open(self, setup_cloudsdk, update_firmware):
print(setup_cloudsdk)
assert 1 == 0
@pytest.mark.usefixtures('setup_cloudsdk')
@pytest.mark.usefixtures('update_firmware')
@pytest.mark.SHF # example of a class mark
class Test50ghz(object):
@pytest.mark.wpa2
def test_single_client_wpa2(self, setup_cloudsdk, update_firmware):
print(setup_cloudsdk)
assert 1 == 0
@pytest.mark.open
def test_single_client_open(self, setup_cloudsdk, update_firmware):
print(setup_cloudsdk)
assert 1 == 0

View File

@@ -82,3 +82,9 @@ Currently the plan is to use pytest integrated with [allure](https://docs.qameta
1. Do not use old style string formatting: `"Hello %s" % var`; use `f"Hello {var}` instead 1. Do not use old style string formatting: `"Hello %s" % var`; use `f"Hello {var}` instead
2. use `"""` in Docstrings 2. use `"""` in Docstrings
3. todo 3. todo
### Useful links
https://docs.pytest.org/en/latest/example/markers.html
https://docs.pytest.org/en/latest/usage.html
http://pythontesting.net/framework/pytest/pytest-introduction/

View File

@@ -0,0 +1,17 @@
"""
A set of constants describing AP profiles
"""
PROFILE_DATA = {
"test_single_client_wpa2": {
"profile_name": "test-ssid-wpa2",
"ssid_name": "test_wpa2_test",
"mode": "BRIDGE",
"security_key": "testing12345"
},
"test_single_client_open": {
"profile_name": "test-ssid-open",
"ssid_name": "test_open",
"mode": "BRIDGE"
}
}

78
libs/cloudsdk/conftest.py Normal file
View File

@@ -0,0 +1,78 @@
# import files in the current directory
import sys
import os
sys.path.append(
os.path.dirname(
os.path.realpath( __file__ )
)
)
import pytest
from configuration_data import PROFILE_DATA
def pytest_addoption(parser):
parser.addini("jfrog-base-url", "jfrog base url")
parser.addini("jfrog-user-id", "jfrog username")
parser.addini("jfrog-user-password", "jfrog password")
parser.addini("sdk-base-url", "cloud sdk base url")
parser.addini("sdk-user-id", "cloud sdk username")
parser.addini("sdk-user-password", "cloud sdk user password")
parser.addini("sdk-customer-id", "cloud sdk customer id for the access points")
parser.addini("testrail-base-url", "testrail base url")
parser.addini("testrail-project", "testrail project name to use to generate test reports")
parser.addini("testrail-user-id", "testrail username")
parser.addini("testrail-user-password", "testrail user password")
parser.addini("lanforge-ip-address", "LANforge ip address to connect to")
parser.addini("lanforge-port-number", "LANforge port number to connect to")
parser.addini("lanforge-radio", "LANforge radio to use")
parser.addini("lanforge-ethernet-port", "LANforge ethernet adapter to use")
# change behaviour
parser.addoption(
"--skip-update-firmware",
action="store_true",
default=False,
help="skip updating firmware on the AP (useful for local testing)"
)
# this has to be the last argument
# example: --access-points ECW5410 EA8300-EU
parser.addoption(
"--access-points",
nargs="+",
default=[ "ECW5410" ],
help="list of access points to test"
)
def pytest_generate_tests(metafunc):
metafunc.parametrize("access_points", metafunc.config.getoption('--access-points'), scope="session")
# run something after all tests are done regardless of the outcome
def pytest_unconfigure(config):
print("Tests cleanup done")
@pytest.fixture(scope="function")
def setup_cloudsdk(request, instantiate_cloudsdk):
def fin():
print(f"Cloud SDK cleanup for {request.node.originalname}")
request.addfinalizer(fin)
yield PROFILE_DATA[request.node.originalname]
@pytest.fixture(scope="session")
def update_firmware(request, instantiate_jFrog, instantiate_cloudsdk, retrieve_latest_image, access_points):
if request.config.getoption("--skip-update-firmware"):
return
yield "update_firmware"
@pytest.fixture(scope="session")
def retrieve_latest_image(request, access_points):
if request.config.getoption("--skip-update-firmware"):
return
yield "retrieve_latest_image"
@pytest.fixture(scope="session")
def instantiate_cloudsdk(request):
yield "instantiate_cloudsdk"
@pytest.fixture(scope="session")
def instantiate_jFrog(request):
yield "instantiate_jFrog"

29
libs/cloudsdk/pytest.ini Normal file
View File

@@ -0,0 +1,29 @@
[pytest]
addopts= --junitxml=test_everything.xml
# jFrog parameters
jfrog-base-url=tip.jFrog.io/artifactory/tip-wlan-ap-firmware
jfrog-user-id=tip-read
jfrog-user-password=tip-read
# Cloud SDK parameters
sdk-base-url=wlan-portal-svc.cicd.lab.wlan.tip.build
sdk-user-id=support@example.com
sdk-user-password=support
# Testrails parameters
testrail-base-url=telecominfraproject.testrail.com
testrail-project=opsfleet-wlan
testrail-user-id=gleb@opsfleet.com
testrail-user-password=use_command_line_to_pass_this
# LANforge
lanforge-ip-address=localhost
lanforge-port-number=8080
lanforge-radio=wiphy4
lanforge-ethernet-port=eth2
# Cloud SDK settings
sdk-customer-id=2
markers =
UHF: marks tests as using 2.4 ghz frequency
SHF: marks tests as using 5.0 ghz frequency
open: marks tests as using no security
wpa2: marks tests as using wpa2 security

View File

@@ -1,5 +1,5 @@
""" """
A set of constants to use throughtout the tests A set of constants describing cloud controllers properties
""" """
SDK_BASE_URLS = { SDK_BASE_URLS = {