mysql - cakephp + phpunit + gitlab 持续集成

标签 mysql cakephp phpunit gitlab gitlab-ci

我正在为我在 cakephp + phpunit + gitlab-ci 中的测试寻求帮助。

我这样定义了我的测试/夹具:public $import = ['model' => 'MyModel']; 以避免必须重新定义夹具中的表模式,并且没有同步/错误代码。

我知道它的作用是寻找实时数据库并使用该信息在测试数据库中生成表,但是如果没有实时数据库怎么办?

我正在尝试在 gitlab/持续集成环境中自动化我的测试,他们为您提供了一个 mysql 容器带有单个数据库来运行您的测试。如果我只有一个数据库,我将无法同时拥有主连接和测试数据库,对吗?

我正在考虑创建一个 create-db-for-tests.sql 并导入该脚本,但我知道使用夹具运行测试会删除该表,因此我需要在每次测试时一次又一次地创建它.

我无法使用 gitlab mysql 服务并在测试容器中安装 mysql 以拥有 2 个数据库,就像在开发中一样,但我也需要用一些脚本填充另一个数据库,这与定义数据库结构相同在固定装置中。

我该如何解决这个问题?

任何帮助将不胜感激。

最佳答案

看完你的问题后,我的脑海里浮现出一些东西。

  1. 如果您没有实时数据库,可能有两种可能性,即 您可能有暂存数据库或您的应用程序没有数据库。
  2. 根据你的第二个问题如果我只有一个数据库,我会说不。因为,你可以有两个连接。

例如

 public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'foge',
    'prefix' => '',
    'encoding' => 'utf8mb4',
);

public $test = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'test_foge',
    'prefix' => '',
    'encoding' => 'utf8mb4',
);

创建夹具时,您将主要定义两件事:如何创建表(哪些字段是表的一部分),以及哪些记录将最初填充到表中。

我想,您可以用这个来填充您的脚本。因为这是mysql命令。但是,老实说我以前没有尝试过。

mysql -u jenkins -pcakephp_jenkins -e '如果存在则删除数据库 test_foge;创建数据库 test_foge;创建表用户;创建表帖子';

最后一个是您可以在运行之前填充数据,我想您已经知道了。

class ArticleFixture extends CakeTestFixture {

    public $fields = array(
        'id' => array('type' => 'integer', 'key' => 'primary'),
        'title' => array('type' => 'string', 'length' => 255, 'null' => false),
        'body' => 'text',
        'published' => array('type' => 'integer', 'default' => '0', 'null' => false),
        'created' => 'datetime',
        'updated' => 'datetime'
    );

    public function init() {
        $this->records = array(
            array(
                'id' => 1,
                'title' => 'First Article',
                'body' => 'First Article Body',
                'published' => '1',
                'created' => date('Y-m-d H:i:s'),
                'updated' => date('Y-m-d H:i:s'),
            ),
        ); 
        parent::init();
     }
}

从我个人的角度来看,在每次构建之前删除并重新创建数据库也是个好主意。这使您免受链式故障的影响,在这种情况下,一个损坏的构建会导致其他构建失败。

关于mysql - cakephp + phpunit + gitlab 持续集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168712/

相关文章:

php - 如何使用 PhpUnit 使用 Laravel 测试服务?

php - 我应该如何开始使用 PHPUnit 作为我已经制作的一堆函数和类的测试框架?

php mysql while循环不显示第一行

php - 如何在 PHPUnit 中模拟 Doctrine PersistentCollection

c# - mysqldatareader连接已关闭

mysql - 如何在 CakePHP 中使用聚合 Mysql 函数

CakePHP 3.4 : set up an email transport only for tests

php - CakePHP 3.x : Query to exclude records in which a field can be either NULL or empty ('' )

php - 变量范围是否导致我的功能出现故障?

php - PDO 和 CodeIgniter - 安全吗?