使用 codeception 和 selenium 对 laravel 应用程序进行验收测试时更改 env

Posted

技术标签:

【中文标题】使用 codeception 和 selenium 对 laravel 应用程序进行验收测试时更改 env【英文标题】:change env when acceptance testing laravel app with codeception and selenium 【发布时间】:2014-11-26 02:15:33 【问题描述】:

我正在尝试使用 codeception 和 selenium 模块为 laravel 4 编写一些验收测试。

我有两个问题。

第一个是我的应用正在运行 在宅基地 vagrant vm 和 selenium 服务器上运行 主机。那么有没有一种简单的方法可以在 vm 中运行 selenium 服务器并在主机上调用浏览器?

我的第二个问题是,当测试实际使用实时数据库时,因为 laravel 应用程序的环境没有设置为测试。显然我想让它使用测试数据库并在每次测试后重置它。

codeception.yaml

actor: Tester
paths:
    tests: app/tests
    log: app/tests/_output
    data: app/tests/_data
    helpers: app/tests/_support
settings:
    bootstrap: _bootstrap.php
    colors: true
    memory_limit: 1024M
    suite_class: \PHPUnit_Framework_TestSuite
modules:
    config:
        Db:
            dsn: 'sqlite:app/tests/_data/testdb.sqlite'
            user: ''
            password: ''
            dump: app/tests/_data/dump.sql

acceptance.yaml

class_name: AcceptanceTester
modules:
    enabled: [WebDriver,AcceptanceHelper]
    config:
        WebDriver:
            url: 'http://app.dev'
            browser: firefox
            window_size: 1920x1024
            wait: 10 

【问题讨论】:

【参考方案1】:

在 vm 中运行验收测试的简单方法是在 ghostdriver 模式下使用 phantom js。这里有教程:

https://gist.github.com/antonioribeiro/96ce9675e5660c317bcc

当测试失败时,你仍然可以看到截图和渲染的 html,所以你看不到浏览器并不是什么大问题。

对于您的第二个问题,我更喜欢使用自己的数据库进行单独的测试安装。这样,您在 dev 中所做的更改不会改变您的测试结果,而且它更接近于生产。

如果您想使用相同的安装,您可以使用 .env 文件自动切换设置。

http://laravel.com/docs/4.2/configuration#protecting-sensitive-configuration

你的配置应该是这样的:

'host'     => $_ENV['DB_HOST'],
'database' => $_ENV['DB_NAME'],
'username' => $_ENV['DB_USERNAME'],
'password' => $_ENV['DB_PASSWORD'],

你的 .env.php 看起来像:

return array( 'DB_HOST' => 'hostname', 'DB_NAME' => '' ..etc

您可以使用像 robo 这样的任务运行器来自动更新您的 .env 文件并运行代码接收测试。

http://robo.li/

$this->replaceInFile('.env.php')
    ->from('production_db_name')
    ->to('test_db_name')
     ->run();

$this->taskCodecept()->suite('acceptance')->run();

.env 文件在 Laravel 5 中发生了变化,但这个工作流程仍然可以进行最少的修改。

http://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables

【讨论】:

以上是关于使用 codeception 和 selenium 对 laravel 应用程序进行验收测试时更改 env的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 codeception/selenium 在断言失败时关闭浏览器窗口?

尝试使用 Internet Explorer 11 / IE11 运行 Codeception / Selenium 时出现 PHPUnit_Framework_Exception

尝试使用Internet Explorer 11 / IE11运行Codeception / Selenium时的PHPUnit_Framework_Exception

Codeception 无法点击它之前看到的元素

Codeception:生成验收测试在并行虚拟机上引发异常

PhantomJS 无法访问自签名 HTTPS 页面 Codeception