cakephp + phpunit + gitlab 持续集成
Posted
技术标签:
【中文标题】cakephp + phpunit + gitlab 持续集成【英文标题】:cakephp + phpunit + gitlab continuous integration 【发布时间】:2020-01-29 19:07:19 【问题描述】:我正在为我在 cakephp + phpunit + gitlab-ci 中的测试寻求帮助。
我这样定义我的测试/夹具:public $import = ['model' => 'MyModel'];
以避免必须重新定义夹具中的表架构,并且代码不同步/错误。
我知道它的作用是寻找 live db 并使用该信息在 test db 中生成表,但是如果没有 live db 怎么办?
我正在尝试在 gitlab / 持续集成环境中自动化我的测试,它们为您提供了一个 mysql 容器带有单个数据库 来运行您的测试。如果我有一个单独的数据库,我将无法同时拥有主连接和测试数据库,对吧?
我正在考虑创建一个 create-db-for-tests.sql 并导入该脚本但我知道使用夹具运行测试会删除该表,因此我需要在每次测试中一次又一次地创建它.
我无法使用 gitlab mysql 服务并在测试容器中安装 mysql 以拥有 2 个数据库,就像在 dev 中一样,但我也需要用一些脚本填充另一个数据库,这与定义数据库结构相同在固定装置。
我该如何解决这个问题?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:读完你的问题后,我的脑海里浮现出一些东西。
-
如果您没有实时数据库,则可能有两种可能性:
您可能有暂存数据库,或者您的应用程序没有数据库。
根据您关于如果我有单个数据库的第二个问题,我会说不。因为,您可以有两个连接。
例如
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',
);
在创建fixture 时,您将主要定义两件事:如何创建表(哪些字段是表的一部分),以及最初将哪些记录填充到表中。
我想,你可以用这个来填充你的脚本。因为这是mysql命令。但是,老实说,我以前没有尝试过。
mysql -u jenkins -pcakephp_jenkins -e 'DROP DATABASE IF EXISTS test_foge; CREATE DATABASE test_foge; CREATE TABLE users; CREATE Table posts';
最后一个是你可以在运行之前填充数据,我猜你已经知道了。
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();
作为我个人的观点,在每次构建之前删除并重新创建数据库也是一个好主意。这使您免受连锁故障的影响,其中一个损坏的构建会导致其他构建失败。
【讨论】:
以上是关于cakephp + phpunit + gitlab 持续集成的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP 3.4.2 测试 POST 的响应总是返回 NULL
模板文件“Error/error500.ctp”丢失。在 CakePHP 的单元测试期间