Перейти к содержимому

Фотография

Python, Selene, PyTest, PyCharm. INTERNALERROR при запуске тестов


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 Sheffsky

Sheffsky

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 04 января 2018 - 12:13

Добрый день!

 

Осваиваю запуск тестов через PyCharm.

Есть два файла на одном уровне - google_test.py и rambler_test.py

В файле google_test один из тестов должен падать при проверке should(have.text("something"))

 

При запуске из консоли команды pytest всё в порядке: один тест падает, остальные проходят.

При запуске из PyCharm когда падает тест для google, то запуск тестов для rambler останавливается:

INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/_pytest/main.py", line 103, in wrap_session
INTERNALERROR>     session.exitstatus = doit(config, session) or 0
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/_pytest/main.py", line 141, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 617, in __call__
INTERNALERROR>     return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 222, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 216, in <lambda>
INTERNALERROR>     firstresult=hook.spec_opts.get('firstresult'),
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 201, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 76, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 180, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/_pytest/main.py", line 164, in pytest_runtestloop
INTERNALERROR>     item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 617, in __call__
INTERNALERROR>     return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 222, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 216, in <lambda>
INTERNALERROR>     firstresult=hook.spec_opts.get('firstresult'),
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 201, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 76, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 180, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/_pytest/runner.py", line 62, in pytest_runtest_protocol
INTERNALERROR>     runtestprotocol(item, nextitem=nextitem)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/_pytest/runner.py", line 70, in runtestprotocol
INTERNALERROR>     rep = call_and_report(item, "setup", log)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/_pytest/runner.py", line 159, in call_and_report
INTERNALERROR>     hook.pytest_runtest_logreport(report=report)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 617, in __call__
INTERNALERROR>     return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 222, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/__init__.py", line 216, in <lambda>
INTERNALERROR>     firstresult=hook.spec_opts.get('firstresult'),
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 201, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 76, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "/home/sheffsky/.virtualenvs/Python-8VdKJfWG/lib/python3.6/site-packages/pluggy/callers.py", line 180, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/sheffsky/Software/pycharm-community/helpers/pycharm/teamcity/pytest_plugin.py", line 285, in pytest_runtest_logreport
INTERNALERROR>     self.teamcity.blockOpened(block_name, flowId=test_id)
INTERNALERROR>   File "/home/sheffsky/Software/pycharm-community/helpers/pycharm/teamcity/messages.py", line 90, in blockOpened
INTERNALERROR>     self.message('blockOpened', name=name, flowId=flowId)
INTERNALERROR>   File "/home/sheffsky/Software/pycharm-community/helpers/pycharm/_jb_runner_tools.py", line 195, in message
INTERNALERROR>     current, parent = TREE_MANAGER.node_ids
INTERNALERROR>   File "/home/sheffsky/Software/pycharm-community/helpers/pycharm/_jb_runner_tools.py", line 148, in node_ids
INTERNALERROR>     current = self._get_node_id(self.current_branch)
INTERNALERROR>   File "/home/sheffsky/Software/pycharm-community/helpers/pycharm/_jb_runner_tools.py", line 140, in _get_node_id
INTERNALERROR>     return self._node_ids_dict[".".join(branch)]
INTERNALERROR> KeyError: ''

pytest==3.3.1

selene==1.0.0a12

PyCharm 2017.3.2

 

При запуске из PyCharm через nose всё в порядке, проблема не воспроизводится.

 

Кто-нибудь сталкивался с подобным?


  • 0

#2 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 09 января 2018 - 14:17

скорее всего неверно настроили окружение в PyCharm.


  • 0

#3 Sheffsky

Sheffsky

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 09 января 2018 - 15:53

from selene import browser
from selene.browser import open_url
from selene.support.jquery_style_selectors import s, ss
from selene.support.conditions import have
from selenium import webdriver


class GooglePage(object):
    def open(self):
        open_url("http://google.com/ncr")
        return self

    def search(self, text):
        s("[name='q']").set(text).press_enter()
        return SearchResultsPage()


