Как запустить Py.test в PyScripter

Я новичок в py.test. Пожалуйста, дайте мне знать, как запустить py.test в редакторе PyScripter. Я пробовал belwo, но он не работает.

импортировать pytest

def func(x): вернуть x + 1

def test_answer(): утверждение func(3) == 5

pytest.main ()

и при запуске вышеуказанного скрипта я получаю сообщение об ошибке

Traceback (most recent call last):
  File "<module1>", line 10, in <module>
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 474, in main
    exitstatus = config.hook.pytest_cmdline_main(config=config)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 422, in __call__
    return self._docall(methods, kwargs)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 433, in _docall
    res = mc.execute()
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 351, in execute
    res = method(**kwargs)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\main.py", line 107, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\main.py", line 92, in wrap_session
    config.pluginmanager.notify_exception(excinfo, config.option)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 285, in notify_exception
    res = self.hook.pytest_internalerror(excrepr=excrepr)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 422, in __call__
    return self._docall(methods, kwargs)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 433, in _docall
    res = mc.execute()
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\core.py", line 351, in execute
    res = method(**kwargs)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\terminal.py", line 152, in pytest_internalerror
    self.write_line("INTERNALERROR> " + line)
  File "C:\Python27\lib\site-packages\pytest-2.3.2-py2.7.egg\_pytest\terminal.py", line 140, in write_line
    self._tw.line(line, **markup)
  File "C:\Python27\lib\site-packages\py-1.4.11-py2.7.egg\py\_io\terminalwriter.py", line 181, in line
    self.write(s, **kw)
  File "C:\Python27\lib\site-packages\py-1.4.11-py2.7.egg\py\_io\terminalwriter.py", line 225, in write
    self._file.write(msg)
  File "C:\Python27\lib\site-packages\py-1.4.11-py2.7.egg\py\_io\terminalwriter.py", line 241, in write
    self._writemethod(data)
TypeError: 'AsyncStream' object is not callable

Пожалуйста помогите мне


person user1822881    schedule 14.11.2012    source источник
comment
Он работает вне PyScripter? Какую версию PyScripter вы используете?   -  person martineau    schedule 14.11.2012
comment
Да, он выходит за пределы PyScripter, если вызывать скрипт следующим образом: python -m py.test sample.py. я использую пискриптер 2.5.3   -  person user1822881    schedule 14.11.2012
comment
Похоже на проблему совместимости с PyScripter... Я бы сообщил им о проблеме. Из трассировки похоже, что pytest сталкивается с каким-то INTERNALERROR при запуске изнутри. А пока попробуйте что-нибудь другое (или вообще ничего — просто используйте текстовый редактор и командную строку).   -  person martineau    schedule 14.11.2012


Ответы (4)


Сценарий кажется неправильным, насколько я знаю, pytest.main можно использовать, если вы хотите, чтобы ваш pytest запускался интерпретатором python. Вам нужно иметь свой тест в каталоге. Например, ваш файл pytest называется test_sample, который имеет следующее содержимое ==================================pytests/test_sample ================================

    import pytest
    def func(x): return x + 1
    def test_answer(): assert func(3) == 5

================================================== ================================ Тогда вы можете иметь следующий код в файле python, который запускает ваш test_sample

   pytest.main(args=['-s', os.path.abspath('pytests')])

Это должно решить вашу проблему

Если вы не хотите, чтобы python запускал ваши pytests, вы можете настроить pyscripter runner для запуска pytests с помощью инструментов -> настроить инструменты, а затем добавить аргумент командной строки pytests. затем вы можете запустить pytest из инструментов. По умолчанию pyscripter использует интерпретатор Python в качестве бегуна

person Macintosh_89    schedule 15.11.2012

Вы можете использовать pytest в pydev:
http://pypi.python.org/pypi/pytest-pydev/0.1

person NamPNQ    schedule 14.11.2012
comment
с этим я смогу настроить Pydev на Eclipse, но не на pyscripter. Пожалуйста, помогите мне, как запустить в PyScripter. - person user1822881; 14.11.2012

Похоже, что PyScripter устанавливает какой-то поток sys.stdout, который pytest не распознает. Я просто попытался улучшить обработку со стороны pytest. Вы можете попробовать использовать его с:

pip install -i http://pypi.testrun.org -U pytest

который должен, в частности, установить также библиотеку "py", содержащую код TerminalWriting. Если это не сработает, отправьте файл с точной версией среды/PyScripter, которую вы используете. используют. А также значение «import py ; print py.version».

ХТХ, Хольгер

person hpk42    schedule 15.11.2012

import pytest,os
os.chdir("C:\Users\Public\Documents\Development\Python\<test_pytest.py>") #your file location
pytest.main(['-s', 'test_pytest.py'])

сохраните файл. В Pyscripter перейдите в Run-->Python Engine--> Internal Запустите тест, он должен работать. Иногда pyscripter не улавливает изменения, возможно, вам придется повторно инициализировать движок Python (Ctrl+F2).

person Macintosh_89    schedule 01.03.2013