2013-07-05 15 views
7

Moja strona Django używa backendu LDAP do uwierzytelniania w produkcji, ale nie nadaje się do testowania (niemożliwe jest tworzenie żądań od fałszywych użytkowników). Jak mogę wyłączyć ten backend, wyłącznie do testów?Zmiana zaplecza uwierzytelniania Django do testowania

Oto odnośny rozdział settings.py:

AUTHENTICATION_BACKENDS = (
#'crowd.backend.CrowdBackend', 
# 'django_auth_ldap.backend.LDAPBackend', 
'django.contrib.auth.backends.ModelBackend', 
    ) 
    AUTH_LDAP_SERVER_URI = "ldap://ldap.cablelabs.com" 
    import ldap 
    from django_auth_ldap.config import LDAPSearch 

    AUTH_LDAP_BIND_DN = "CN=CableLabs Internal,OU=cabletest,OU=Teamwork,OU=community,DC=cablelabs,DC=com" 
    AUTH_LDAP_BIND_PASSWORD = "UAq,[email protected]" 
    AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=community,dc=cablelabs,dc=com",ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)") 
    AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn","username":"sAMAccountName","email":"mail","photo":"thumbnailPhoto"} 
    AUTH_LDAP_CONNECTION_OPTIONS = { 
    ldap.OPT_REFERRALS: 0 
    } 

Odpowiedz

12

Utwórz alternatywny plik ustawień, na przykład myproj/test_settings.py i określić, że plik ustawień podczas uruchamiania testów jednostkowych.

zapisać pliku alternatywne ustawienia tak:

from myproj.settings import * 

AUTHENTICATION_BACKENDS = (
     #'your.ldap.backend', 
     'django.contrib.auth.backends.ModelBackend', 
     ) 

Oznacza to, że ustawienia dziedziczy wszystko od zwykłych ustawień, ale nadpisuje definicję AUTHENTICATION_BACKENDS, z backend LDAP zakomentowanym.

Następnie uruchomić swoje testy tak:

python manage.py test --settings=myproj.test_settings 
13

Jeśli trzeba tylko/chcesz wyłączyć backend dla niektórych badań, można również użyć override_settings dekorator. Można użyć tej dekorator od klasy przypadków testowych:

from django.test.utils import override_settings 

@override_settings(AUTHENTICATION_BACKENDS= 
        ('django.contrib.auth.backends.ModelBackend',)) 
class FooTest(TestCase): 

    def test_bar(self): 
     pass 

Ale można też selektywnie wykorzystywać go na test metoda:

from django.test.utils import override_settings 

class FooTest(TestCase): 

    @override_settings(AUTHENTICATION_BACKENDS= 
         ('django.contrib.auth.backends.ModelBackend',)) 
    def test_bar(self): 
     pass 
0

na przyszłość, inna opcja do zbadania do testowania jest zmień właściwość is_authenticated obiektu User na obiekt lambda. Na przykład:

user = User(...) 
user.is_authenticated = lambda: True 
Powiązane problemy