1. 程式人生 > >django 自動化測試的故障排查

django 自動化測試的故障排查

分析 配置 ant reat now() code .py eating destroy

【問題背景】

  django使用mysql做為後臺數據庫、在使用django的自動化測試命令test時報如下錯誤

python3 manage.py test polls
Creating test database for alias default...
Got an error creating the test database: (1044, "Access denied for user ‘appuser‘@‘127.0.0.1‘ to database ‘test_tempdb‘")

  報錯非常明顯了appuser@‘127.0.0.1‘這個用戶沒根據

【收集信息與問題分析】

  1、django的數據庫配置信息如下

#以下是使用MySQL的配置
DATABASES = {
    default:{
        ENGINE: django.db.backends.mysql, # 後臺數據庫的類型
        HOST: 127.0.0.1,                  # 後臺數據庫所在主機的ip我這裏用本機
        PORT: 3306,                         # 後臺數據庫所監聽的端口
        USER: appuser,                    # 連接數據庫的用戶名
PASSWORD: 123456, # 連接數據庫的密碼 NAME: tempdb, # 數據庫中的schema名字 } }

  從這裏可以看出來test_tempdb並不是真正的後臺數據庫、它是一個在測試時臨時用的數據庫、那麽問題就解決了我們要給appuser一個相對比較大的權限

  就可以了,在這裏我暴力一點直接給它一個all權限

【解決方案】

  給appuser賦權

grant all on *.* to appuser@127.0.0.1;

【驗證】

python3 manage.py test polls
Creating test database for alias default...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: test_was_published_recently_with_future_question (polls.tests.QuestionModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/jianglexing/Desktop/mysite/polls/tests.py", line 17, in test_was_published_recently_with_future_question
    time = datetime.now() + datetime.timedelta(days=30)
AttributeError: module datetime has no attribute now

----------------------------------------------------------------------
Ran 1 test in 0.004s

FAILED (errors=1)
Destroying test database for alias default...

django 自動化測試的故障排查