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

Python 运行WSGI应用程序功能测试的最佳方法?,python,testing,wsgi,functional-testing,Python,Testing,Wsgi,Functional Testing,我正在编写一对简单的WSGI应用程序,以了解标准,我想测试我的应用程序是否按预期工作。现在,我正试图找出启动和停止承载这些应用程序的服务器的最佳方法 我的第一个想法是在setUp方法中启动SimpleServer,然后在tearDown方法中关闭它。由于永远服务块,我在一个单独的线程中完成了这项工作。不幸的是,如果我使用serveforever来启动服务器,那么它所在的次线程永远不会死,结果证明threading不会公开杀死线程的方法 现在,我正在考虑在服务器的线程中使用这样的运行实现: whi

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

我的第一个想法是在
setUp
方法中启动
SimpleServer
,然后在
tearDown
方法中关闭它。由于
永远服务
块,我在一个单独的
线程中完成了这项工作。不幸的是,如果我使用
serveforever
来启动服务器,那么它所在的次线程永远不会死,结果证明
threading
不会公开杀死
线程的方法

现在,我正在考虑在服务器的
线程中使用这样的
运行
实现:

while keep_going:
    httpd.handle_request()
其中
keep_going
是一个变量,我在
设置中设置为
True
,在
拆卸中设置为
False

有更好的办法吗?我希望只使用标准库编写这些应用程序和测试,以便更好地理解我在使用lib/framework时抽象出的内容,但这似乎有很多麻烦


谢谢。

我认为,
SimpleServer
从来没有打算在线程中运行。最好在单独的进程中启动
SimpleServer
,例如使用stdlib中的
子进程
模块。然后,您可以在
设置
拆卸
方法中生成/终止进程

测试WSGI应用程序的最佳方法是,这样就无需为应用程序生成测试服务器。相反,它允许您向WSGI应用程序发出HTTP请求,作为对
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应用程序的
TestApp
实例。因此,我的测试方法最终看起来像:

def test_index_page(self):
    res = self.app.get('/')
    self.failUnlessEqual(res.status_int, 200)

这是一个很好的观点,很好地回答了我最初的问题,但在进一步研究之后,我认为在WebTest上引入依赖是值得的,在这一点上。根据我的经验,在WebTest上引入依赖(至少对于测试而言)是非常值得的。祝你好运