我在 Django 中安装了 pytest-django 和 selenium,如下所示。
pip install pytest-django && pip install selenium
然后,我在test.py
文件夹中创建了
pytest.ini,
__init__.py
和tests
(空文件),如下所示:
django-project
|-core
| └-settings.py
|-my_app1
|-my_app2
|-pytest.ini
└-tests
|-__init__.py
└-test.py
然后,我将下面的代码设置为
pytest.ini
:
# "pytest.ini"
[pytest]
DJANGO_SETTINGS_MODULE = core.settings
testpaths = tests
最后,我可以使用多个浏览器 Google Chrome、Microsoft Edge 和 Firefox 分别测试 Django(Admin),但不能与 Selenium 一起测试,如下所示,因此代码很多:
# "tests/test.py"
import pytest
from selenium import webdriver
from django.test import LiveServerTestCase
""" Google Chrome Test Begin """
@pytest.fixture(scope="class")
def chrome_driver_init(request):
chrome_driver = webdriver.Chrome()
request.cls.driver = chrome_driver
yield
chrome_driver.close()
@pytest.mark.usefixtures("chrome_driver_init")
class Test_URL_Chrome(LiveServerTestCase):
def test_open_url(self):
self.driver.get(("%s%s" % (self.live_server_url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title
""" Google Chrome Test End """
""" Microsoft Edge Test Begin """
@pytest.fixture(scope="class")
def edge_driver_init(request):
edge_driver = webdriver.Edge()
request.cls.driver = edge_driver
yield
edge_driver.close()
@pytest.mark.usefixtures("edge_driver_init")
class Test_URL_Edge(LiveServerTestCase):
def test_open_url(self):
self.driver.get(("%s%s" % (self.live_server_url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title
""" Microsoft Edge Test End """
""" Firefox Test Begin """
@pytest.fixture(scope="class")
def firefox_driver_init(request):
firefox_driver = webdriver.Firefox()
request.cls.driver = firefox_driver
yield
firefox_driver.close()
@pytest.mark.usefixtures("firefox_driver_init")
class Test_URL_Firefox(LiveServerTestCase):
def test_open_url(self):
self.driver.get(("%s%s" % (self.live_server_url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title
""" Firefox Test End """
那么,如何与 Selenium 一起使用多个浏览器测试 Django 以减少代码量?
您可以使用 Google Chrome、Microsoft Edge 和 Firefox 等多种浏览器与 Selenium 一起测试 Django (Admin),以减少代码,如下所示。 *我的回答解释了如何使用多个无头浏览器Google Chrome、Microsoft Edge和Firefox以及Selenium来测试Django(管理员)以减少代码,如下所示:
# "tests/test.py"
import pytest
from selenium import webdriver
@pytest.fixture(params=["chrome", "edge", "firefox"], scope="class")
def browser_driver_init(request):
if request.param == "chrome":
web_driver = webdriver.Chrome()
if request.param == "edge":
web_driver = webdriver.Edge()
if request.param == "firefox":
web_driver = webdriver.Firefox()
request.cls.driver = web_driver
yield
web_driver.close()
@pytest.mark.usefixtures("browser_driver_init")
class Test_URL_Browser:
def test_open_url(self, live_server):
self.driver.get(("%s%s" % (live_server.url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title
并且,您还可以使用conftest.py,如下所示:
django-project
|-core
| └-settings.py
|-my_app1
|-my_app2
|-pytest.ini
└-tests
|-__init__.py
|-conftest.py # Here
└-test.py
# "tests/conftest.py"
import pytest
from selenium import webdriver
@pytest.fixture(params=["chrome", "edge", "firefox"], scope="class")
def browser_driver_init(request):
if request.param == "chrome":
web_driver = webdriver.Chrome()
if request.param == "edge":
web_driver = webdriver.Edge(options=options)
if request.param == "firefox":
web_driver = webdriver.Firefox()
request.cls.driver = web_driver
yield
web_driver.close()
# "tests/test.py"
import pytest
@pytest.mark.usefixtures("browser_driver_init")
class Test_URL_Browser:
def test_open_url(self, live_server):
self.driver.get(("%s%s" % (live_server.url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title