Symfony2 在测试时使用第二个数据库
Symfony2 using second database while testing
我在我的 symfony2 应用程序中使用 behat 进行测试。现在我需要有两个数据库。首先(现在正在工作),用于正常使用,例如用户在现场做某事。第二个数据库(存在并在其上工作),用于测试目的。
我现在得到的是两个工作数据库,然后是。 Behat 使用第二个数据库,但问题是当测试进行时,站点不使用它。
我的config.yml
:
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
我的config_test.yml
:
doctrine:
dbal:
dbname: "%database_name%_test"
我的'behat.yml':
default:
suites:
default:
paths:
features: '%paths.base%/features'
bootstrap: '%paths.base%/features/bootstrap'
contexts:
- FeatureContext: ~
- EwidencjaContext:
userManager: '@fos_user.user_manager'
em: '@doctrine.orm.entity_manager'
packageManager: '@em.package_manager'
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: http://my_nginx/app_test.php
goutte: ~
selenium2:
browser: "chrome"
wd_host: http://selenium_chrome:4444/wd/hub
capabilities: { "browserName": "chrome", "browser": "chrome"}
Bex\Behat\ScreenshotExtension:
image_drivers:
local:
screenshot_directory: tests/features/images/
clear_screenshot_directory: true
如何更改数据库以进行时间测试?
这将 SQLite 用于 Behat(测试)环境,但您可以根据需要使用 MySQL。
config_test.yml
doctrine:
dbal:
connections:
default:
driver: pdo_sqlite
path: %kernel.cache_dir%/default.db
charset: UTF8
app_test.php
相关行应该是:$kernel = new AppKernel('test', true);
AppKernel.php
相关行应该是:if (in_array($this->getEnvironment(), ['dev', 'test'])) {
behat.yml
关注app_test.php
.
default:
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: http://your_app_domain.dev/app_test.php
...
...
...
虚拟主机设置:
<VirtualHost *:80>
ServerName your_app_domain.dev
DocumentRoot "/path/to/your/app/web"
<Directory "/path/to/your/app/web">
Options Indexes FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/your_app_domain.dev.error.log
CustomLog ${APACHE_LOG_DIR}/your_app_domain.dev.access.log combined
</VirtualHost>
一些资料:
结果:
如果您调用 http://your_app_domain.dev/app_dev.php
,它将使用配置中的默认数据库设置,但如果您调用 http://your_app_domain.dev/app_test.php
,则它将使用 config_test 设置。
我在我的 symfony2 应用程序中使用 behat 进行测试。现在我需要有两个数据库。首先(现在正在工作),用于正常使用,例如用户在现场做某事。第二个数据库(存在并在其上工作),用于测试目的。
我现在得到的是两个工作数据库,然后是。 Behat 使用第二个数据库,但问题是当测试进行时,站点不使用它。
我的config.yml
:
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
我的config_test.yml
:
doctrine:
dbal:
dbname: "%database_name%_test"
我的'behat.yml':
default:
suites:
default:
paths:
features: '%paths.base%/features'
bootstrap: '%paths.base%/features/bootstrap'
contexts:
- FeatureContext: ~
- EwidencjaContext:
userManager: '@fos_user.user_manager'
em: '@doctrine.orm.entity_manager'
packageManager: '@em.package_manager'
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: http://my_nginx/app_test.php
goutte: ~
selenium2:
browser: "chrome"
wd_host: http://selenium_chrome:4444/wd/hub
capabilities: { "browserName": "chrome", "browser": "chrome"}
Bex\Behat\ScreenshotExtension:
image_drivers:
local:
screenshot_directory: tests/features/images/
clear_screenshot_directory: true
如何更改数据库以进行时间测试?
这将 SQLite 用于 Behat(测试)环境,但您可以根据需要使用 MySQL。
config_test.yml
doctrine:
dbal:
connections:
default:
driver: pdo_sqlite
path: %kernel.cache_dir%/default.db
charset: UTF8
app_test.php
相关行应该是:$kernel = new AppKernel('test', true);
AppKernel.php
相关行应该是:if (in_array($this->getEnvironment(), ['dev', 'test'])) {
behat.yml
关注app_test.php
.
default:
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: http://your_app_domain.dev/app_test.php
...
...
...
虚拟主机设置:
<VirtualHost *:80>
ServerName your_app_domain.dev
DocumentRoot "/path/to/your/app/web"
<Directory "/path/to/your/app/web">
Options Indexes FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/your_app_domain.dev.error.log
CustomLog ${APACHE_LOG_DIR}/your_app_domain.dev.access.log combined
</VirtualHost>
一些资料:
结果:
如果您调用 http://your_app_domain.dev/app_dev.php
,它将使用配置中的默认数据库设置,但如果您调用 http://your_app_domain.dev/app_test.php
,则它将使用 config_test 设置。