gpt4 book ai didi

testing - tornado 的 AsyncHttpTestCase 在 self.fetch 之外不可用

转载 作者:行者123 更新时间:2023-11-28 20:31:18 27 4
gpt4 key购买 nike

我有一个 AsyncHttpTestCase我想从 self.fetch 以外的方法访问它.具体来说,我有一个 SockJS 处理程序,我希望为我的测试附加一个 sockjs 客户端。

我发现即使 self.get_url('/foo')返回一个有效的 url,该 url 不响应除 self.fetch() 之外的任何内容.给了什么?

这对 AsyncHttpTestCase 来说是不可能的吗?执行此操作的最佳模式是什么?

这是 tests.py

import urllib2

from tornado.httpclient import AsyncHTTPClient
import tornado.testing
from tornado.testing import AsyncTestCase, AsyncHTTPTestCase

from app import DebugApp

class TestDebug(AsyncHTTPTestCase):
def get_app(self):
return DebugApp()

def test_foo(self):
response = self.fetch('/foo')
print response.body
assert response.body == 'derp'

def test_foo_from_urllib(self):
response = urllib2.urlopen(self.get_url('/foo'), None, 2)
print response
assert response.body == 'derp'

def runTest(self):
pass

app.py

import tornado.httpserver
import tornado.ioloop
import tornado.web
from tornado.options import options

class FooHandler(tornado.web.RequestHandler):
def get(self):
self.write("derp")

url_patterns = [
(r"/foo", FooHandler),
]

class DebugApp(tornado.web.Application):
def __init__(self):
tornado.web.Application.__init__(self, url_patterns, debug=True, xsrf_cookies=False)

def main():
app = DebugApp()
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(6006)
tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
main()

runtest.py

#!/usr/bin/env python

import unittest
from os import path
import sys

import tornado.testing

PROJECT_PATH = path.dirname(path.abspath(__file__))
sys.path.append(PROJECT_PATH)


def all():
suite = unittest.defaultTestLoader.discover('./', 'tests.py', path.dirname(path.abspath(__file__)))
print suite
return suite

if __name__ == '__main__':
# Print a nice message so that we can differentiate between test runs
print ''
print '%s %s' % ('Debug app', '0.1.0')
print '\033[92m' + '-------------- Running Test Suite --------------' + '\033[0m'
print ''

tornado.testing.main()

最佳答案

问题是当您调用 urlopen 时 IOLoop 没有运行(它不能运行,因为 urlopen 是一个阻塞函数)。您必须为服务器响应,你只能通过非阻塞函数与它交互(或者如果你必须使用像 urlopen 这样的阻塞函数,在一个单独的线程中运行它们)。

关于testing - tornado 的 AsyncHttpTestCase 在 self.fetch 之外不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com