Простой веб-сервер или среда веб-тестирования

Необходимо протестировать сложное веб-приложение, которое взаимодействует с удаленными сторонними веб-службами на основе cgi. Я планирую реализовать некоторые сторонние сервисы на фиктивном веб-сервере, чтобы иметь полный контроль над тестовыми наборами. Ищете простой http-сервер или фреймворк python для имитации стороннего интерфейса.


person optixx    schedule 22.04.2009    source источник


Ответы (5)


Используйте cherrypy, взгляните на Hello World:

import cherrypy

class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())

Запустите этот код, и у вас будет очень быстрый сервер Hello World, готовый на localhost порту 8080 !! Довольно просто, да?

person nosklo    schedule 22.04.2009

Возможно, вам больше всего понравится служба WSGI, поскольку она больше всего похожа на CGI.

Взгляните на werkzeug.

person S.Lott    schedule 22.04.2009

Взгляните на стандартный модуль wsgiref:

https://docs.python.org/2.6/library/wsgiref.html

В конце этой страницы приведен небольшой пример. Нечто подобное уже могло быть достаточно для ваших нужд.

person ashcatch    schedule 22.04.2009
comment
+1: Согласен, что включенного сервера wsgiref, наверное, хватит для его нужд. - person nosklo; 22.04.2009

Я бы посмотрел на Django.

person Andrew Hare    schedule 22.04.2009

Может быть, проще будет издеваться (или заглушить, или как там термин) urllib или любой другой модуль, который вы используете для связи с удаленной веб-службой?

Может быть достаточно даже простого переопределения urllib.urlopen:

import urllib
from StringIO import StringIO

class mock_response(StringIO):
    def info(self):
        raise NotImplementedError("mocked urllib response has no info method")
    def getinfo():
        raise NotImplementedError("mocked urllib response has no getinfo method")

def urlopen(url):
    if url == "http://example.com/api/something":
        resp = mock_response("<xml></xml>")
        return resp
    else:
        urllib.urlopen(url)


is_unittest = True

if is_unittest:
    urllib.urlopen = urlopen

print urllib.urlopen("http://example.com/api/something").read()

Я использовал нечто очень похожее здесь для эмуляции простого API, прежде Получил API-ключ.

person dbr    schedule 27.04.2009