Skip to main content
 首页 » 编程设计

python之在 django/selenium Web 测试中创建预认证 session

2025年05月04日33lidabo

我正在尝试为用户在访问某些 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。