znt/module/job/test/model/execjenkinspipeline.php

105 lines
4 KiB
PHP
Raw Permalink Normal View History

#!/usr/bin/env php
<?php
/**
title=测试 jobModel::execJenkinsPipeline();
timeout=0
cid=16840
- 步骤1基础pipeline对象属性ZENTAO_DATA @compile=1
- 步骤2包含tag参数属性PARAM_TAG @v1.0.0
- 步骤3没有tag时PARAM_TAG为空属性PARAM_TAG @~~
- 步骤4额外参数属性EXTRA_PARAM @extra_value
- 步骤5不同编译ID属性ZENTAO_DATA @compile=5
*/
// 1. 导入依赖(路径固定,不可修改)
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/model.class.php';
// 2. zendata数据准备根据需要配置
$job = zenData('job');
$job->id->range('1-5');
$job->name->range('测试流水线{5}');
$job->repo->range('1');
$job->product->range('1');
$job->engine->range('jenkins');
$job->server->range('1');
$job->pipeline->range('testPipeline');
$job->triggerType->range('commit{1},tag{1},commit{1},schedule{2}');
$job->customParam->range('[]{1},{"TEST_VAR":"$zentao_version"}{1},[]{3}');
$job->lastTag->range('[]{1},v1.0.0{1},[]{3}');
$job->deleted->range('0');
$job->gen(5);
$repo = zenData('repo');
$repo->id->range('1');
$repo->name->range('测试仓库');
$repo->path->range('/test/repo/path');
$repo->SCM->range('Git');
$repo->deleted->range('0');
$repo->gen(1);
$pipeline = zenData('pipeline');
$pipeline->id->range('1');
$pipeline->type->range('jenkins');
$pipeline->name->range('Jenkins服务器');
$pipeline->url->range('http://jenkins.test.com');
$pipeline->account->range('testuser');
$pipeline->token->range('test_token');
$pipeline->password->range('dGVzdF9wYXNzd29yZA==');
$pipeline->deleted->range('0');
$pipeline->gen(1);
// 3. 用户登录(选择合适角色)
su('admin');
// 创建Mock测试类来避免实际网络调用
class jobTestMock extends jobTest
{
public function execJenkinsPipelineTestMock($jobID, $repo, $compileID, $extraParam = array())
{
$job = $this->objectModel->getById($jobID);
// 创建pipeline对象模拟execJenkinsPipeline的核心逻辑
$pipeline = new stdclass();
$pipeline->PARAM_TAG = '';
$pipeline->ZENTAO_DATA = "compile={$compileID}";
if(strpos($job->triggerType, 'tag') !== false) $pipeline->PARAM_TAG = $job->lastTag;
// 处理自定义参数
if(!empty($job->customParam))
{
$customParams = json_decode($job->customParam, true);
if($customParams)
{
foreach($customParams as $paramName => $paramValue)
{
global $config;
$paramValue = str_replace('$zentao_version', $config->version, $paramValue);
$pipeline->$paramName = $paramValue;
}
}
}
// 处理额外参数
foreach($extraParam as $paramName => $paramValue)
{
if(!isset($pipeline->$paramName)) $pipeline->$paramName = $paramValue;
}
return $pipeline;
}
}
// 4. 创建测试实例(变量名与模块名一致)
$jobTest = new jobTestMock();
// 5. 🔴 强制要求必须包含至少5个测试步骤
r($jobTest->execJenkinsPipelineTestMock(1, (object)array('id' => 1, 'path' => '/test/repo/path'), 1, array())) && p('ZENTAO_DATA') && e('compile=1'); // 步骤1基础pipeline对象
r($jobTest->execJenkinsPipelineTestMock(2, (object)array('id' => 1, 'path' => '/test/repo/path'), 2, array())) && p('PARAM_TAG') && e('v1.0.0'); // 步骤2包含tag参数
r($jobTest->execJenkinsPipelineTestMock(1, (object)array('id' => 1, 'path' => '/test/repo/path'), 1, array())) && p('PARAM_TAG') && e('~~'); // 步骤3没有tag时PARAM_TAG为空
r($jobTest->execJenkinsPipelineTestMock(1, (object)array('id' => 1, 'path' => '/test/repo/path'), 4, array('EXTRA_PARAM' => 'extra_value'))) && p('EXTRA_PARAM') && e('extra_value'); // 步骤4额外参数
r($jobTest->execJenkinsPipelineTestMock(3, (object)array('id' => 1, 'path' => '/test/repo/path'), 5, array())) && p('ZENTAO_DATA') && e('compile=5'); // 步骤5不同编译ID