Python Web中使用的测试模板和变量

Python Web中使用的测试模板和变量,python,unit-testing,tornado,Python,Unit Testing,Tornado,我正在使用下面的代码测试MainHandler import tornado.httpserver import tornado.httpclient import tornado.ioloop import tornado.web import unittest class MainHandler(tornado.web.RequestHandler): def get(self): kwargs = {'name' : 'world'}

我正在使用下面的代码测试MainHandler

import tornado.httpserver 
import tornado.httpclient 
import tornado.ioloop 
import tornado.web 
import unittest 

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
        kwargs = {'name' : 'world'}
        self.render('template.html', **kwargs)

class TestTornadoWeb(unittest.TestCase): 
    http_server = None        response = None 

    def setUp(self): 
        application = tornado.web.Application([ 
                (r'/', MainHandler), 
                ])   
        self.http_server = tornado.httpserver.HTTPServer(application) 
        self.http_server.listen(8888) 

    def tearDown(self): 
        self.http_server.stop() 

    def handle_request(self, response): 
        self.response = response 
        tornado.ioloop.IOLoop.instance().stop() 

    def testHelloWorldHandler(self): 
        http_client = tornado.httpclient.AsyncHTTPClient() 
        http_client.fetch('http://localhost:8888/', self.handle_request) 
        tornado.ioloop.IOLoop.instance().start() 
        self.failIf(self.response.error) 
        self.assertEqual(self.response.body, 'Hello, world') 

if __name__ == '__main__': 
    unittest.main()
template.html:

Hello, {{name}}
我想测试模板及其变量。
如何测试名称是否正确接收?


有一些属性我可以用来做断言,或者应该用另一种方式来做?

这基本上就是您在断言中已经做过的事情。由于客户端实例正在提取渲染模板,因此无法匹配模板变量。通过在模板中使用您的KWARG,它将这些KWARG呈现到模板中-其中{{name}}是“world”(预期输出),您的模板变量已被接收并呈现

如果您需要测试特定的输出,一个相当不雅观的解决方案可能是为每个变量分配一个无意义的
标记(即
{{name}}
),然后使用
assertIn
方法(即
self.assertIn(self.response.body,'world')
)来测试正确的输出