class SearchResultsPage(object):
    def __init__(self):
        self.results = ss(".srg .g")


def setup_module(module):
    driver = webdriver.Remote(
        command_executor='http://192.168.124.44:4444/wd/hub',
        desired_capabilities={'browserName': 'chrome',
                              'javascriptEnabled': True})
    browser.set_driver(driver)


def teardown_module(module):
    browser.quit()


def test_rambler_search():
    google = GooglePage().open()
    search = google.search("selene")
    search.results[0].should(have.text("In Greek mythology, Selene is the goddess of the moon"))


def test_rambler_search2():
    google = GooglePage().open()
    search = google.search("selene2")
    search.results[0].should(have.text("In Greek mythology, Selene is the goddess of the moon"))

Создал пустой проект в PyCharm под Windows, поставил selene a12 и pytest 3.3.2. Вот с этим кодом создал два файла: google_test и rambler_test, запустил вот с такой конфигурацией: https://i.imgur.com/mAsCnuo.png

 

google_test проходит, rambler_test зависает. И дело, видимо, даже не в падающем тесте.


  • 0

#4 akaars

akaars

    Новый участник

  • Members
  • Pip
  • 64 сообщений


Отправлено 06 ноября 2018 - 21:44

Апну тему. Столкнулся с такой же ошибкой в PyCharm - во всех тестах, завязанных на selene. Голову сломал :( Гугл молчит.


  • 0

#5 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 07 ноября 2018 - 07:25

Очевидно, что запуск через консоль и через pycharm происходят в разных окружениях. используйте  virtualenv, смотрите настройки pycharm.
Я с такой проблемой не сталкиваюсь, тесты в pycharm я запускаю в консоли.


  • 0

#6 akaars

akaars

    Новый участник

  • Members
  • Pip
  • 64 сообщений


Отправлено 07 ноября 2018 - 12:02

Очевидно, что запуск через консоль и через pycharm происходят в разных окружениях. используйте  virtualenv, смотрите настройки pycharm.
Я с такой проблемой не сталкиваюсь, тесты в pycharm я запускаю в консоли.

 

Там немножко не так. PyCharm запускает тесты через вот этот вот раннер:

 _jb_pytest_runner.py

и тогда всё сыплется :( Но почему-то только когда работаешь с selene. Какой-нибудь примитивный a+b проходит нормально.

В консоли я бы запускал, но дебажить неудобно :(


  • 0

#7 akaars

akaars

    Новый участник

  • Members
  • Pip
  • 64 сообщений


Отправлено 07 ноября 2018 - 14:55

Проблема у меня решилась инициализацией драйвера в фикстуре:

from selenium import webdriver

@pytest.fixture(scope = "session")
def app(request):
set_driver(webdriver.Chrome())

  • 0

#8 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 07 ноября 2018 - 15:58

раннер через который запускаются тесты - это настраиваемый параметр проекта. Если вы его не настраивали, то по умолчанию Unittests
PyCharm / Preferences / Tools / Python Integrated Tools / Default Test Runner


  • 1

#9 akaars

akaars

    Новый участник

  • Members
  • Pip
  • 64 сообщений


Отправлено 07 ноября 2018 - 17:26

раннер через который запускаются тесты - это настраиваемый параметр проекта. Если вы его не настраивали, то по умолчанию Unittests
PyCharm / Preferences / Tools / Python Integrated Tools / Default Test Runner

Нет, там было именно то, что я и сказал. Pytest запускается вот посредством этой самой штуки jb_pytest_runner.py. Выглядит это примерно так:

 

/Users/ibrik/PycharmProjects/learning_pytest/venv/bin/python "/Users/ibrik/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-C/ch-0/183.4139.23/PyCharm CE 2018.3 EAP.app/Contents/helpers/pycharm/_jb_pytest_runner.py" --path /Users/ibrik/PycharmProjects/learning_pytest/test/test_login.py
Launching pytest with arguments /Users/ibrik/PycharmProjects/learning_pytest/test/test_login.py in /Users/ibrik/PycharmProjects/learning_pytest/test

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных