用于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()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法启动应用程序:JNLP错误   java根据用户输入在PreparedStatement中使用setTime()或setNull()   java EJB与同步   java以object为键通过hashmap进行搜索   java中的模10^9+7   针对包含其他对象的对象的java OOP最佳实践   如何将字符串作为HTML代码从Java文件读取到JSP页面?   java我的POM怎么了?“解析表达式..检测到递归表达式循环”   用于Hbase的Mapreduce的java NoSuchMethodError   JAVAlang.SecurityException:权限拒绝:启动意图{act=安卓.Intent.action.MAIN cat=[安卓.Intent.category.LAUNCHER]   数组初始化谜语Java   通过arraylist搜索时的java句柄关联