flask项目可用nose进行单元测试,同时给出覆盖率结果。不用额外起http服务,还是挺方便的。
nose文档:https://nose.readthedocs.io/en/latest/usage.html
安装python包
nose3
coverage在项目根目录下起一个test目录
创建init.py
1 | """ |
- 创建test_base.py测试基类。在里面实现get、post等请求。可不断对其完善,添加各种请求信息,如form参数、json参数、header等等。cookie的信息要根据自己项目来抠。
1 | import json |
- 起测试代码。文件必须以test打头比如test_site_v2.py。
需创建一个测试类,以Test打头。
类里定义要测试的函数,以test打头。
传文件的方法:用form参数,做一个tuple。比如data['in_label_file'] = (open('./main.py', 'rb'), 'in_label_file')
取返回数据的方法:order_id = json.loads(resp.data.decode('utf8'))['order_id']
1 | from test.test_base import BaseTest |
- 在根目录下运行测试命令。
nosetests –with-coverage –cover-erase –cover-package=app.site
–cover-package为自定要测的模块。测多个模块的话用逗号隔开,比如–cover-package=app.site,app.open,app.event
- 结果
会按函数名字母顺序执行函数。
如果assert失败会停止。并打印出log。
最后给出覆盖率统计。
依次为测试文件名,代码总行数,未覆盖的总行数,覆盖率,所有未覆盖的代码位置。
比如下面的结果:测试了app/site/site_v2.py,总行数1233,未覆盖行数295,覆盖率76%。
之后是所有未覆盖的代码,比如35-36行、114-115行等等等在测试中都没跑到,修改测试代码让它能跑到即可提高覆盖率。
1 | app/site/site_v2.py 1233 295 76% 35-36, 70, 114-115, 124, 152, 155, 220-225, 232-234, 243-244, 249-260, 269, 300, 387, 449, 463, 477, 491, 505, 519, 570, 587, 597, 613, 624-758, 855, 961, 975, 989, 1003, 1017, 1031, 1045, 1174-1178, 1188, 1287-1293, 1299-1344, 1354, 1364, 1424, 1427, 1439, 1476, 1479, 1506, 1509, 1532-1534, 1547, 1656, 1700, 1714, 1804, 1850, 1853, 1859-1860, 1935-1968, 1973-1982, 2293, 2298, 2391-2395, 2415, 2495, 2574, 2593, 2612, 2619-2622, 2627-2630, 2635-2638, 2643-2729, 2740-2741 |