我正在尝试使用pytest-dbfixtures中的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
不会向/usr/bin
创建symlimks,只会创建/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
如何使用pytest dbfixtures中的mysql
fixture?有没有办法在OS X上使用MySQL 5.7?
答案 0 :(得分:0)
有关我设置的一些信息:
我无法重现您遇到的问题,但我认为下面的一些信息应该会有用。
所需的套餐:
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
,显然在SELECT CURRENT_USER()
MySQL用户上尝试root
需要以下内容:
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
命令会导致身份验证失败。可能只是我。
让我知道你有多远。