单元测试unnittest——tornadoAsyncHTTPTestCase
最近有⼀个单元测试的任务,要对tornado实现的服务进⾏测试,初始考虑Test_Main类继承unittest.TestCase,然后使⽤多进程起服务,再在服务⾥⾯测试
import unittest
from multiprocessing import Processdef func():
#起服务的函数
class TestMain(unittest.TestCase): def test_server(self):
p_server = Process(target=func,args=()) p_server.start() time.sleep(10) sun = p_server.pid
data = json.dumps(data)
r = requests.post(url,data=data)
self.assertEqual(r.json(), \"hello world!\")if __name__ == '__main__': unittest.main()
后来发现这样写有问题,nosetests⽆法对多进程给出测试结果。
经过查阅资料,发现tornado⾃带有单元测试的⽅法,并且这个⽅法是继承unittest.TestCase的,所以问题迎刃⽽解。参考⽂档: ;具体代码如下:
from tornado.testing import AsyncHTTPTestCaseimport unittest
class TestTornado(AsyncHTTPTestCase): def get_app(self):
app = MyApplication([
(r'/test', BaseHandler(需要启的服务)), ])
return app
def test_BaseHandler(self): # 测试正常输⼊⽂本
data = json.dumps({\"text\": \"\
response = self.fetch(\"/test\ self.assertEqual(eval(response.body)[\"data\"], \"test\") self.assertEqual(eval(response.body)[\"code\"], 200)if __name__ == '__main__': unittest.main()
附上nosetest的脚本写法
⾸先要安装 pip install nose-cov脚本:#!/bin/bash
nosetests --with-cov --cov-report term --cov-report html --cov . test/
这样运⾏脚本就把test⽬录下所有的单元测试⽂件全部测试⼀遍,⽣成测试结果在htmlcov⽬录下,从htmlcov/index.html进⼊