用于zope.testrunner的Tornado测试层
tornado_testing的Python项目详细描述
这是一个简单的测试层,可用于测试Tornado Web应用程序 使用zope testrunner。
首先,让我们创建一个简单的示例应用程序:
>>> from tornado.web import Application, RequestHandler >>> class HelloWorldHandler(RequestHandler): ... def get(self): ... return self.write('Hello World')
导入层:
>>> from tornado_testing.layer import TornadoLayer
使用前面创建的示例应用程序创建层:
>>> my_app = Application(handlers=[(r'/', HelloWorldHandler)]) >>> tornado_layer = TornadoLayer(my_app, port=None) >>> type(tornado_layer.port) <class 'int'>
注意
如果端口为none,则将使用下一个空闲端口。
设置图层:
>>> tornado_layer.setUp()
现在该层正在运行,因此Tornado将满足以下请求:
>>> from urllib.request import urlopen >>> url = 'http://localhost:{}/'.format(tornado_layer.port) >>> f = urlopen(url) >>> f.read() b'Hello World' >>> f.close() >>> tornado_layer.tearDown()
补丁
testlayer支持可用于模拟 在龙卷风应用程序中使用。
下面是使用os模块的tornado应用程序的示例 listdir方法:
>>> import json >>> class ListDirHandler(RequestHandler): ... def get(self): ... import os ... return self.write(json.dumps(os.listdir('.'))) >>> my_app = Application(handlers=[(r'/', ListDirHandler)], debug=True)
注意
通常导入也在模块级的方法之外工作。但是自从 这个示例是使用doctest执行的,它必须放在方法中 否则补丁就不能用了。
现在定义假listdir方法:
>>> def fake_listdir(path): ... return ['fake_file']
创建猴子补丁:
>>> from unittest.mock import patch >>> listdir_patch = patch('os.listdir', fake_listdir)
使用修补程序创建测试层:
>>> tornado_layer = TornadoLayer(my_app, port=None, patches=[listdir_patch]) >>> tornado_layer.setUp() >>> url = 'http://localhost:{}/'.format(tornado_layer.port) >>> f = urlopen(url) >>> f.read() b'["fake_file"]' >>> f.close() >>> tornado_layer.tearDown()