如何在给定步骤中使用 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 方系统进行身份验证。
所以没有单一的方法;我按照你的做法,为每个系统写了一段逻辑。
我在 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 方系统进行身份验证。
所以没有单一的方法;我按照你的做法,为每个系统写了一段逻辑。