Skip to content

Commit

Permalink
Merge pull request #3 from yukon39/develop
Browse files Browse the repository at this point in the history
Новая версия 0.4.0
  • Loading branch information
yukon39 authored Apr 25, 2020
2 parents e3185a2 + 6c488f8 commit bd2d0d1
Show file tree
Hide file tree
Showing 10 changed files with 360 additions and 12 deletions.
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@

# Использование

Для тех кому не терпится начать уже готов пайплайн Jenkins [`/examples/coverage.jenkinsfile`](examples/coverage.jenkinsfile).
Надо просто указать свои значения в первой секции `environment`

## Запуск процедуры замера

`coverage-cli start --infobase test_database --output coverage.csv`
Expand All @@ -29,7 +32,18 @@

`coverage-cli convert --input coverage.csv --input coverage.json --sources ProjectName/src --format EDT`

* Конвертация замеров для модулей конфигурации и модулей расширения поддерживается через конфигурационный файл (пример файла можно посмотреть в [`/examples`](examples)):
* Конвертация замеров для модулей конфигурации и модулей расширения поддерживается через конфигурационный файл (пример файла можно посмотреть в [`/examples`](examples):

`coverage-cli convert --input coverage.csv --input coverage.json --config coverage-conf.json`

## Формирование списка строк требующих покрытия

Эта команда дублирует функционал SonarQube 1C BSL Community Plugin.

Формирует список строк требующих покрытия. Пример:
`coverage-cli lines --sources src/cf --output linesToCover.xml`

## Объединение нескольких отчетов покрытия в один

Объединяет несколько отчетов покрытия в каталоге (например сформированных командами `convert` и `lines`) в один.
`coverage-cli report --input coverageReports --output genericCoverage.xml`
2 changes: 1 addition & 1 deletion build/package/coverage-cli.packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
#КонецОбласти

Описание.Имя("coverage-cli")
.Версия("0.3.0")
.Версия("0.4.0")
.Описание("Консольное приложение для работы с покрытием")
.ВерсияСреды("1.3.0")
.ЗависитОт("cli")
Expand Down
1 change: 1 addition & 0 deletions cmd/main.os
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
Приложение.ДобавитьКоманду("stop", "Остановить запись покрытия", Новый КомандаСтоп());
Приложение.ДобавитьКоманду("convert", "Конвертировать результаты покрытия", Новый КомандаКонвертировать());
Приложение.ДобавитьКоманду("lines", "Получить файлы которые надо покрыть тестами", Новый КомандаСтрокиПокрытия());
Приложение.ДобавитьКоманду("report", "Сформировать отчет покрытия", Новый КомандаОтчетПокрытия());

Приложение.Опция("d debug", Ложь, "Режим отладки")
.ТБулево();
Expand Down
163 changes: 163 additions & 0 deletions examples/coverage.jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
pipeline {

agent {
// Используйте свою метку для ноды.
// На ноде должны быть установлены EDT и сканер для SonarQube
label 'edt'
}

environment {
// Project specific
DebuggerURL = 'http://localhost:1550'
InfobaseName = 'coverage_test'
ClusterName = 'localhost'
SourcesPath = 'src/cf'
SourcesFormat = 'XML'
VBParams = 'VBParams.json'

// Jenkins specific
sonarTool = 'SonarQubeTool'
sonarInstance = 'SonarQubeServer'

// Different strokes for different folks
CoverageTemp = '.coverage'
}

stages {

stage('Подготовка рабочей области') {
steps {
dir(CoverageTemp) { deleteDir() }
writeFile file: "${CoverageTemp}/dummy", text: 'dummy'
writeFile file: "${CoverageTemp}/coverage/dummy", text: 'dummy'
}
}

stage('Запуск сбора покрытия') {
environment {
commandArgs = [
"--infobase ${InfobaseName}",
"--debugger ${DebuggerURL}",
"--output ${CoverageTemp}/coverage.csv"
].join(' ')
}

steps {
coverage_cli("start", commandArgs)
}

post {
success {
sleep time: 15, unit: 'SECONDS'
}
}
}

stage('Тестирование проекта') {
environment {
commandArgs = [
"--ibconnection ${ibconnection()}",
"--vanessasettings ${VBParams}",
"--additional \"/DEBUG -http -attach /DEBUGGERURL ${DebuggerURL}\""
].join(' ')
}

steps {
catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') {
vrunner('vanessa', commandArgs)
}
}
}

stage('Остановка сбора покрытия') {
steps {
coverage_cli("stop", "")
}
}

stage('Разбор результатов покрытия') {
environment {
commandArgs = [
"--input ${CoverageTemp}/coverage.csv",
"--output ${CoverageTemp}/coverage/coverageTrue.json",
"--sources ${SourcesPath}",
"--format ${SourcesFormat}"
].join(' ')
}

steps {
coverage_cli("convert", commandArgs)
}
}

// Если используется community плагин для SonarQube, то этот шаг можно отключить,
// т.к. плагин самостоятельно реализует формирование строк покрытия
// с использованием опции sonar.bsl.calculateLineCover=true
stage('Получение строк для покрытия') {

environment {
commandArgs = [
"--sources ${SourcesPath}",
"--output ${CoverageTemp}/coverage/coverageFalse.xml"
].join(' ')
}

steps {
coverage_cli("lines", commandArgs)
}
}

stage('Формирование genericCoverage') {
environment {
commandArgs = [
"--input ${CoverageTemp}/coverage",
"--output ${CoverageTemp}/genericCoverage.xml"
].join(' ')
}

steps {
coverage_cli("report", commandArgs)
}
}

stage ('Запуск проверки SQ') {
environment {
scannerHome = tool sonarTool
SONAR_SCANNER_OPTS = [
'-XX:+UseG1GC',
'-XX:MaxGCPauseMillis=200',
'-Dfile.encoding=UTF-8'
].join(' ')

commandArgs = [
"-Dsonar.coverageReportPaths=${CoverageTemp}/genericCoverage.xml"
].join(' ')
}

steps {
withSonarQubeEnv(installationName: sonarInstance) {
sonar_scanner(scannerHome, commandArgs)
}
}
}
}
}

