Python:如何对自定义HTTP请求处理程序进行单元测试?

jakevdp

我有一个自定义HTTP请求处理程序,可以将其简化为以下形式:

# Python 3:
from http import server

class MyHandler(server.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        # Here's where all the complicated logic is done to generate HTML.
        # For clarity here, replace with a simple stand-in:
        html = "<html><p>hello world</p></html>"

        self.wfile.write(html.encode())

我想对这个处理程序进行单元测试(即确保我的do_GET执行没有异常),而无需实际启动Web服务器。有什么轻巧的方法可以模拟,SimpleHTTPServer以便我可以测试此代码?

jakevdp

这是我想出的模拟服务器的一种方法。请注意,这应该与Python 2和python 3兼容。唯一的问题是我找不到访问GET请求结果的方法,但至少测试会捕获遇到的任何异常!

try:
    # Python 2.x
    import BaseHTTPServer as server
    from StringIO import StringIO as IO
except ImportError:
    # Python 3.x
    from http import server
    from io import BytesIO as IO


class MyHandler(server.BaseHTTPRequestHandler):
    """Custom handler to be tested"""
    def do_GET(self):
        # print just to confirm that this method is being called
        print("executing do_GET") # just to confirm...

        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        # Here's where all the complicated logic is done to generate HTML.
        # For clarity here, replace with a simple stand-in:
        html = "<html><p>hello world</p></html>"

        self.wfile.write(html.encode())


def test_handler():
    """Test the custom HTTP request handler by mocking a server"""
    class MockRequest(object):
        def makefile(self, *args, **kwargs):
            return IO(b"GET /")

    class MockServer(object):
        def __init__(self, ip_port, Handler):
            handler = Handler(MockRequest(), ip_port, self)

    # The GET request will be sent here
    # and any exceptions will be propagated through.
    server = MockServer(('0.0.0.0', 8888), MyHandler)


test_handler()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对委托处理程序进行单元测试

如何对自定义Wicket组件进行单元测试

Golang单元测试HTTP处理程序

使用自定义ServeHTTP实现的HTTP处理程序的golang单元测试

重置golang中的http处理程序以进行单元测试

如何对Google App Engine Go HTTP处理程序进行单元测试?

如何对Spring Security @PreAuthorize自定义表达式进行单元测试

如何对自定义的Jackson JsonSerializer进行单元测试?

如何对Eclipse命令处理程序进行单元测试?

Angular2如何对自定义验证器指令进行单元测试?

如何对HTTP请求Android进行单元测试

对自定义Web API AuthorizeAttribute进行单元测试

单元测试自定义UITableViewCell?

PHPUnit Laravel:如何对自定义异常处理程序进行单元测试?

如何对自定义JsonConverter进行单元测试

单元测试自定义MessageHandler

在进行单元测试时如何调用React组件的自定义方法。我正在使用打字稿

如何对需要HTTP请求的功能进行单元测试?

对ngx形式的自定义模板进行单元测试

如何对自定义上下文管理器进行单元测试?

如何使用Java对自定义日期反序列化器进行单元测试

单元测试自定义异常

如何使用Jasmine(Angular JS)对自定义装饰器进行单元测试

如何在Swift中对该自定义UITextField进行单元测试?

如何对作为跟踪源对象包装器的自定义记录器进行单元测试

单元测试自定义AuthorizationFilterAttribute

自定义油门单元测试

使用 Moq 进行单元测试时如何绕过(自定义)MessageBoxes?

单元测试自定义 InputFormatter