我正在编写一个 Python 模块,它封装了某个 Web 服务 API。这一切都是 REST,因此实施起来相对简单。
然而,在单元测试方面我发现了一个问题:由于我不运行我为其创建此模块的服务,我不想对它们进行锤击,但同时,我需要检索数据来运行我的测试。我看了一下SimpleHTTPServer,这样就可以了。
我解决了部分问题,但现在,由于我似乎无法终止线程,因此在多次启动测试应用程序时会遇到“地址已在使用中”的问题。
这是一些示例代码
PORT = 8001
handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), handler)
httpd_thread = threading.Thread(target=httpd.serve_forever)
httpd_thread.daemon = True
httpd_thread.start()
api_data = urllib.urlopen("http://localhost:8001/post/index.json")
print "Data start:"
print json.load(api_data)
其中“index.json”是我制作的模拟 JSON 文件,它替代了真实的文件。程序终止后如何优雅地清理东西?
尝试使用TCPServer 的子类allow_reuse_address设置为真 http://docs.python.org/library/socketserver.html#SocketServer.BaseServer.allow_reuse_address:
import socketserver
class TestServer(socketserver.TCPServer):
allow_reuse_address = True
...
httpd = TestServer(("", PORT), handler)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)