标签: codeception

Codeception和Symfony - 在测试之前运行Doctrine迁移

我有一个Symfony 4应用程序和Doctrine with Doctrine迁移.我正在介绍用于运行API测试的Codeception,并且需要在测试运行之前运行迁移.由于我使用的是Doctrine2模块,因此我不想包括DB模块,因为测试不需要它,并且需要在两个不同的位置配置测试数据库.

我目前正在使用Symfony模块,我注意到Laravel模块有一个run_database_migrations配置选项.

在测试之前处理在Symfony应用程序中运行Doctrine迁移命令的最佳方法是什么?(bin/console doctrine:migrations:migrate -n是具体的命令).


编辑我已经找到了一个解决方案,虽然它有效,但远非理想.通过使用Codeception Customization,我创建了以下扩展,基本上手动exec执行基础Symfony命令.

class DatabaseMigrationExtension extends Extension
{
    public static $events = [
        Events::SUITE_BEFORE => 'beforeSuite',
    ];

    public function beforeSuite(SuiteEvent $e)
    {
        echo(exec('bin/console doctrine:database:drop --force') . PHP_EOL);
        echo(exec('bin/console doctrine:database:create') . PHP_EOL);
        echo(exec('bin/console doctrine:migrations:migrate -n') . PHP_EOL);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑2这个目标基本上是复制类似于Codeception DB模块的功能,它允许您提供它在测试中自动使用的数据库的SQL转储,而是使用Doctrine迁移来处理数据库.- https://codeception.com/docs/modules/Db#sql-data-dump

php symfony doctrine-orm codeception

8
推荐指数
1
解决办法
1171
查看次数

PHP 启动:运行单元测试时无法加载动态库

当我尝试运行单元测试时,出现此错误

PHP警告:PHP启动:无法加载动态库'bz2'(试过:\xampp\php\ext\bz2(找不到指定的模块。),\xampp\php\ext\php_bz2.dll(指定的模块无法找到。)) 在 Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: \xampp\php\ext\curl (The specified module could not be found.), \xampp \php\ext\php_curl.dll (The specified module could not be found.)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'fileinfo' (tried: \xampp\php\ext\fileinfo (找不到指定的模块。), \xampp\php\ext\php_fileinfo.dll (The specified module could not be found.)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'gd2' (试过:\xampp\php\ext\gd2 (The specified module …

php xampp phpunit unit-testing codeception

8
推荐指数
2
解决办法
1万
查看次数

Laravel 5测试环境未在Codeception单元测试中设置

我正在使用Laravel 5和Codeception,我想在我的单元测试中使用内存中的SQLite数据库,但是,我似乎无法将我的环境设置为在Codeception中"测试".我正在使用Laravel5模块,并在我的unit.suite.yml文件中定义了以下内容:

class_name: UnitTester
modules:
    enabled: [Asserts, UnitHelper, Laravel5]
    config:
        Laravel5:
            environment_file: .env.testing
Run Code Online (Sandbox Code Playgroud)

我有一个.env文件,它定义了我的所有本地设置,然后是.env.testing文件,它定义了所有特定于测试的设置.但是,它似乎从未真正正确地设置环境.

为了测试我刚才做的环境:

$this->assertEquals('testing', \App::environment());
Run Code Online (Sandbox Code Playgroud)

我总是得到:

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'testing'
+'local'
Run Code Online (Sandbox Code Playgroud)

任何人都知道我做错了什么?

php unit-testing laravel codeception laravel-5

7
推荐指数
1
解决办法
2588
查看次数

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

我正在使用selenium运行codeception 2.我可以看到selenium打开浏览器并运行测试.然后我从代码中得到错误断言失败.

我知道有一个保存的HTML文件,但是有很多JS,所以我无法真正分析它.我需要firefox窗口保持打开状态,这样我才能看到输出并找出问题所在.

我怎样才能做到这一点?我已经使用-browserSessionReuse运行selenium了

如果它有所不同,它发生在$ I-> haveFriend(); $ friend-> does()声明.

selenium codeception

7
推荐指数
1
解决办法
1754
查看次数

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

我目前正在使用以下工具进行验收测试:

  • Codeception
  • Selenium Webdriver
  • PhantomJS (作为无头浏览器幽灵)

我的问题是访问自签名(https)页面时我的测试失败

我尝试过的:

  1. phantomjs --webdriver=5555 --ignore-ssl-errors=true --ssl-protocol=any
  2. phantomjs.cli.args: ["--ignore-ssl-errors=true"]在我的acceptance.suit.yml中添加这个功能

到目前为止,这些选项并没有给我任何运气.

这是我的acceptance.suit.yml档案

class_name: AcceptanceTester
modules:
    enabled:
        - WebDriver
    config:
        WebDriver:
            url: https://myproject.com
            browser: firefox
            capabilities:
                unexpectedAlertBehaviour: 'accept'

env:
    phantom:
        modules:
            enabled:
                - WebDriver
            config:
                WebDriver:
                    url: https://myproject.com
                    http_proxy: 192.1.1.1
                    http_proxy_port: 3000
                    browser: phantomjs
                    capabilities:
                        phantomjs.cli.args: ["--ignore-ssl-errors=true"]
Run Code Online (Sandbox Code Playgroud)

UPDATE

出现此错误 [ModuleException] WebDriver: Current url is blank, no page was opened

我不知道为什么这个错误发生了,因为我已经指出了一个页面.这是我的测试样本

public function tryToTestThis(AcceptanceTester $I)
{
    $I->wantTo('Test this function');
    $I->amOnPage('/mypage/');
    $I->see('This text');
}
Run Code Online (Sandbox Code Playgroud)

Codeception中的答案更可取.谢谢

ssl selenium phantomjs codeception

7
推荐指数
1
解决办法
688
查看次数

Symfony Codeception 功能测试:未找到环境变量

我在新的 Symfony 4 项目中使用 Codeception v2.4.1 和 PHPUnit 7.1.3。

\n\n

我创建了一个功能测试,并尝试运行它,但收到错误:\n./vendor/bin/codecept run function

\n\n
There was 1 error:\n\n---------\n1) CustomerControllerCest: Customers on index\n Test  tests/functional/Controller/Internal/CustomerControllerCest.php:customersOnIndex\n\n  [Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException] \nEnvironment variable not found: "CORS_ALLOW_ORIGIN".\n
Run Code Online (Sandbox Code Playgroud)\n\n

我有一个配置了此环境的 phpunit.xml 文件:

\n\n
 <php>\n        <ini name="error_reporting" value="-1" />\n        <env name="KERNEL_CLASS" value="App\\Kernel" />\n        <env name="APP_ENV" value="test" />\n        <env name="APP_DEBUG" value="1" />\n        <env name="APP_SECRET" value="191a5940854807ee081eaa57aff30562" />\n        <env name="SHELL_VERBOSITY" value="-1" />\n        <!-- define your env variables for the test env here -->\n        <env name="CORS_ALLOW_ORIGIN" value="^https?://localhost:?[0-9]*$" />\n    </php>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还尝试使用 .env.test,并包含相同的变量:

\n\n …

functional-testing symfony codeception symfony4

7
推荐指数
1
解决办法
4707
查看次数

Codeception多次测试,1个脚本

我想我可能会把这个概念弄错或者没有正确地考虑某些事情.我正在寻找一种连接到db的方法,然后为表的每一行运行selenium测试(在phantomjs中).测试是检查定制CMS上的损坏图像,并可应用于任何CMS.

我基本上希望通过从db加载它们的ID然后为每个ID运行单独的测试来为每个页面(特定类型)运行验收测试.

这是我到目前为止:

$I = new WebGuy($scenario);
$results = $I->getArrayFromDB('talkthrough', '`key`', array());
foreach ($results as $r) {
    $I->wantTo('Check helpfile '.$r['key'].'for broken images');
    $I->amOnPage('/talkThrough.php?id='.$r['key']);
    $I->seeAllImages();
}
Run Code Online (Sandbox Code Playgroud)

这在某种程度上起作用,因为它执行直到第一次失败(因为它运行为具有许多断言的1个测试).

如何将此运行作为单独测试?

php selenium user-acceptance-testing phantomjs codeception

6
推荐指数
1
解决办法
2730
查看次数

Codeception中的验收测试是否应该在测试环境中运行?(Laravel4 + Codeception)

我试图在我的Laravel应用程序中运行一些验收测试.虽然功能测试会触发测试环境,但验收测试却没有.它是验收测试的错误还是功能?困扰我的主要问题是,它不是使用(+ populating + cleanup)测试数据库,它只连接到dev数据库(当没有指定其他ENV时使用,例如测试,生产),这个当我多次运行它们时经常会失败.

这是我的配置:

codeception.yml

paths:
    tests: app/tests
    log: app/tests/_log
    data: app/tests/_data
    helpers: app/tests/_helpers
settings:
    bootstrap: _bootstrap.php
    suite_class: \PHPUnit_Framework_TestSuite
    colors: true
    memory_limit: 1024M
    log: true
modules:
    config:
        Db:
            dsn: 'mysql:host=localhost;dbname=testdb'
            user: 'root'
            password: 'root'
            dump: 'app/tests/_data/dump.sql'
            populate: true
            cleanup: true
Run Code Online (Sandbox Code Playgroud)

acceptance.suite.yml

class_name: WebGuy
modules:
    enabled:
        - PhpBrowser
        - WebHelper
        - Db
    config:
        PhpBrowser:
            url: 'http://localhost/'
Run Code Online (Sandbox Code Playgroud)

functional.suite.yml

class_name: TestGuy
modules:
    enabled: [Filesystem, TestHelper, Laravel4, Db]
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

acceptance-testing laravel-4 codeception

6
推荐指数
2
解决办法
3386
查看次数

Codeception AcceptanceTester :: loadSessionSnapshot未定义

我正在尝试测试项目但由于此错误而无法检查登录页面:

[RuntimeException] Call to undefined method AcceptanceTester::loadSessionSnapshot

这是我的代码:

<?php 
$I = new AcceptanceTester($scenario);
$I->wantTo('Login');
$I->amOnPage('/');
if($I->loadSessionSnapshot('loggedin')) exit();
$I->dontSee('NotFound');
//$I->dontSee('Error');
$csrf = $I->grabCookie('_token');
$I->submitForm('.form',array('login'=>array(
        'username'=>'username',
        'password'=>'*******'
    )
));
$I->saveSessionSnapshot('loggedin');
$I->see('username');
Run Code Online (Sandbox Code Playgroud)

我的配置是这样的

# Codeception Test Suite Configuration
#
# Suite for acceptance tests.
# Perform tests in browser using the WebDriver or PhpBrowser.
# If you need both WebDriver and PHPBrowser tests - create a separate suite.

class_name: AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: http://myweb.com
        - \Helper\Acceptance
Run Code Online (Sandbox Code Playgroud)

我使用命令行命令生成了它

codecept.bat generate:cept acceptance loginTest
Run Code Online (Sandbox Code Playgroud)

codeception

6
推荐指数
1
解决办法
996
查看次数

PhpStorm v2017.3.4 &amp; Codeception v2.4.0 不兼容

我正在努力使代码接收与 PhpStorm 一起工作。

我已经设置了 CLI 解释器:

在此处输入图片说明

在此处输入图片说明

我还设置了 Codeception:

在此处输入图片说明

这是 Codeception 的配置:

在此处输入图片说明

当我从 PhpStorm 运行测试时,我收到以下信息:

在左边:

在此处输入图片说明

和右边的文字:

Testing started at 00:06 ...
/Applications/MAMP/bin/php/php7.2.1/bin/php /private/var/folders/3g/xng_tnzj6797frqqk20r69mw0000gn/T/ide-codeception.php run --report -o "reporters: report: PhpStorm_Codeception_ReportPrinter" --no-ansi --no-interaction unit

Process finished with exit code 255
Run Code Online (Sandbox Code Playgroud)

但是当我concept run在终端上的项目文件夹中运行时,它工作正常,我收到了这个:

在此处输入图片说明

我究竟做错了什么?我真的在这里阅读了 PhpStorm 的手册和 youtube视频,但我无法让它工作:/

谢谢!

更新:

在进一步的调查中,我发现了以下内容:

$ /usr/bin/env php --version                                                                                                                                                                                     
PHP 7.2.1 (cli) (built: Jan 15 2018 12:20:50) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend …
Run Code Online (Sandbox Code Playgroud)

phpstorm codeception

6
推荐指数
1
解决办法
8549
查看次数