Handle case without pytest for plugin tests
Switching the test runner to pytest in horizon assumes pytest is always installed, but horizon test helpers are used in horizon plugin tests and pytest is not used in horizon plugin tests. As a result, all horizon plugin tests are now broken. This commit considers a case where pytest does not exist. A wrapper decorator for pytest.mark.xxxx is introduced and it acts as a null decorator if pytest is not installed. Change-Id: I80736b108f5ae9a36c0e756bf386468879be3293 Closes-Bug: #1873532
This commit is contained in:
parent
b62c49acf5
commit
0c96dcf293
@ -21,6 +21,7 @@ import copy
|
||||
import logging
|
||||
import os
|
||||
import socket
|
||||
import sys
|
||||
import time
|
||||
import unittest
|
||||
|
||||
@ -42,8 +43,12 @@ from django.utils.encoding import force_text
|
||||
from django.contrib.staticfiles.testing \
|
||||
import StaticLiveServerTestCase as LiveServerTestCase
|
||||
|
||||
import pytest
|
||||
|
||||
# horizon plugins does not require pytest, so we need to consider
|
||||
# pytest is not installed.
|
||||
try:
|
||||
import pytest
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
from horizon import middleware
|
||||
|
||||
@ -69,6 +74,17 @@ except ImportError as e:
|
||||
wsgi.WSGIRequest.__repr__ = lambda self: "<class 'django.http.HttpRequest'>"
|
||||
|
||||
|
||||
def pytest_mark(name):
|
||||
if 'pytest' in sys.modules:
|
||||
return getattr(pytest.mark, name)
|
||||
else:
|
||||
# When pytest is not installed (in case of horizon plugins),
|
||||
# we don't need a pytest marker, so just use a null decorator.
|
||||
def wrapper(f):
|
||||
return f
|
||||
return wrapper
|
||||
|
||||
|
||||
class SessionStore(SessionBase):
|
||||
"""Dict like object for simulating sessions in unittests."""
|
||||
|
||||
@ -221,7 +237,7 @@ class TestCase(django_test.TestCase):
|
||||
", ".join(msgs))
|
||||
|
||||
|
||||
@pytest.mark.selenium
|
||||
@pytest_mark('selenium')
|
||||
@tag('selenium')
|
||||
class SeleniumTestCase(LiveServerTestCase):
|
||||
@classmethod
|
||||
|
@ -33,7 +33,6 @@ from django.utils import http
|
||||
|
||||
from openstack_auth import user
|
||||
from openstack_auth import utils
|
||||
import pytest
|
||||
from requests.packages.urllib3.connection import HTTPConnection
|
||||
|
||||
from horizon import base
|
||||
@ -472,7 +471,7 @@ class ResetImageAPIVersionMixin(object):
|
||||
super(ResetImageAPIVersionMixin, self).tearDown()
|
||||
|
||||
|
||||
@pytest.mark.selenium
|
||||
@horizon_helpers.pytest_mark('selenium')
|
||||
@tag('selenium')
|
||||
class SeleniumTestCase(horizon_helpers.SeleniumTestCase):
|
||||
|
||||
@ -540,7 +539,7 @@ def my_custom_sort(flavor):
|
||||
# PluginTestCase as a separate test process. Hopefully this workaround has gone
|
||||
# in future. For more detail, see bugs 1809983, 1866666 and
|
||||
# https://review.opendev.org/#/c/627640/.
|
||||
@pytest.mark.plugin_test
|
||||
@horizon_helpers.pytest_mark('plugin_test')
|
||||
@tag('plugin-test')
|
||||
class PluginTestCase(TestCase):
|
||||
"""Test case for testing plugin system of Horizon.
|
||||
|
@ -23,13 +23,13 @@ import traceback
|
||||
|
||||
from django.test import tag
|
||||
from oslo_utils import uuidutils
|
||||
import pytest
|
||||
from selenium.webdriver.common import action_chains
|
||||
from selenium.webdriver.common import by
|
||||
from selenium.webdriver.common import keys
|
||||
import testtools
|
||||
import xvfbwrapper
|
||||
|
||||
from horizon.test import helpers
|
||||
from horizon.test import webdriver
|
||||
from openstack_dashboard.test.integration_tests import config
|
||||
from openstack_dashboard.test.integration_tests.pages import loginpage
|
||||
@ -103,7 +103,7 @@ class AssertsMixin(object):
|
||||
return self.assertEqual(list(actual), [False] * len(actual))
|
||||
|
||||
|
||||
@pytest.mark.integration
|
||||
@helpers.pytest_mark('integration')
|
||||
@tag('integration')
|
||||
class BaseTestCase(testtools.TestCase):
|
||||
|
||||
@ -307,7 +307,7 @@ class BaseTestCase(testtools.TestCase):
|
||||
return html_elem.get_attribute("innerHTML").encode("utf-8")
|
||||
|
||||
|
||||
@pytest.mark.integration
|
||||
@helpers.pytest_mark('integration')
|
||||
@tag('integration')
|
||||
class TestCase(BaseTestCase, AssertsMixin):
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user