Python 模拟-django rest fbv内的请求和响应

Python 模拟-django rest fbv内的请求和响应,python,django,rest,unit-testing,Python,Django,Rest,Unit Testing,我有3名球员。 1.客户:任何移动设备 2.poink:Django服务器 3.平台:另一台服务器 机修工正在修理 1.客户端发送到poink 2.波因克到达站台 3.平台响应返回poink 4.poink响应返回到客户端 views.py tests.py output.txt 目标: 我想在这个端点上运行集成测试,但我不想拍摄真正的端点 内容如下: 问题: 这不是嘲笑我的对象。它会引发您可以从output.txt中看到的错误 解决方法: 我不知道这个集成测试的最佳实践是什么。但我对它做了

我有3名球员。 1.客户:任何移动设备 2.poink:Django服务器 3.平台:另一台服务器

机修工正在修理 1.客户端发送到poink 2.波因克到达站台 3.平台响应返回poink 4.poink响应返回到客户端

views.py tests.py output.txt

目标: 我想在这个端点上运行集成测试,但我不想拍摄真正的端点

内容如下:

问题: 这不是嘲笑我的对象。它会引发您可以从output.txt中看到的错误

解决方法: 我不知道这个集成测试的最佳实践是什么。但我对它做了更多的简化

让登录函数成为普通函数 请求是在测试环境中创建的 修补函数requests.get 这是确认代码。感谢安德鲁·巴克

def test_mobile_send_wrong_session_key(db):
    from rest_framework.test import APIRequestFactory
    factory = APIRequestFactory()
    url = reverse('auth:login')
    data = {'session_key': 'Wrong value'}
    request = factory.post(url, data)
    from poinkbackend.apps.authentications.views import login
    with patch('requests.get') as mock_get:
        # `Platform` response with 400 to `Poink`
        mock_get.return_value.ok = False
        mock_get.return_value.status_code = 400
        mock_get.return_value.text = 'Bad Request El'
        res = login(request)
    assert 406 == res.status_code
参考:

我不知道这个集成测试的最佳实践是什么。但我对它做了更多的简化

让登录函数成为普通函数 请求是在测试环境中创建的 修补函数requests.get 参考:


端点模拟正常,但正在运行的测试正在尝试在数据库中设置某些内容。这就有两种选择:

要么你也模拟数据库 或者,您可以使用将生成测试数据库的,并在测试结束时将其删除的
谢谢你提到数据库。我使用pytest。那么实际的数据库就不会被触及。
def test_mobile_send_wrong_session_key(db):
    from rest_framework.test import APIRequestFactory
    factory = APIRequestFactory()
    url = reverse('auth:login')
    data = {'session_key': 'Wrong value'}
    request = factory.post(url, data)
    from poinkbackend.apps.authentications.views import login
    with patch('requests.get') as mock_get:
        # `Platform` response with 400 to `Poink`
        mock_get.return_value.ok = False
        mock_get.return_value.status_code = 400
        mock_get.return_value.text = 'Bad Request El'
        res = login(request)
    assert 406 == res.status_code