mock 测试
ock 是辅助单元测试的模块,用于测试不方便调用的别人的接口。举个简单的例子,比如说,我们测试django 写的微信登录接口,正常流程下,我们需要前端拉起授权窗口,获取jscode或其他数据。而这一部分操作,我们在单元测试的时候没办法模拟出来。此时,我们希望假设调用微信的接口,正常返回了我们需要的数据,在这种情况下,我们便需要简单的mock 函数,假设已经该函数正常返回了我们的结果,让流程更通畅。
代码demo:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from rest_framework.test import APITestCasefrom unittest import mockclass AdviserTest(APITestCase):# mock.patch 中指定我们需要mock的函数路径(使用时的路径)@mock.patch("adviser.views.jscode2session")def test_small_app_login(self, mock_jscode2session):# 添加mock 函数的返回值,指定之后,所有的调用到该函数的地方,统一返回mock_jscode2session.return_value = {"openid": 123,"session_key":123}url = "/api/small_app_login/"data = {"jscode": "string","name": "string","avatar": "string","gender": 0}ret = self.client.post(url, data=data)self.assertEqual(ret.status_code, 200) |
单元测试 unittest
python自己带了一个单元测试框架,unittest,可以方便的实现测试环境初始化,测试用例编写(以test_开头,能自动执行 ),环境清除, 返回校验的功能,可以很方便的使用, 在这只做简单介绍。
在单元测试运行完之后,成功会打印一个".",失败会显示断言失败的地方。
代码demo
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import unittestclass # 继承unittest.TestCasedef setUp(self):# 每个测试用例执行之前做操作print('22222')def tearDown(self):# 每个测试用例执行之后做操作print('111')@classmethoddef tearDownClass(self):# 所有test运行完后运行一次print('4444444')@classmethoddef setUpClass(self):# 所有test运行前运行一次print('33333')def run(self):print("00000") # 不是以test_开头,所以不会执行def test_a_run(self):self.assertEqual(1, 1# test_开头, 所以是测试用例def test_b_run(self):self.assertEqual(2, 2# test_开头, 所以是测试用例if __name__ == '__main__':unittest.main()#运行所有的测试用例 |
django 单元测试框架
django的单元测试是基于unittest 编写,所以整个流程和unittest的完全一致。
为了方便使用django test 有一个client,可以方便我们发出请求,使用用法如下, 我们可以根据自己接口的实际情况,编写相对应的单元测试代码,检查我们的接口是否正常返回
| 1 2 3 4 5 | from django.test import Clientc = Client()response = c.post('/login/', {'username': 'john', 'password': 'smith'})print(response.status_code)response = c.get('/customer/details/') |
python manage.py test [app name]
启动的时候,会根据已有的model 去创建新的test数据库,也就是说整个测试数据库初始的时候是空的,并且整个测试run完,数据库会被摧毁。
注意:
我们希望跑单元测试的数据库是单独的一个,和线上分离,所以需要在数据库配置(settings.py 文件中) 指定
| 01 02 03 04 05 06 07 08 09 10 11 12 13 | DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': '','USER': '','HOST':'','PASSWORD': '','PORT': '','TEST': {# 配置对应的测试数据库'NAME': 'mdw_pre', }}} |
来源:博客园
作者:爱哭鼻子的小忧伤
链接:https://www.cnblogs.com/heimaguangzhou/p/11497981.html