Chr*_*ris 5 python django unit-testing
我正在针对多线程应用程序运行Django单元测试.在单元测试完成时,线程通常没有终止,因此无法删除测试数据库.当我下次运行测试时,我收到消息:
Type 'yes' if you would like to try deleting the test database 'test_appname', or 'no' to cancel`
Run Code Online (Sandbox Code Playgroud)
该选项是我想要的功能,但我该如何使用它?我找不到任何例子或线索.我在PyCharm IDE中工作,这是非常可配置的.我只想每次都默默地删除测试数据库.create_test_db
autoclobber
我正在测试Transaction TestCase
类,setup_test_environment()
然后运行Client().post(reverse(etc ..))..
Dr *_*tan 11
在Pycharm django测试中,您可以启用选项输入并输入 --noinput
看下面的截图
如果您使用 PyCharm 并希望使用绿色箭头运行单个测试,但不断收到此错误,则可以修改默认的 django 测试配置模板,这样您就不必继续--noinput
在每个测试上设置选项。
我的答案是创建一个像这样的脚本:
export PGPASSWORD=the_password
if [[ `psql -h 127.0.0.1 -d postgres -U username -p 5432 -tAc "SELECT 1 FROM pg_database WHERE datname='test_djangoprojectname'"` == "1" ]]
then
psql -h 127.0.0.1 -d postgres -U username -p 5432 -a -w -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'test_djangoprojectname' AND pid <> pg_backend_pid();"
psql -h 127.0.0.1 -d postgres -U username -p 5432 -a -w -c "DROP DATABASE test_djangoprojectname;"
fi
Run Code Online (Sandbox Code Playgroud)
-d
设置是数据库名称 - 它可以是您的用户有权访问的任何数据库,除了您要删除的数据库。postgres
。-p
设置是数据库所在的端口 -5432
是默认设置。另存为(例如)del_test_db.sh
(Windows 用户见下文),然后
chmod +x del_test_db.sh
Run Code Online (Sandbox Code Playgroud)
然后在 PyCharm 中:
del_test_db.sh
,为命令命名(例如“del test db”),然后单击“确定”。然后脚本在每次运行之前强制删除测试数据库。
这适用于 Mac OS X 和 Ubuntu 等。对于 Windows,过程是相同的,除了使用而不是export
使用SET
,将命令保存为.bat
文件而不是.sh
,并且您不需要chmod +x
,并对 IF 语句使用以下语法批处理文件:
if 'command' == '1' (
...
)
Run Code Online (Sandbox Code Playgroud)
抱歉,我无法检查这一点,因为我没有 Windows 计算机。
感谢这个答案的代码检查数据库是否存在。