我正在尝试为用户在访问某些 URL 之前不需要登录的项目创建功能测试。为此,我创建了一个预验证 session 来诱使网站认为测试用户已经登录。
我加载了一个带有虚拟 url 的 webdriver 实例,在 dbase 中创建了一个虚拟用户,在后端设置 session ,然后将 session cookie 添加到 web 驱动程序,如下所示:-
from django.utils.importlib import import_module
def load_dummy_url(self):
driver.get(self.live_server_url + '/404-not-found')
def create_session_store():
engine = import_module(settings.SESSION_ENGINE)
store = engine.SessionStore()
store.save()
return store
def pre_create_login():
user = get_user_model().objeects.create_user(email='user@testmail.com', first_name='user1', password='pass1')
session_store = create_session_store()
session_store[SESSION_KEY] = user.pk
session_store.save()
return session_store.session_key
def add_cookie_to_browser():
driver.add_cookie(dict(name=settings.SESSION_COOKIE_NAME, value= pre_create_login()))
但是,加载另一个需要用户身份验证的 url 仍会重定向到登录页面,因为请求包含 AnonymousUser,因为测试站点认为用户未登录。
这里有什么地方做错了吗?
注意:上面的代码片段没有遵循良好的编码模式。它只是精确代码的简单复制品。
请您参考如下方法:
我在对经过身份验证的请求进行 Selenium 测试时遇到了同样的问题。 解决方法是:
创建一个新的自定义 url,如/selenium/user_login/并编写一个 View ,使用户登录。现在在每个 selenium 测试用例中调用此 url 并重定向到您要测试的 url。
