2016-02-20 3 views
1

Я хочу написать Selenium тестов с сервером в качестве прибора:Как запустить сервер в качестве приспособления для py.test

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 для запуска внешних серверных процессов для ваших тестов.