написать модульный тест для приложения web.py с помощью pytest

Я хотел бы написать модульный тест для приложения web.py с помощью pytest. Как вызвать службы web.py в pytest.

Код:

import web

urls = (
    '/', 'index'
)

app = web.application(urls, globals()) 

class index:
    def GET(self):
        return "Hello, world!"

if __name__ == "__main__":    
 app.run()

Это можно сделать с помощью модуля запросов python, когда мы запускаем сервисы web.py, он будет запускать http://localhost:8080. /. Затем импортируйте модуль запросов и используйте метод get, а в объекте ответа вы можете проверить результат. Это нормально.

Используя Paste и Nose, мы также можем добиться этого в соответствии с официальной документацией web.py. http://webpy.org/docs/0.3/tutorial.

Есть ли какое-либо решение в pytest, как вариант в пасте и носу.


person Uday    schedule 03.05.2019    source источник


Ответы (1)


Да. На самом деле код из рецепта web.py Тестирование с помощью Paste и Nose можно было бы использовать с py.test почти как есть, просто удаляя импорт nose.tools и соответствующим образом обновляя утверждения.

Но если вы хотите знать, как писать тесты для приложений web.py в стиле py.test, они могут выглядеть так:

from paste.fixture import TestApp

# I assume the code from the question is saved in a file named app.py,
# in the same directory as the tests. From this file I'm importing the variable 'app'
from app import app

def test_index():
    middleware = []
    test_app = TestApp(app.wsgifunc(*middleware))
    r = test_app.get('/')
    assert r.status == 200
    assert 'Hello, world!' in r

По мере того, как вы будете добавлять дополнительные тесты, вы, вероятно, реорганизуете создание тестового приложения в фикстуру:

from pytest import fixture # added
from paste.fixture import TestApp
from app import app

def test_index(test_app):
    r = test_app.get('/')
    assert r.status == 200
    assert 'Hello, world!' in r

@fixture()
def test_app():
    middleware = []
    return TestApp(app.wsgifunc(*middleware))
person igneus    schedule 03.05.2019
comment
Спасибо за ваш ответ, мы попробуем это решение и сообщим вам результат. - person Uday; 04.05.2019