Как запустить сервер как крепление для py.test

Я хочу написать тесты Selenium с сервером в качестве приспособления:

import pytest

@pytest.fixture()
def driver(request):
    from selenium import webdriver
    d = webdriver.Firefox()
    request.addfinalizer(d.close)
    return d

@pytest.fixture()
def server():
    from server import run
    run(host="localhost", port=8080)

def test_can_see_echo(driver,server):
    page = TestPage(driver)
    page.fill_text_in_input("test")
    page.click_send()
    print page.get_returnet_value()

Функция запуска в устройстве сервера является функцией запуска бутылки. Проблема в том, что когда я вызываю run(), программы переходят в бесконечный цикл, а тело теста не выполняется. Должен ли я вызвать запустить в той же теме? Мой дизайн в порядке? В будущем я хочу использовать крепление сервера для интеграции в состояние сервера. Например, сделайте тест "добавить комментарий" с помощью Selenium и в конце используйте приспособление сервера, чтобы спросить сервер, действительно ли это действие произошло.

1 ответ

Решение

Тесты зависают, потому что ваш run(host="localhost", port=8080) запускает сервер, который ждет вечно. Вы должны запустить этот сервер в другом потоке / процессе.

Посмотрите что-то вроде pytest-xprocess для запуска процессов внешнего сервера для ваших тестов.

Другие вопросы по тегам