Дата последнего изменения: 13.11.2023
Система допускает модификацию тестов под нужды разработчика используя штатный механизм Событий Bitrix Framework.
Разработчики, при необходимости, могут сами добавить свои тесты и разделы в Монитор качества.
Так же инструмент можно адаптировать под нужды конкретной задачи, создав собственные разделы и тесты. Например:
Сначала нам необходимо описать свои тесты и их разделы. Для этого вешаем обработчик на событие Главного модуля onCheckListGet. Событие вызывается в конструкторе CCheckList с аргументом $arCheckList следующего вида:
array(2) {
["CATEGORIES"]=>
array(10) {
["QDESIGN"]=>
array(0) {
}
["DESIGN"]=>
array(1) {
["PARENT"]=>
string(7) "QDESIGN"
}
["MODEL"]=>
array(1) {
["PARENT"]=>
string(7) "QDESIGN"
}
["STANDART"]=>
array(1) {
["PARENT"]=>
string(7) "QDESIGN"
}
}
["POINTS"]=>
array(65) {
["QD0010"]=>
array(2) {
["PARENT"]=>
string(6) "DESIGN"
["REQUIRE"]=>
string(1) "Y"
}
["QD0020"]=>
array(5) {
["REQUIRE"]=>
string(1) "Y"
["PARENT"]=>
string(6) "DESIGN"
["AUTO"]=>
string(1) "Y"
["CLASS_NAME"]=>
string(10) "CAutoCheck"
["METHOD_NAME"]=>
string(14) "CheckTemplates"
}
)
Нетрудно заметить, что CATEGORIES содержит список разделов чеклиста, которые могут быть вложенными, а POINTS - сами тесты.
Ключ массива CATEGORIES — ID раздела, значение — массив параметров:
Пример описания раздела:
$checkList['CATEGORIES']['ITC_QC'] = array( 'NAME' => 'Корпоративный тест качества ITConstruct', 'LINKS' => '' );
Ключом элементов POINTS является символьный идентификатор теста, а значение представляет собой массив следующих параметров:
Достаточно подключить свой языковой файл примерно с таким содержанием:
$MESS["CL_ITC_QC_FAVICON_NAME"] = 'Наличие favicon'; $MESS["CL_ITC_QC_FAVICON_DESC"] = 'Проверка наличия favicon - иконки сайта'; $MESS["CL_ITC_QC_FAVICON_LINKS"] ='блаблабла';И эти языковые фразы будут подтягиваться в поля NAME, DESC и LINKS теста с кодом ITC_QC_FAVICON. К HOWTO это тоже будет относиться, но пока его можно определить только в массиве описания пункта.
Пример:
$checkList['POINTS']['ITC_QC_FAVICON'] = array( 'PARENT' => 'ITC_QC', 'REQUIRE' => 'Y', 'AUTO' => 'Y', 'CLASS_NAME' => __CLASS__, 'METHOD_NAME' => 'checkFavicon', 'NAME' => 'Наличие favicon', 'DESC' => 'Проверка наличия favicon - иконки сайта, отображаемой в заголовке вкладки и поисковых системах', 'HOWTO' => 'Производится проверка главной страницы сайта на наличие соответствующего мета-тэга. Если тэг объявлен - проверяется наличие иконки по указанному урлу. Если не указан - наличие favicon.ico в корне сайта', 'LINKS' => 'links' );
Обработчик события может возвращать как изменённый $arCheckList, так и новый массив с разделами и тестами - если категория/тест с неким ID уже существует, то он не заменится, т.е. подкорректировать системные тесты не получится.
Теперь необходимо объявить метод для автотеста. Для альфа-версии логика теста будет тривиальна:
$check = file_exists($_SERVER['DOCUMENT_ROOT'] . '/favicon.ico')
По результатам проверки мы должны вернуть массив. Автотест может быть одно- или многошаговым. Если тест многошаговый и текущая итерация не является конечной, необходимо вернуть массив следующего вида:
$arResult = array( 'IN_PROGRESS' => 'Y', 'PERCENT' => '42', );
PERCENT служит лишь для визуализации прогресса на странице и никуда не сохраняется для последующего использования. Промежуточные данные для идентификации прогресса шага надо сохранять самим - в сессию, временный файл, базу (в зависимости от объёма данных и прочих условий).
Если же тест закончен, сообщаем статус массивом, содержащим следующие ключи:
if ($result['STATUS'] == "true")
Готовый метод теста фавиконки имеет вид:
static public function checkFavicon($arParams)
{
$arResult = array('STATUS' => 'F');
$check = file_exists($_SERVER['DOCUMENT_ROOT'] . '/favicon.ico');
if ($check === true) {
$arResult = array(
'STATUS' => true,
'MESSAGE' => array(
'PREVIEW' => 'Favicon найдена - ' . '/favicon.ico',
),
);
} else {
$arResult = array(
'STATUS' => false,
'MESSAGE' => array(
'PREVIEW' => 'Favicon не найдена',
'DETAIL' => 'Тест очень старался, но так и не смог найти фавыконку. Ну и чёрт с ней',
),
);
}
return $arResult;
}
Тест в мониторе качества:

Справочная информация о тесте:

Код обработчика и тесты целиком:
AddEventHandler('main', 'OnCheckListGet', array('CItcCheckListTests', 'onCheckListGet'));
class CItcCheckListTests
{
static public function onCheckListGet($arCheckList)
{
$checkList = array('CATEGORIES' => array(), 'POINTS' => array());
$checkList['CATEGORIES']['ITC_QC'] = array(
'NAME' => 'Корпоративный тест качества ITConstruct',
'LINKS' => ''
);
$checkList['POINTS']['ITC_QC_FAVICON'] = array(
'PARENT' => 'ITC_QC',
'REQUIRE' => 'Y',
'AUTO' => 'Y',
'CLASS_NAME' => __CLASS__,
'METHOD_NAME' => 'checkFavicon',
'NAME' => 'Наличие favicon',
'DESC' => 'Проверка наличия favicon - иконки сайта, отображаемой в заголовке вкладки и поисковых системах',
'HOWTO' => 'Производится проверка главной страницы сайта на наличие соответствующего мета-тэга.
Если тэг объявлен - проверяется наличие иконки по указанному урлу.
Если не указан - наличие favicon.ico в корне сайта',
'LINKS' => 'links'
);
$checkList['POINTS']['ITC_QC_DENY_DEV'] = array(
'PARENT' => 'ITC_QC',
'REQUIRE' => 'N',
'AUTO' => 'N',
'NAME' => 'Закрытие доступа извне к dev-серверу',
'DESC' => 'Согласовать с менеджером закрытие доступа ко внутреннему серверу разработок из внешнего мира',
'HOWTO' => 'Попинговать с телефона после апдейта днса',
);
return $checkList;
}
static public function checkFavicon($arParams)
{
$arResult = array('STATUS' => 'F');
$check = file_exists($_SERVER['DOCUMENT_ROOT'] . '/favicon.ico');
if ($check === true) {
$arResult = array(
'STATUS' => true,
'MESSAGE' => array(
'PREVIEW' => 'Favicon найдена - ' . '/favicon.ico',
),
);
} else {
$arResult = array(
'STATUS' => false,
'MESSAGE' => array(
'PREVIEW' => 'Favicon не найдена',
'DETAIL' => 'Тест очень старался, но так и не смог найти фавыконку. Ну и чёрт с ней',
),
);
}
return $arResult;
}
}