Как макетировать HTTP-запрос в сценарии модульного тестирования в Python
Я хотел бы включить веб-сервер для всех моих тестов, связанных с HTTP. Это не должно быть очень сложным. Я бы предпочел не зависеть от того, чтобы быть онлайн. Таким образом, я мог протестировать некоторые варианты моей программы.
Start the server Create a few resources (URI) with appropriate mime types, response code, etc. Run the tests (would be good to not have to start the server for each tests too) Shut down the server.Любые намеки на этот код будут полезны. Я попробовал несколько вещей с BaseHTTPServer, но пока не увенчался успехом. Команда по проверке носа, кажется, ждет бесконечно.
import unittest
from foo import core
class HttpRequests(unittest.TestCase):
"""Tests for HTTP"""
def setUp(self):
"Starting a Web server"
self.port = 8080
# Here we need to start the server
#
# Then define a couple of URIs and their HTTP headers
# so we can test the code.
pass
def testRequestStyle(self):
"Check if we receive a text/css content-type"
myreq = core.httpCheck()
myuri = 'http://127.0.0.1/style/foo'
myua = "Foobar/1.1"
self.asserEqual(myreq.mimetype(myuri, myua), "text/css")
def testRequestLocation(self):
"another test"
pass
def tearDown(self):
"Shutting down the Web server"
# here we need to shut down the server
pass
спасибо за любую помощь
Update - 2012:07:10T02:34:00Z
Это код, который для данного веб-сайта будет возвращать список CSS. Я хочу проверить, возвращает ли он правильный список CSS.
import unittest
from foo import core
class CssTests(unittest.TestCase):
"""Tests for CSS requests"""
def setUp(self):
self.css = core.Css()
self.req = core.HttpRequests()
def testCssList(self):
"For a given Web site, check if we get the right list of linked stylesheets"
WebSiteUri = 'http://www.opera.com/'
cssUriList = [
'http://www.opera.com/css/handheld.css',
'http://www.opera.com/css/screen.css',
'http://www.opera.com/css/print.css',
'http://www.opera.com/css/pages/home.css']
content = self.req.getContent(WebSiteUri)
cssUriListReq = self.css.getCssUriList(content, WebSiteUri)
# we need to compare ordered list.
cssUriListReq.sort()
cssUriList.sort()
self.assertListEqual(cssUriListReq, cssUriList)
Затем вfoo/core.py
import urlparse
import requests
from lxml import etree
import cssutils
class Css:
"""Grabing All CSS for one given URI"""
def getCssUriList(self, htmltext, uri):
"""Given an htmltext, get the list of linked CSS"""
tree = etree.HTML(htmltext)
sheets = tree.xpath('//link[@rel="stylesheet"]/@href')
for i, sheet in enumerate(sheets):
cssurl = urlparse.urljoin(uri, sheet)
sheets[i] = cssurl
return sheets
Прямо сейчас код зависит от онлайн-сервера. Не должно. Я хочу иметь возможность добавлять множество различных типов комбинаций таблиц стилей и тестировать протокол, а затем некоторые параметры их разбора, комбинации и т. Д.