django 自动化测试的故障排查

【问题背景】

  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'...
原文地址:https://www.cnblogs.com/JiangLe/p/9537257.html