Как изменить сеанс в тестовой среде Django

Мой сайт позволяет людям вносить контент в отсутствие входа в систему путем создания Пользователя на основе текущего сеанса_key

Я хотел бы настроить тест для моего представления, но кажется, что изменить request.session невозможно:

Я бы хотел сделать это:

from django.contrib.sessions.models import Session s = Session() s.expire_date = '2010-12-05' s.session_key = 'my_session_key' s.save() self.client.session = s response = self.client.get('/myview/') 

Но я получаю сообщение об ошибке:

 AttributeError: can't set attribute 

Мысли о том, как изменить сеанс клиента перед получением запросов? Я видел это, и он, похоже, не работает

5 Solutions collect form web for “Как изменить сеанс в тестовой среде Django”

Вот как я это сделал (вдохновленный решением в http://blog.mediaonfire.com/?p=36 ).

 from django.test import TestCase from django.conf import settings from django.utils.importlib import import_module class SessionTestCase(TestCase): def setUp(self): # http://code.djangoproject.com/ticket/10899 settings.SESSION_ENGINE = 'django.contrib.sessions.backends.file' engine = import_module(settings.SESSION_ENGINE) store = engine.SessionStore() store.save() self.session = store self.client.cookies[settings.SESSION_COOKIE_NAME] = store.session_key 

После этого вы можете создать свои тесты как:

 class BlahTestCase(SessionTestCase): def test_blah_with_session(self): session = self.session session['operator'] = 'Jimmy' session.save() 

и т.д…

Клиентский объект среды тестирования django позволяет коснуться сессии. Посмотрите http://docs.djangoproject.com/ru/dev/topics/testing/?from=olddocs#django.test.client.Client.session для получения более подробной информации.

Будьте осторожны: To modify the session and then save it, it must be stored in a variable first (because a new SessionStore is created every time this property is accessed)

Я думаю, что что-то вроде этого ниже должно работать

 s = self.client.session s["expire_date"] = '2010-12-05' s["session_key"] = 'my_session_key' s.save() response = self.client.get('/myview/') 

Как уже упоминал Эндрю Остин, это не работает из-за этой ошибки: https://code.djangoproject.com/ticket/11475

Что вы можете сделать, так это:

 from django.test import TestCase from django.test.client import Client from django.contrib.auth.models import User class SessionTestCase(TestCase): def setUp(self): self.client = Client() User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword') self.client.login(username='john', password='johnpassword') def test_something_with_sessions(self): session = self.client.session session['key'] = 'value' session.save() 

После создания и входа в систему пользователя с User.objects.create_user () и self.client.login (), как и в приведенном выше коде, сеансы должны работать.

Вы можете создать настраиваемое представление, в которое вставляются фиктивные данные, такие как сеанс.

Представление с соответствующим url: / dummy /:

 def dummy(request): # dummy init data request.session['expiry_date'] = '2010-12-05' return HttpResponse('Dummy data has been set successfully') 

Затем в тестовом сценарии просто вызовите self.client.get('/dummy/')

Я также использую этот манекен для инициализации фиктивных данных в сеансе при проверке вручную.

Вы можете изменить сеанс с помощью промежуточного программного обеспечения .

  • Создание образа в памяти для тестирования Django
  • Как использовать различные механизмы баз данных в Django для тестирования и производства
  • Разница между django-webtest и селеном
  • Python mock, django и запросы
  • Загрузка SQL-дампа перед запуском тестов Django
  • Как написать тесты для форм в Django?
  • Написание тестовых примеров для моделей django
  • Как сохранить тестовые данные после завершения тестов Django?
  •  
    Interesting Posts for Van-Lav

    Может ли BeautifulSoup анализировать xml, когда определенный тег является самозакрывающимся и не в то же время

    Библиотека PIL-PIL. Есть ли способ выбрать, какой экран ImageGrab.grab () захватывает в настройках с несколькими мониторами?

    SQLite python не обновляет таблицу

    Большой массив на диске для numpy

    Что такое «fread» от Matlab в Python?

    networkx draw_networkx_edges capstyle

    Получить код OAuth в URL-адресе перенаправления, предоставленном как ответ POST

    Как построить словарь из двух словарей в python?

    Динамические искатели и методы, отсутствующие в Python

    Каковы значения веса для использования в numpy polyfit и какова ошибка пригонки

    Определите высоту кофе в кастрюле с помощью изображения Python

    DLL-файл, загруженный дважды с перенаправлением DLL через манифест

    Как удалить круглые скобки и все данные с помощью Pandas / Python?

    Python strip () не работает внутри функции

    как удалить весь столбец, если определенная строка имеет повторяющиеся значения в фрейме данных в python

    Python - лучший язык программирования в мире.