Я хотел бы включить веб-сервер для всех моих тестов, связанных с HTTP. Это не должно быть очень сложным. Я бы предпочел не быть зависимым от того, чтобы быть в сети. Поэтому я мог бы проверить некоторые параметры своей программы.
- Запустите сервер
- Создайте несколько ресурсов (URI) с соответствующими типами mime, кодом ответа и т.д.
- Запустите тесты (было бы неплохо не запускать сервер для каждого теста)
- Выключите сервер.
Любые подсказки для этого кода будут полезны. Я пробовал несколько вещей с BaseHTTPServer, но пока не удалось. Команда nosetests, кажется, ждет бесконечно.
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
спасибо за любую помощь.
Обновление - 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
В настоящий момент код зависит от онлайн-сервера. Это не должно. Я хочу иметь возможность добавлять множество различных комбинаций таблиц стилей и тестировать протокол, а затем несколько вариантов их разбора, комбинаций и т.д.