2016-06-13 4 views
1

Я пытаюсь использовать mysql из pytest-dbfixtures. У меня есть тестовый файл с примером из документации:pytest mysql db fixture: не удается создать базу данных

def test_using_mysql(mysql): 
    mysql.query("SELECT CURRENT_USER()") 

и когда я запускаю его через $ py.test test_example.py, я получаю эту ошибку:

E    subprocess.CalledProcessError: Command '/usr/bin/mysql_install_db --user=Fluffy --datadir=/tmp/mysqldata_3307' returned non-zero exit status 127 

/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py:711: CalledProcessError 
    ------------------- Captured stderr setup ------ 
    [ERROR] /bin/sh: /usr/bin/mysql_install_db: No such file or directory 

Я использую Python 3.5 и OS X 10.11.5. MySQL 5.7.12 устанавливается через homebrew и работает хорошо.

homebrew не создает symlimks до /usr/bin, только до /usr/local/bin. Если я создаю ссылку вручную:

$ sudo ln -s /usr/local/Cellar/mysql/5.7.12/bin/mysql_install_db /usr/bin/mysql_install_db 

Я получаю следующее сообщение об ошибке от pytest:

E    subprocess.CalledProcessError: Command '/usr/bin/mysql_install_db --user=Fluffy --datadir=/tmp/mysqldata_3307' returned non-zero exit status 1 

/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py:711: CalledProcessError 
------------------------- Captured stderr setup ---------------------- 
[ERROR] Can't locate the language directory. 

Кроме того, скрипт mysql_install_db является устаревшим: http://dev.mysql.com/doc/refman/5.7/en/mysql-install-db.html

Как использовать mysql приспособление из pytest dbfixtures ? Есть ли способ использовать его в OS X с MySQL 5.7?

+0

Не могли бы вы показать небольшой пример того, как вы ссылаетесь на прибор 'mysql'? –

+1

обновил сообщение –

+0

Как раз пояснить, тот же пример работает на бродячей машине с Ubuntu. –

ответ

0

Некоторая информация о моей Установка:

  • Mac OS X 10.11.5
  • Python 3.4.4
  • MySQL Community Edition 5.7.13

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

пакеты, необходимые:

pytest==2.9.2 
pytest-dbfixtures==0.13.1 
mysqlclient==1.3.7 

я не мог установить mysqlclient первоначально (получил: "OSError: mysql_config not found"), потому что mysql не был в пути. Добавлено /usr/local/mysql/bin на пути в .bash_profile

Теперь вам нужно настроить pytest-dbfixtures использовать mysql соединение. Для меня файл .conf находился здесь (я использую virtualenv):

~/.virtualenvs/py3.4-PySA/lib/python3.4/site-packages/pytest_dbfixtures/conf/dbfixtures.conf

Для вас, конфигурационный файл должен быть где-то в Python 3.5 каталог установки (перемещаясь туда и сделать find . -name dbfixtures.conf).

Там есть раздел в pytest_dbfixtures/conf/dbfixtures.conf, чтобы установить mysql пользователя, пароль, а также путь к местным бинарникам MySQL (нет необходимости использовать символические ссылки). Вы должны были получить пароль для пользователя root, когда вы установили MySQL (это значит, вам нужно сбросить его на что-то новое).

Возможно, вам захочется создать нового пользователя для MySQL и использовать его учетные данные вместо этого (возможно, посмотрите на конфигурацию на сервере Ubuntu, о котором вы указали в комментариях).

Если вы настаиваете на использовании пользователя MySQL root, это может помочь. Я пошел, чтобы проверить в mysql через терминал и, видимо, пытается сделать SELECT CURRENT_USER() на пользователя root MySQL требуется следующее:

mysql> SELECT CURRENT_USER(); 
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 

Использование ALTER: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Затем вернитесь к dbfixtures.conf и обновить пароль соответственно.

К сожалению, я застрять здесь:

def stop_server_and_remove_directory(): 
     shutdown_server = (
      mysql_admin_exec, 
      '--socket=%s' % unixsocket, 
      '--user=%s' % config.mysql.user, 
      'shutdown' 
     ) 
>  subprocess.check_output(' '.join(shutdown_server), shell=True) 

~/.virtualenvs/py3.4-PySA/lib/python3.4/site-packages/pytest_dbfixtures/factories/mysql.py:143: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

... 
>    raise CalledProcessError(retcode, process.args, output=output) 
E    subprocess.CalledProcessError: Command '/usr/local/mysql/bin/mysqladmin --socket=/tmp/mysql.3307.sock --user=root shutdown' returned non-zero exit status 1 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/subprocess.py:620: CalledProcessError 

Выполнение же mysqladmin команду с помощью терминала приводит к сбою AUTH. Может быть, только я.

Дайте мне знать, как далеко вы доберетесь.

Смежные вопросы