2013-07-05 72 views
7

我的Django站點在生產中使用LDAP後端進行身份驗證,但這不適合測試(不可能從虛擬用戶創建請求)。我如何才能禁用此後端,僅用於測試?更改用於測試的Django身份驗證後端

下面是相關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 
    } 

回答

12

創建一個可選的設置文件,例如myproj/test_settings.py,並運行單元測試時,指定設置文件。

寫的選擇設定文件是這樣的:

from myproj.settings import * 

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

也就是說,設置繼承從常規設置的一切,但覆蓋AUTHENTICATION_BACKENDS定義,註釋掉您的LDAP後端。

然後,運行測試是這樣的:

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

如果你只需要/想禁用某些測試後端,您還可以使用override_settings裝飾。您可以使用此裝飾的測試用例類:

from django.test.utils import override_settings 

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

    def test_bar(self): 
     pass 

但你也可以有選擇地使用它在一個測試方法:

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

以供將來參考,另一種選擇,看看能否檢測是將User對象的is_authenticated屬性更改爲lambda。例如:

user = User(...) 
user.is_authenticated = lambda: True