如何在给定步骤中使用 django-behave 登录用户

How to login user during Given step using django-behave

我在 Django 项目中使用 django-behave 运行 行为测试。在我的功能文件中,我在几种情况下都有这个给定步骤:

 Given I am logged in

到目前为止我一直在做的是使用 Selenium 手动完成登录过程。但这需要很长时间,而且这不是我目前正在测试的内容。加上 behave documentation 表示:

Requests/Twill/Selenium interaction etc should mostly go into When steps

那么在这个 Given 步骤中我应该如何登录用户呢?有没有办法使用 django.test.Client.login()?我可以将会话放入固定装置吗?

好的,使用 this answer to a different question,我已经这样做了:

@given('I am logged in')
def impl(context):
    client = context.test.client
    client.login(email='test@email.com', password='password')

    cookie = client.cookies['sessionid']

    # Selenium will set cookie domain based on current page domain.
    context.browser.get(context.get_url('/404-loads-fastest/'))
    context.browser.add_cookie({
        'name': 'sessionid',
        'value': cookie.value,
        'secure': False,
        'path': '/',
    })

但还是有点间接。

我是 django-behave 的原作者。我已经开了一张票来改进如何登录的文档。

https://github.com/django-behave/django-behave/issues/65

根据所测试的 django 系统,我采用了不同的方式:在一个站点上,它使用标准的 Django 登录,在另一个站点上,登录是通过 Ajax 调用完成的,在第三个站点上,我正在使用第 3 方系统进行身份验证。

所以没有单一的方法;我按照你的做法,为每个系统写了一段逻辑。