function getMetrics(&$db, $args) { $user_id = $args->currentUserID; $tproject_id = $args->tproject_id; $linked_tcversions = array(); $metrics = array(); $tplan_mgr = new testplan($db); $show_platforms = false; // BUGID 1215 // get all tesplans accessibles for user, for $tproject_id if ($args->show_only_active) { $options = array('active' => ACTIVE); } else { $options = array('active' => TP_ALL_STATUS); } $test_plans = $_SESSION['currentUser']->getAccessibleTestPlans($db, $tproject_id, null, $options); // Get count of testcases linked to every testplan foreach ($test_plans as $key => $value) { $tplan_id = $value['id']; $filters = null; $options = array('output' => 'mapOfMap', 'steps_info' => 0); $linked_tcversions[$tplan_id] = $tplan_mgr->get_linked_tcversions($tplan_id, $filters, $options); $platformSet = $tplan_mgr->getPlatforms($tplan_id); if (is_null($platformSet)) { //Julian: replaced array(0=>'') $platformSet = array(0 => array('id' => 0)); } else { $show_platforms = true; } foreach ($platformSet as $platform_id => $platform_name) { $metrics[$tplan_id][$platform_name['id']]['tplan_name'] = $value['name']; $metrics[$tplan_id][$platform_name['id']]['platform_name'] = $platform_name['id'] == 0 ? lang_get('not_aplicable') : $platform_name['name']; $metrics[$tplan_id][$platform_name['id']]['executed'] = 0; $metrics[$tplan_id][$platform_name['id']]['active'] = 0; $metrics[$tplan_id][$platform_name['id']]['total'] = 0; $metrics[$tplan_id][$platform_name['id']]['executed_vs_active'] = -1; $metrics[$tplan_id][$platform_name['id']]['executed_vs_total'] = -1; $metrics[$tplan_id][$platform_name['id']]['active_vs_total'] = -1; } } // Get count of executed testcases foreach ($linked_tcversions as $tplan_id => $tcinfo) { if (!is_null($tcinfo)) { foreach ($tcinfo as $tcase_id => $tc) { foreach ($tc as $platform_id => $value) { if ($value['exec_id'] > 0) { $metrics[$tplan_id][$platform_id]['executed']++; } if ($value['active']) { $metrics[$tplan_id][$platform_id]['active']++; } $metrics[$tplan_id][$platform_id]['total']++; } } } } // Calculate percentages $round_precision = config_get('dashboard_precision'); foreach ($metrics as $tplan_id => $platform_metrics) { $platforms = array_keys($platform_metrics); foreach ($platforms as $platform_id) { $planMetrics =& $metrics[$tplan_id][$platform_id]; if ($planMetrics['total'] > 0) { if ($planMetrics['active'] > 0) { $planMetrics['executed_vs_active'] = $planMetrics['executed'] / $planMetrics['active']; $planMetrics['executed_vs_active'] = round($planMetrics['executed_vs_active'] * 100, $round_precision); } $planMetrics['executed_vs_total'] = $planMetrics['executed'] / $planMetrics['total']; $planMetrics['executed_vs_total'] = round($planMetrics['executed_vs_total'] * 100, $round_precision); $planMetrics['active_vs_total'] = $planMetrics['active'] / $planMetrics['total']; $planMetrics['active_vs_total'] = round($planMetrics['active_vs_total'] * 100, $round_precision); } } } return array($metrics, $show_platforms); }
$edit_img = TL_THEME_IMG_DIR . "edit_icon.png"; $mailCfg = buildMailCfg($gui); $arrOwners = getUsersForHtmlOptions($db); $fl = $tproject_mgr->tree_manager->get_children($args->tproject_id, array('testcase', 'exclude_me', 'testplan' => 'exclude_me', 'requirement_spec' => 'exclude_me')); $loop2do = count($fl); $topLevelSuites = null; $myRBB = null; for ($idx = 0; $idx < $loop2do; $idx++) { $topLevelSuites[$fl[$idx]['id']] = array('name' => $fl[$idx]['name'], 'items' => null); } if ($args->type == $statusCode['not_run']) { //BUGID 3722 $cfg = config_get('results'); $filters = array('exec_status' => $cfg['status_code']['not_run']); $options = array('output' => 'array', 'details' => 'summary'); $myRBB = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters, $options); $user_key = 'user_id'; //to be able to use only one php file to generate not run and failed/blocked report //we need to manipulate the myRBB array for not run report to match the same array //structure as on failed/blocked report: output-array vs output-mapOfMap //only manipulate the array if it has results to not pretend the array has content if (count($myRBB) > 0) { $myRBB = array(0 => $myRBB); } } else { $filters = array('exec_status' => array($args->type)); //mapOfMapPlatformBuild because we need all executions of all builds for each platform $options = array('output' => 'mapOfMapExecPlatform', 'last_execution' => true, 'only_executed' => true, 'details' => 'summary', 'execution_details' => 'add_build'); $myRBB = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters, $options); $user_key = 'tester_id'; }
// BUGID 0003123: General Test Plan Metrics - order of columns with test case exec results $code_verbose = $tplan_mgr->getStatusForReports(); $resultsCfg = config_get('results'); $labels = $resultsCfg['status_label']; foreach ($code_verbose as $status_verbose) { $l18n_label = isset($labels[$status_verbose]) ? lang_get($labels[$status_verbose]) : lang_get($status_verbose); $colDefinition[$status_verbose]['qty'] = $l18n_label; $colDefinition[$status_verbose]['percentage'] = '[%]'; } } } /* MILESTONE & PRIORITY REPORT */ $planMetrics = $tplan_mgr->getStatusTotals($args->tplan_id); $filters = null; $options = array('output' => 'map', 'only_executed' => true, 'execution_details' => 'add_build'); $execResults = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters, $options); $options = array('output' => 'mapOfArray', 'only_executed' => true, 'execution_details' => 'add_build'); $execResults = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters, $options); $options = array('output' => 'mapOfMap', 'only_executed' => true, 'execution_details' => 'add_build'); $execResults = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters, $options); $options = array('output' => 'array', 'only_executed' => true, 'execution_details' => 'add_build'); $execResults = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters, $options); $milestonesList = $tplan_mgr->get_milestones($args->tplan_id); if (!empty($milestonesList)) { $gui->statistics->milestones = $metricsMgr->getMilestonesMetrics($args->tplan_id, $milestonesList); } } // ---------------------------------------------------------------------------- $smarty = new TLSmarty(); $smarty->assign('gui', $gui); $smarty->assign('buildColDefinition', $colDefinition);
$tplan_info = $tplan_mgr->get_by_id($args->tplan_id); $doc_info->testplan_name = htmlspecialchars($tplan_info['name']); $doc_info->testplan_scope = $tplan_info['notes']; $doc_info->title = $doc_info->testplan_name; // 20100112 - franciscom $getOpt = array('outputFormat' => 'map', 'addIfNull' => true); $platforms = $tplan_mgr->getPlatforms($args->tplan_id, $getOpt); $tcase_filter = null; $execid_filter = null; $executed_qty = 0; $treeForPlatform = array(); switch ($doc_info->content_range) { case 'testproject': foreach ($platforms as $platform_id => $platform_name) { $filters = array('platform_id' => $platform_id); $tp_tcs = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters); // IMPORTANTE NOTE: // We are in a loop and we use tree on prepareNode, that changes it, // then we can not use anymore a reference to test_spec // $tree = &$subtree; $tree = $subtree; if (!$tp_tcs) { $tree['childNodes'] = null; } //@TODO:REFACTOR // prepareNode($db,$tree,$decoding_hash,$dummy,$dummy,$tp_tcs, // SHOW_TESTCASES,null,null,0,1,0); $dummy = null; $pnFilters = null; $pnOptions = array('hideTestCases' => 0, 'showTestCaseID' => 1, 'getExternalTestCaseID' => 0, 'ignoreInactiveTestCases' => 0); prepareNode($db, $tree, $decoding_hash, $dummy, $dummy, $tp_tcs, $pnFilters, $pnOptions);
function saveImportedResultData(&$db, $resultData, $context) { if (!$resultData) { return; } $debugMsg = ' FUNCTION: ' . __FUNCTION__; $tables = tlObjectWithDB::getDBTables(array('executions', 'execution_bugs')); $l18n = array('import_results_tc_not_found' => '', 'import_results_invalid_result' => '', 'tproject_id_not_found' => '', 'import_results_ok' => ''); foreach ($l18n as $key => $value) { $l18n[$key] = lang_get($key); } // Get Column definitions to get size dinamically instead of create constants $columnDef = array(); $adodbObj = $db->get_dbmgr_object(); $columnDef['execution_bugs'] = $adodbObj->MetaColumns($tables['execution_bugs']); $keySet = array_keys($columnDef['execution_bugs']); foreach ($keySet as $keyName) { if (($keylow = strtolower($keyName)) != $keyName) { $columnDef['execution_bugs'][$keylow] = $columnDef['execution_bugs'][$keyName]; unset($columnDef['execution_bugs'][$keyName]); } } $user = new tlUser($context->userID); $user->readFromDB($db); $tcase_mgr = new testcase($db); $resulstCfg = config_get('results'); $tcaseCfg = config_get('testcase_cfg'); $resultMap = array(); $tplan_mgr = null; $tc_qty = sizeof($resultData); if ($tc_qty) { $tplan_mgr = new testplan($db); $tproject_mgr = new testproject($db); } // Need to do checks on common settings // // test project exists // // test plan id: // belongs to target test project // is active // build id: // belongs to target test plan // is open // // platform id: // is linked to target test plan // $checks['status_ok'] = true; $checks['msg'] = null; $dummy = $tproject_mgr->get_by_id($context->tprojectID); $checks['status_ok'] = !is_null($dummy); if (!$checks['status_ok']) { $checks['msg'][] = sprintf($l19n['tproject_id_not_found'], $context->tprojectID); } // if( $checks['status_ok'] ) // { // // } if (!$checks['status_ok']) { foreach ($checks['msg'] as $warning) { $resultMap[] = array($warning); } } $doIt = $checks['status_ok']; // -------------------------------------------------------------------- for ($idx = 0; $doIt && $idx < $tc_qty; $idx++) { $tester_id = 0; $tester_name = ''; $using_external_id = false; $message = null; $status_ok = true; $tcase_exec = $resultData[$idx]; $checks = check_exec_values($db, $tcase_mgr, $user_mgr, $tcaseCfg, $tcase_exec, $columnDef['execution_bugs']); $status_ok = $checks['status_ok']; if ($status_ok) { $tcase_id = $checks['tcase_id']; $tcase_external_id = trim($tcase_exec['tcase_external_id']); $tester_id = $checks['tester_id']; // external_id has precedence over internal id $using_external_id = $tcase_external_id != ""; } else { foreach ($checks['msg'] as $warning) { $resultMap[] = array($warning); } } if ($status_ok) { $tcase_identity = $using_external_id ? $tcase_external_id : $tcase_id; $result_code = strtolower($tcase_exec['result']); $result_is_acceptable = isset($resulstCfg['code_status'][$result_code]) ? true : false; $notes = $tcase_exec['notes']; $message = null; $filters = array('tcase_id' => $tcase_id, 'build_id' => $context->buildID, 'platform_id' => $context->platformID); $linked_cases = $tplan_mgr->get_linked_tcversions($context->tplanID, $filters); $info_on_case = $linked_cases[$tcase_id]; if (!$linked_cases) { $message = sprintf($l18n['import_results_tc_not_found'], $tcase_identity); } else { if (!$result_is_acceptable) { $message = sprintf($l18n['import_results_invalid_result'], $tcase_identity, $tcase_exec['result']); } else { $tcversion_id = $info_on_case['tcversion_id']; $version = $info_on_case['version']; $notes = $db->prepare_string(trim($notes)); // N.B.: db_now() returns an string ready to be used in an SQL insert // example '2008-09-04', while $tcase_exec["timestamp"] => 2008-09-04 // $execution_ts = $tcase_exec['timestamp'] != '' ? "'" . $tcase_exec["timestamp"] . "'" : $db->db_now(); if ($tester_id != 0) { $tester_name = $tcase_exec['tester']; } else { $tester_name = $user->login; $tester_id = $context->userID; } // BUGID 3543 - added execution_type $sql = " /* {$debugMsg} */ " . " INSERT INTO {$tables['executions']} (build_id,tester_id,status,testplan_id," . " tcversion_id,execution_ts,notes,tcversion_number,platform_id,execution_type)" . " VALUES ({$context->buildID}, {$tester_id},'{$result_code}',{$context->tplanID}, " . " {$tcversion_id},{$execution_ts},'{$notes}', {$version}, " . " {$context->platformID}, {$tcase_exec['execution_type']})"; $db->exec_query($sql); // BUGID 3331 if (isset($tcase_exec['bug_id'])) { $execution_id = $db->insert_id($tables['executions']); foreach ($tcase_exec['bug_id'] as $bug_id) { $bug_id = trim($bug_id); $sql = " /* {$debugMsg} */ " . " SELECT execution_id AS check_qty FROM {$tables['execution_bugs']} " . " WHERE bug_id = '{$bug_id}' AND execution_id={$execution_id} "; $rs = $db->get_recordset($sql); if (is_null($rs)) { $sql = " /* {$debugMsg} */ " . " INSERT INTO {$tables['execution_bugs']} (bug_id,execution_id)" . " VALUES ('" . $db->prepare_string($bug_id) . "', {$execution_id} )"; $db->exec_query($sql); } } } $message = sprintf($l18n['import_results_ok'], $tcase_identity, $version, $tester_name, $resulstCfg['code_status'][$result_code], $execution_ts); } } } if (!is_null($message)) { $resultMap[] = array($message); } } return $resultMap; }
} // BUGID 3439 if (!count($req_spec_map)) { $gui->warning_msg = lang_get($no_finished_reqs_msg_key); } } else { $gui->warning_msg = lang_get($no_srs_msg_key); } // second step: walk through req spec map, count/calculate, store results if (count($req_spec_map)) { // BUGID 3439 $testcases = array(); if (count($tc_ids)) { $filters = array('tcase_id' => $tc_ids); $options = null; $testcases = $tplan_mgr->get_linked_tcversions($args->tplan_id, $filters, $options); } foreach ($req_spec_map as $req_spec_id => $req_spec_info) { $req_spec_map[$req_spec_id]['req_counters'] = array('total' => 0); foreach ($req_spec_info['requirements'] as $req_id => $req_info) { $req_spec_map[$req_spec_id]['requirements'][$req_id]['tc_counters'] = array('total' => 0); foreach ($req_info['linked_testcases'] as $key => $tc_info) { $tc_id = $tc_info['id']; if (isset($testcases[$tc_id]['exec_status'])) { $status = $testcases[$tc_id]['exec_status']; // if the counters for this status don't exist yet, initialize them with 0 if (!isset($req_spec_map[$req_spec_id]['requirements'][$req_id]['tc_counters'][$status])) { $req_spec_map[$req_spec_id]['requirements'][$req_id]['tc_counters'][$status] = 0; } $req_spec_map[$req_spec_id]['requirements'][$req_id]['tc_counters'][$status]++; $req_spec_map[$req_spec_id]['requirements'][$req_id]['tc_counters']['total']++;
/** * @return array a map: * key => node_id * values => node test case count considering test cases presents * in the nodes of the subtree that starts on node_id * Means test case can not be sons/daughters of node_id. * * node name (useful only for debug purpouses). */ function get_testplan_nodes_testcount(&$db, $tproject_id, $tproject_name, $tplan_id, $tplan_name, $keywordsFilter = null) { $tplan_mgr = new testplan($db); $tproject_mgr = new testproject($db); $tree_manager = $tplan_mgr->tree_manager; $tcase_node_type = $tree_manager->node_descr_id['testcase']; $hash_descr_id = $tree_manager->get_available_node_types(); $hash_id_descr = array_flip($hash_descr_id); $resultsCfg = config_get('results'); $decoding_hash = array('node_id_descr' => $hash_id_descr, 'status_descr_code' => $resultsCfg['status_code'], 'status_code_descr' => $resultsCfg['code_status']); $test_spec = $tproject_mgr->get_subtree($tproject_id, RECURSIVE_MODE); $linkedFilters = array('keyword_id' => $keywordsFilter->items); $tplan_tcases = $tplan_mgr->get_linked_tcversions($tplan_id, $linkedFilters); if (is_null($tplan_tcases)) { $tplan_tcases = array(); } $test_spec['name'] = $tproject_name; $test_spec['id'] = $tproject_id; $test_spec['node_type_id'] = $hash_descr_id['testproject']; $map_node_tccount = array(); if ($test_spec) { $tck_map = null; if (!is_null($keywordsFilter)) { $tck_map = $tproject_mgr->get_keywords_tcases($tproject_id, $keywordsFilter->items, $keywordsFilter->type); } //@TODO: schlundus, can we speed up with NO_EXTERNAL? $filters = null; $options = array('hideTestCases' => 0, 'viewType' => 'executionTree'); $testcase_counters = prepareNode($db, $test_spec, $decoding_hash, $map_node_tccount, $tck_map, $tplan_tcases, $filters, $options); $test_spec['testcase_count'] = $testcase_counters['testcase_count']; } return $map_node_tccount; }
new dBug($all_builds); echo "<pre> testplan - count_testcases(\$tplan_id)"; echo "</pre>"; echo "<pre> count_testcases({$tplan_id})"; echo "</pre>"; $count_testcases = $tplan_mgr->count_testcases($tplan_id); new dBug("Number of testcase linked to test plan=" . $count_testcases); // echo "<pre> testplan - get_linked_tcversions(\$tplan_id,\$tcase_id=null,\$keyword_id=0,\$executed=null, // \$assigned_to=null,\$exec_status=null,\$build_id=0, // \$cf_hash = null)";echo "</pre>"; // echo "<pre> testplan - get_linked_tcversions(\$id,\$filters=null,\$options=null)"; echo "</pre>"; echo "<pre> get_linked_tcversions({$tplan_id})"; echo "</pre>"; $linked_tcversions = $tplan_mgr->get_linked_tcversions($tplan_id); new dBug($linked_tcversions); // ------------------------------------------------------------------------------------------- echo "<hr><h2> Build Manager Class </h2>"; echo "<pre> build manager - constructor - build_mgr(&\$db)"; echo "</pre>"; $build_mgr = new build_mgr($db); new dBug($build_mgr); $all_builds = $tplan_mgr->get_builds($tplan_id); $dummy = array_keys($all_builds); $build_id = $dummy[0]; echo "<pre> build manager - get_by_id(\$id)"; echo "</pre>"; echo "<pre> get_by_id({$build_id})"; echo "</pre>"; $build_info = $build_mgr->get_by_id($build_id);
/** * getTestCasesForTestPlan * List test cases linked to a test plan * * @param struct $args * @param string $args["devKey"] * @param int $args["testplanid"] * @param int $args["testcaseid"] - optional * @param int $args["buildid"] - optional * @param int $args["keywordid"] - optional * @param boolean $args["executed"] - optional * @param int $args["$assignedto"] - optional * @param string $args["executestatus"] - optional * @param array $args["executiontype"] - optional * * @return mixed $resultInfo */ public function getTestCasesForTestPlan($args) { $operation = __FUNCTION__; $msg_prefix = "({$operation}) - "; // Optional parameters $opt = array(self::$testCaseIDParamName => null, self::$buildIDParamName => null, self::$keywordIDParamName => null, self::$executedParamName => null, self::$assignedToParamName => null, self::$executeStatusParamName => null, self::$executionTypeParamName => null); $this->_setArgs($args); // Test Case ID, Build ID are checked if present if (!$this->_checkGetTestCasesForTestPlanRequest($msg_prefix) && $this->userHasRight("mgt_view_tc")) { return $this->errors; } $tplanid = $this->args[self::$testPlanIDParamName]; foreach ($opt as $key => $value) { if ($this->_isParamPresent($key)) { $opt[$key] = $this->args[$key]; } } $testplan = new testplan($this->dbObj); // public function get_linked_tcversions($id, // $tcase_id=null , // $keyword_id=0 , // $executed=null , // $assigned_to=null , // $exec_status=null , // $build_id=0 , // $cf_hash = null , // $include_unassigned=false , // $urgencyImportance = null , // $tsuites_id=null , // $exec_type=null , // $details='simple') // $recordset = $testplan->get_linked_tcversions($tplanid, $opt[self::$testCaseIDParamName], $opt[self::$keywordIDParamName], $opt[self::$executedParamName], $opt[self::$assignedToParamName], $opt[self::$executeStatusParamName], $opt[self::$buildIDParamName], null, false, null, null, $opt[self::$executionTypeParamName], 'full'); return $recordset; }
/** * * @internal revisions * */ function getMetrics(&$db, $userObj, $args, $result_cfg, $labels) { $user_id = $args->currentUserID; $tproject_id = $args->tproject_id; $linked_tcversions = array(); $metrics = array(); $tplan_mgr = new testplan($db); $show_platforms = false; $platforms = array(); // get all tesplans accessibles for user, for $tproject_id $options['active'] = $args->show_only_active ? ACTIVE : TP_ALL_STATUS; $test_plans = $userObj->getAccessibleTestPlans($db, $tproject_id, null, $options); // Get count of testcases linked to every testplan foreach ($test_plans as $key => $value) { $tplan_id = $value['id']; $linked_tcversions[$tplan_id] = null; $platformSet = $tplan_mgr->getPlatforms($tplan_id); if (isset($platformSet)) { $platforms = array_merge($platforms, $platformSet); } else { $platforms[]['name'] = $labels['not_aplicable']; } $show_platforms_for_tplan = !is_null($platformSet); if (!$show_platforms_for_tplan) { // Julian: replaced array(0=>'') $platformSet = array(0 => array('id' => 0)); } else { // 20110615 - Julian - if at least 1 test plan of the test project uses platforms // we need to display platform column on metrics dashboard $show_platforms = true; } # initialize counters foreach ($platformSet as $platform_id => $platform_name) { $metrics['testplans'][$tplan_id]['platforms'][$platform_name['id']]['tplan_name'] = $value['name']; $metrics['testplans'][$tplan_id]['platforms'][$platform_name['id']]['platform_name'] = $platform_name['id'] == 0 ? $labels['not_aplicable'] : $platform_name['name']; $metrics['testplans'][$tplan_id]['platforms'][$platform_name['id']]['active'] = 0; $metrics['testplans'][$tplan_id]['overall']['active'] = 0; $metrics['total']['active'] = 0; $metrics['testplans'][$tplan_id]['platforms'][$platform_name['id']]['executed'] = 0; $metrics['testplans'][$tplan_id]['overall']['executed'] = 0; $metrics['total']['executed'] = 0; foreach ($result_cfg['status_label'] as $key => $status) { $metrics['testplans'][$tplan_id]['platforms'][$platform_name['id']][$key] = 0; $metrics['testplans'][$tplan_id]['overall'][$key] = 0; $metrics['total'][$key] = 0; } } if (($linkedItemsQty = $tplan_mgr->count_testcases($tplan_id)) > 0) { $executed = null; $not_run = null; // get executions ON ACTIVE BUILDS // // IMPORTANTE NOTICE // using 'output' => 'mapOfMap' means we will get JUST ONE exec record for test case / platform // $options = array('output' => 'mapOfMap', 'steps_info' => 0, 'build_active_status' => 'active'); $filters = null; $executed[$tplan_id] = $tplan_mgr->get_linked_tcversions($tplan_id, $filters, $options); // Simple test to cope with active/inactive build if (is_null($executed[$tplan_id])) { // need a simple call to get linked items and set status to NOT RUN on all items. $filters = null; $options = array('output' => 'mapOfMap', 'steps_info' => 0, 'forced_exec_status' => $result_cfg['status_code']['not_run']); $executed[$tplan_id] = $tplan_mgr->get_linked_tcversions($tplan_id, $filters, $options); } else { // get NOT EXECUTED on ACTIVE BUILDS and EXECUTED on INACTIVE BUILDS // EXECUTED on INACTIVE BUILDS are candidate to become NOT EXECUTED on ACTIVE BUILDS // $options = array('output' => 'mapOfMap', 'steps_info' => 0, 'build_active_status' => 'active', 'forced_exec_status' => $result_cfg['status_code']['not_run']); $filters = array('exec_status' => $result_cfg['status_code']['not_run']); $not_run[$tplan_id] = $tplan_mgr->get_linked_tcversions($tplan_id, $filters, $options); } // Time to work on keys $notRunKeys = array_keys($not_run[$tplan_id]); foreach ($notRunKeys as $tcaseIDkey) { // BUGID 4362 // Mistake was this: // isset($executed[$tplan_id][$key2copy]) // just means we have found at least one execution. // But inside the element we have a map indexed by platform id. // If we have N platforms, and have exec on M, we have M elements // and MISS TO ADD the N-M NOT EXECUTED generating the issue. if (!isset($executed[$tplan_id][$tcaseIDkey])) { $executed[$tplan_id][$tcaseIDkey] = array(); } $executed[$tplan_id][$tcaseIDkey] += $not_run[$tplan_id][$tcaseIDkey]; } $linked_tcversions[$tplan_id] = (array) $executed[$tplan_id]; } // test plan has linked items } // Get count of executed testcases foreach ($linked_tcversions as $tplan_id => $tcinfo) { if (!is_null($tcinfo)) { foreach ($tcinfo as $tcase_id => $tc) { foreach ($tc as $platform_id => $value) { if ($value['active']) { // count number of active test cases for each platform, each test plan // and whole project $metrics['testplans'][$tplan_id]['platforms'][$platform_id]['active']++; $metrics['testplans'][$tplan_id]['overall']['active']++; $metrics['total']['active']++; // count number of test cases depending on execution status (result) for // each platform, each test plan and whole project $status_key = array_keys($result_cfg['status_code'], $value['exec_status']); $metrics['testplans'][$tplan_id]['platforms'][$platform_id][$status_key[0]]++; $metrics['testplans'][$tplan_id]['overall'][$status_key[0]]++; $metrics['total'][$status_key[0]]++; // count number of executed test cases for each platform, each test plan and // the whole project // // 20110317 - do not know how we do not have tested for exec status <> not_run // After change done to fix inactive build behaviour we need to check for // execution status // if ($value['exec_id'] > 0) if ($value['exec_status'] != $result_cfg['status_code']['not_run']) { $metrics['testplans'][$tplan_id]['platforms'][$platform_id]['executed']++; $metrics['testplans'][$tplan_id]['overall']['executed']++; $metrics['total']['executed']++; } } } } } } // remove duplicate platform names $platforms_no_duplicates = array(); foreach ($platforms as $platform) { if (!in_array($platform['name'], $platforms_no_duplicates)) { $platforms_no_duplicates[] = $platform['name']; } } return array($metrics, $show_platforms, $platforms_no_duplicates); }