Python 3.x 将多个夹具传递到测试用例中

Python 3.x 将多个夹具传递到测试用例中,python-3.x,pytest,Python 3.x,Pytest,我正在将两个fixture setup\u registered\u consultor和setup\u registered\u customer传递到我的测试用例中,但最后一个参数setup\u registered\u customer未被识别。我的测试用例在这里失败了HTTP\u AUTHORIZATION='Token'+registered\u response2.json()['Token\u key'],错误是test\u userdetail\u logged\u-in\u-c

我正在将两个fixture setup\u registered\u consultor和setup\u registered\u customer传递到我的测试用例中,但最后一个参数setup\u registered\u customer未被识别。我的测试用例在这里失败了
HTTP\u AUTHORIZATION='Token'+registered\u response2.json()['Token\u key']
,错误是
test\u userdetail\u logged\u-in\u-customer\u-access\u-consulture\u-user\u-detail\u-view\u-success-KeyError:'Token\u-key'

def test_userdetail_logged_in_customer_accesses_consultant_user_detail_view_success(db, client, setup_registered_consultant, setup_registered_customer):
    registered_response = setup_registered_consultant
    registered_response2 = setup_registered_customer

    userdetail_response = client.get(path=reverse('user-detail', args=(str(registered_response.json()['id']),)),
                                      HTTP_AUTHORIZATION='Token ' + registered_response2.json()['token_key'])
    assert userdetail_response.status_code == status.HTTP_200_OK
如何通过一个测试用例传递多个装置?

编辑:

@pytest.fixture
def setup_registered_customer(db, client):
    client.post(path=reverse('auto-signup-anonymous-user'),
                   data={"device_serial": "device1", "device_brand": "Apple",
                         "device_version": "1.0", "device_country": "US"})
    response = client.post(path=reverse('register'),
                            data={"device_serial": "device1", "username": "registereduser1",
                                    "email": "registereduser1@example.com", "password": "12345678"})
    return response

@pytest.fixture
def setup_registered_consultant(db, client):
    client.post(path=reverse('auto-signup-anonymous-user'),
                   data={"device_serial": "device1", "device_brand": "Apple",
                         "device_version": "1.0", "device_country": "US"})
    response = client.post(path=reverse('register'),
                            data={"device_serial": "device1", "username": "registereduser1",
                                    "email": "registereduser1@example.com", "password": "12345678"})
    get_user_model().objects.filter(username="registereduser1").update(is_consultant=True)
    ConsultantProfile.objects.create(user=get_user_model().objects.get(username="registereduser1"))
    return response

一个测试用例应该接受参数列表上的任意数量的fixture,并且顺序无关紧要。在这方面,您的代码看起来完全正确

KeyError:“token\u key”
表明变量
registered\u response2
可能有问题,即JSON显然不包含“token\u key”键,因此最终这将意味着夹具本身有问题,而不是它传递给测试用例函数的方式有问题。

正如问题注释中所讨论的,这里的情况确实如此:由于后端大小冲突,服务器返回了意外响应,这是由fixture调用服务器的方式引起的。

您能显示
设置\u注册\u客户的代码吗?我很确定,您可以传递任意数量的fixture,就像在代码中一样。我想,
KeyError
意味着夹具本身出现了一些问题,响应没有包含预期的键。请再次参阅文章。如果我将setup\u registered\u consultant替换为setup\u registered\u customer,则会不断出现此错误。最后一个参数总是失败,不管它是顾问还是客户……如果我切换最后两个参数,这部分将失败args=(str(registered_response.json()['id'])我认为最后一个参数总是失败,因为您将其分配给
registered\u response2
,而
registered\u response2
正是您试图从中提取
token\u key
的内容,显然响应中不存在该内容。也许可以尝试在测试顶部或夹具内部打印整个响应以进行验证?已修复。我的安装注册顾问用户名/电子邮件与安装注册顾问客户用户名和电子邮件冲突。我只需给安装注册顾问一个不同的用户名/电子邮件。您可以将其写在答案部分,我将选择您的答案作为最佳答案。谢谢