代码之家  ›  专栏  ›  技术社区  ›  Hank Gay

运行wsgi应用程序功能测试的最佳方法?

  •  2
  • Hank Gay  · 技术社区  · 15 年前

    我正在编写一对简单的wsgi应用程序来了解标准,我想测试一下我的应用程序是否按预期工作。现在我试图找出启动和停止托管这些应用程序的服务器的最佳方法。

    我的第一个想法是启动 SimpleServer wsgiref setUp 方法并在 tearDown 方法。自从 serve_forever 布洛克,我是单独做的 Thread . 不幸的是,如果我用 永远为你服务 要启动服务器,它所在的次线程永远不会死 threading 不会暴露出杀死一个 螺纹 .

    现在我在考虑用这样的东西作为我的 run 服务器中的实现 螺纹 :

    while keep_going:
        httpd.handle_request()
    

    哪里 keep_going 是我设置为 True 在我的 设置 并设置为 False 在我的 拆卸 .

    有更好的办法吗?我希望只使用标准库来编写这些应用程序和测试,这样可以更好地理解当我使用lib/framework时抽象出来的东西,但这看起来是一个非常大的麻烦。

    谢谢。

    2 回复  |  直到 11 年前
        1
  •  3
  •   Will McCutchen    15 年前

    测试wsgi应用程序的最佳方法是 WebTest ,这样就无需为应用程序生成测试服务器。相反,它允许您在 TestApp 对象:

    >>> from webtest import TestApp
    >>> from myapp import my_wsgi_app
    >>> app = TestApp(my_wsgi_app)
    >>> res = app.get('/')
    >>> res.status
    '200 OK'
    >>> res.status_int
    200
    >>> params = {'email': 'foo@example.com', 'password': 'foo', }
    >>> res = app.post('/login/', params)
    >>> res.status_int
    302
    

    我通常有一个基本测试类,它将添加 self.app 属性,该属性指向 测试应用程序 我正在测试的wsgi应用程序的实例。所以我的测试方法看起来像:

    def test_index_page(self):
        res = self.app.get('/')
        self.failUnlessEqual(res.status_int, 200)
    
        2
  •  1
  •   ars    15 年前

    我不认为 SimpleServer 曾经打算在一个线程中运行。你最好开始 简单者 在单独的过程中,例如使用 subprocess stdlib中的模块。然后,您可以在 setUp tearDown 方法.

    推荐文章