2016-06-13 212 views
1

我試圖從pytest-dbfixtures中使用mysql。我有一個例子測試文件從文件:pytest mysql數據庫夾具:無法創建數據庫

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' fixture? –

+1

更新了文章 –

+0

只是爲了澄清,同樣的例子在Ubuntu上運行在流浪機器上。 –

回答

0

我的設置一些信息:

  • 的Mac OS X 10.11.5
  • 的Python 3.4.4
  • MySQL社區版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二進制文件(無需使用符號連接)。 當你安裝MySQL時,你應該已經獲得了root用戶的密碼(也就是說,你需要將它重置爲新的)。

您可能需要考慮爲MySQL創建一個新用戶並使用其憑據(也許查看您在註釋中引用的Ubuntu服務器上的配置)。

如果你堅持使用MySQL root用戶,這可能會有所幫助。我去通過終端檢查到mysql,顯然試圖在root MySQL用戶做SELECT CURRENT_USER()要求如下:

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

使用ALTERhttp://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命令。雖然可能只是我。

讓我知道你有多遠。