def ibconnection() {
"/S${ClusterName}/${InfobaseName}"
}

def coverage_cli(command, commandArgs) {
echo "coverage-cli ${command} ${commandArgs}"
bat "@chcp 65001 >nul\n@coverage-cli ${command} ${commandArgs}"
}

def sonar_scanner(scannerHome, commandArgs) {
echo "sonar-scanner.bat ${commandArgs}"
bat "@chcp 65001 >nul\n@\"${scannerHome}/bin/sonar-scanner.bat\" ${commandArgs}"
}

def vrunner(command, commandArgs) {
echo "vrunner ${command} ${commandArgs}"
bat "@chcp 65001 >nul\n@vrunner ${command} ${commandArgs}"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@

#Использовать "../../coverage"

#Область КомандаПриложения

Процедура ОписаниеКоманды(Команда) Экспорт

Команда.Опция("i input", "", "Файл с результатами отладки в формате csv")
.ТСтрока()
.Обязательный();

Команда.Опция("o output", "", "JSON файл покрытия с указанием путей к исходным файлам")
.ТСтрока()
.Обязательный();

КонецПроцедуры

Процедура ВыполнитьКоманду(Знач Команда) Экспорт

КаталогСОтчетами = Команда.ЗначениеОпции("input");
ФайлXML = Команда.ЗначениеОпции("output");

ДанныеОтчета = Новый Соответствие;

ФайлыОтчетов = НайтиФайлы(КаталогСОтчетами, "*.*");
Для Каждого ФайлОтчета Из ФайлыОтчетов Цикл

Если ФайлОтчета.Расширение = ".json" Тогда
ДанныеПокрытияФайл = ФорматДанныеПокрытия.ПрочитатьДанныеПокрытия(ФайлОтчета.ПолноеИмя);
ИначеЕсли ФайлОтчета.Расширение = ".xml" Тогда
ДанныеПокрытияФайл = ФорматДанныеПокрытия.ПрочитатьДанныеПокрытияXML(ФайлОтчета.ПолноеИмя);
Иначе
Продолжить;
КонецЕсли;

Для Каждого ДанныеПокрытияМодуляФайл Из ДанныеПокрытияФайл Цикл

КлючДанных = ДанныеПокрытияМодуляФайл.SourcePath;
ДанныеПокрытияМодуля = ДанныеОтчета.Получить(КлючДанных);
Если ДанныеПокрытияМодуля = Неопределено Тогда
ДанныеОтчета.Вставить(КлючДанных, ДанныеПокрытияМодуляФайл);
Иначе
ФорматДанныеПокрытия.ДополнитьДанныеПокрытия(ДанныеПокрытияМодуля, ДанныеПокрытияМодуляФайл);
КонецЕсли;

КонецЦикла;

КонецЦикла;

ФорматДанныеПокрытия.ЗаписатьДанныеПокрытияXML(ФайлXML, ДанныеОтчета);

КонецПроцедуры

#КонецОбласти
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

КаталогПроекта = Команда.ЗначениеОпции("workspace");
КаталогИсходниковКонфигурации = Команда.ЗначениеОпции("sources");
ФайлВывода = Команда.ЗначениеОпции("sources");
ФайлВывода = Команда.ЗначениеОпции("output");

КаталогПриложения = ПараметрыПриложения.КаталогПриложения();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
// Строка - Текущая версия приложения
//
Функция ВерсияПриложения() Экспорт
Возврат "0.3.0";
Возврат "0.4.0";
КонецФункции

// Возвращает имя приложения
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,77 @@

#Область ПрограммныйИнтерфейс

Перем МодульОбычногоПриложения Экспорт;
Перем МодульУправляемогоПриложения Экспорт;
Перем МодульВнешнегоСоединения Экспорт;
Перем МодульСеанса Экспорт;

Перем ОбщийМодуль Экспорт;

Перем МодульОбъекта Экспорт;
Перем МодульМенеджера Экспорт;
Перем МодульНабораЗаписей Экспорт;
Перем МодульМенеджераЗначения Экспорт;
Перем МодульМенеджераНастроек Экспорт;
Перем МодульФормы Экспорт;
Перем МодульКоманды Экспорт;

#КонецОбласти

МодульУправляемогоПриложения = "d22e852a-cf8a-4f77-8ccb-3548e7792bea";
МодульСеанса = "9b7bbbae-9771-46f2-9e4d-2489e0ffc702";
ОбщийМодуль = "d5963243-262e-4398-b4d7-fb16d06484f6";
// CommonModule
// WebService
// HTTPService
ОбщийМодуль = "d5963243-262e-4398-b4d7-fb16d06484f6";

// Report
// ExternalReport
// DataProcessor
// ExternalDataProcessor
// Table
// DimensionTable
МодульОбъекта = "a637f77f-3840-441d-a1c3-699c8c5cb7e0";
МодульМенеджера = "d1b64a2c-8078-4982-8190-8f81aefda192";

// Enum
// InformationRegister
// DocumentJournal
// Report
// DataProcessor
// AccumulationRegister
// FilterCriterion
// Table
// Cube
// DimensionTable
// AccountingRegister
// CalculationRegister
МодульМенеджера = "d1b64a2c-8078-4982-8190-8f81aefda192";

// InformationRegister
// Sequence
// AccumulationRegister
// Table
// Cube
// AccountingRegister
// CalculationRegister
// Recalculation
МодульНабораЗаписей = "9f36fd70-4bf4-47f6-b235-935f73aab43f";

// Configuration
МодульОбычногоПриложения = "a78d9ce3-4e0c-48d5-9863-ae7342eedf94";

// Configuration
МодульУправляемогоПриложения = "d22e852a-cf8a-4f77-8ccb-3548e7792bea";

// Configuration
МодульВнешнегоСоединения = "a4a9c1e2-1e54-4c7f-af06-4ca341198fac";

// Configuration
МодульСеанса = "9b7bbbae-9771-46f2-9e4d-2489e0ffc702";

// Constant
МодульМенеджераЗначения = "3e58c91f-9aaa-4f42-8999-4baf33907b75";

// SettingsStorage
МодульМенеджераНастроек = "0c8cad23-bf8c-468e-b49e-12f1927c048b";

МодульФормы = "32e087ab-1491-49b6-aba7-43571b41ac2b";
МодульКоманды = "078a6af8-d22c-4248-9c33-7e90075a3d2c";
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@
#Область ПрограммныйИнтерфейс

Перем МодульКонфигурации Экспорт;
Перем МодульРасширения Экспорт;
Перем МодульСистемнойФормы Экспорт;
Перем МодульСистемы Экспорт;
Перем ВнешнийМодуль Экспорт;
Перем МодульРасширения Экспорт;

#КонецОбласти

МодульКонфигурации = "ConfigModule";
МодульРасширения = "ExtensionModule";
ВнешнийМодуль = "ExtMDModule";
МодульКонфигурации = "ConfigModule";
МодульСистемнойФормы = "SystemFormModule";
МодульСистемы = "SystemModule";
ВнешнийМодуль = "ExtMDModule";
МодульРасширения = "ExtensionModule";
Loading

0 comments on commit bd2d0d1

Please sign in to comment.