Не получается импортировать fixture в тест

Доброе время суток. Есть тест (с помощью selenium) - проверка добавления в корзину товара. Создал отдельный файл selenium_fixture, который бы открывал и закрывал браузер:

from selenium import webdriver
import pytest

@pytest.fixture
def driver(request):
driver = webdriver.Firefox()
driver.implicitly_wait(10)
request.addfinalizer(driver.quit)
return(driver)

В самом тесте пишу from selenium_fixture import driver, но почему то не импортируется. Делаю в среде разработке pycharm. Библиотеку pytest добавил в окружение. Также в настройках в разделе Python intagrated tools в поле Default test runner поставил py.test. Все равно тест не запускается, модуль не импортируется.

Подскажите что это может быть, что не так делаю?

Используйте файл conftest.py, там ничего импортировать не нужно будет.
З.Ы.: советую еще посмотреть как делать singleton для вебдрайвера :slight_smile:

C singleton не будет в будущем проблем с параллелизацией тестов?

Утверждать не стану, но по идее не должны мешаться друг другу, т.к. это будут разные инстансы
P.S.: если запускать в разных процесса то точно не будут мешать друг другу :slight_smile:

conftest тоже не импортируется, тесты не запускаются, вот такое выдает:
Traceback (most recent call last):
File “C:\PyCharm 4.0.5\helpers\pycharm\pytestrunner.py”, line 58, in
main()
File “C:\PyCharm 4.0.5\helpers\pycharm\pytestrunner.py”, line 31, in main
pluginmanager=_pluginmanager, args=args)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 724, in call
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 338, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 333, in
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 595, in execute
return _wrapped_call(hook_impl.function(*args), self.execute)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 249, in _wrapped_call
wrap_controller.send(call_outcome)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\helpconfig.py”, line 28, in pytest_cmdline_parse
config = outcome.get_result()
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 279, in get_result
_reraise(*ex) # noqa
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 264, in init
self.result = func()
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 596, in execute
res = hook_impl.function(*args)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 861, in pytest_cmdline_parse
self.parse(args)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 966, in parse
self._preparse(args, addopts=addopts)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 937, in _preparse
args=args, parser=self._parser)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 724, in call
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 338, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 333, in
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 595, in execute
return _wrapped_call(hook_impl.function(*args), self.execute)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 253, in _wrapped_call
return call_outcome.get_result()
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 279, in get_result
_reraise(*ex) # noqa
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 264, in init
self.result = func()
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\vendored_packages\pluggy.py”, line 596, in execute
res = hook_impl.function(*args)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 907, in pytest_load_initial_conftests
self.pluginmanager._set_initial_conftests(early_config.known_args_namespace)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 266, in _set_initial_conftests
self._try_load_conftest(anchor)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 272, in _try_load_conftest
self._getconftestmodules(anchor)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 286, in _getconftestmodules
clist = self._getconftestmodules(path.dirpath())
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 297, in _getconftestmodules
mod = self._importconftest(conftestpath)
File “C:\PycharmProjects\palto-deti\ENV\lib\site-packages_pytest\config.py”, line 322, in _importconftest
raise ConftestImportFailure(conftestpath, sys.exc_info())
_pytest.config.ConftestImportFailure: (local(‘C:\PycharmProjects\palto-deti\conftest.py’), (<type ‘exceptions.TypeError’>, TypeError(‘fixture() takes no arguments (1 given)’,), <traceback object at 0x0333C670>))

Ну судя по последней строке в какую то из фикстур передается лишний аргумент.

Из conftest.py не нужно ничего руками импортировать, пайтест делает это за вас.
Попробовал банально взять вашу фикстуру, положил, как люди советовали, в conftest.py. В той же директории test_sample.py с кодом типа

def test_sample(driver):
    driver.get('https://google.com')

Работает как задумано. Вы делали так же?

Вроде стали запускаться, но сейчас новая проблема. Запускается тест и на первой строчке сразу падает и пишет: app = <model.application.Application object at 0x02967E70>
def test_sample(app):

  app.go_to_home_page()

E AttributeError: ‘Application’ object has no attribute ‘go_to_home_page’
test_sample.py:6: AttributeError

Посмотрите код, где я допустил ошибку?



Заранее спасибо за ответы.

Отступы, Карл!
Не огорчайтесь, я, например, тоже не сразу заметил, пока не призумил скриншот)

http://i.imgur.com/W0d8bEW.png

1 лайк

Сообщение перенесено в новую тему: Проверка редактирования и обновления товара в корзине

Спасибо, всё получилось.

И всё же.
Как использовать фикстуру, которая находится НЕ в conftest.py?

При попытке сделать так:

# fixtures.py
def fixure_1():
    pass

# test_1.py:
import fixtures

def test_a(fixtures.fixture_1):
    assert a == 1

получаю ошибку:

E       def test_a(fixtures.fixture_1):
E                          ^
E   SyntaxError: invalid syntax

Что не так с синтаксисом?

1 лайк

Работает, спасибо за ссылку!

А ещё можно так:

# test_1.py:
from fixtures import fixture_1

def test_a(fixture_1):
    assert a == 1