Coder Social home page Coder Social logo

yukon39 / coverage-cli Goto Github PK

View Code? Open in Web Editor NEW
19.0 3.0 6.0 387 KB

Консольное приложение для конвертации результатов покрытия

License: GNU General Public License v3.0

1C Enterprise 100.00%
oscript coverage sonarqube

coverage-cli's Introduction

coverage-cli

Консольное приложение для конвертации результатов покрытия

Для получения замеров покрытия используется библиотека https://github.com/proDOOMman/Coverage41C

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

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

Для тех у кого нет Jenkins-а или кому тесны рамки консольного приложения все возможности пакета доступны через API. Смотри /examples/coverage.os. Все тоже самое, что в Jenkins, но через API.

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

coverage-cli start --infobase test_database --output coverage.csv

2 Остановка процедуры замера

coverage-cli stop

3 Конвертация замеров для отправки на сервер SonarQube

Конвертирует результаты покрытия из CSV формата во genericCoverage XML формат. При этом:

  1. Сопоставляются внутренние идентификаторы программных модулей и файлы с исходными кодами проекта
  2. Устраняется дублирование номеров строк в замерах.
  3. Убираются замеры программных модулей для которых не найдены соответсвующие файлы с исходными кодами.

При указании опции --json отчет сохраняется во внутреннем JSON-формате, содержащем более подробную информацию о модулях.

Примеры:

  • Конвертация замеров для модулей конфигурации в формате выгрузки конфигуратора:

coverage-cli convert --input coverage.csv --output coveredLines.xml --sources src/cf --format XML

  • Конвертация замеров для модулей конфигурации в формате выгрузки EDT:

coverage-cli convert --input coverage.csv --output coveredLines.xml --sources ProjectName/src --format EDT

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

coverage-cli convert --input coverage.csv --input coveredLines.xml --config coverage-conf.json

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

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

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

Объединяет несколько отчетов покрытия в каталоге (например сформированных командами convert и lines) в один. coverage-cli report --input coverageReports --output genericCoverage.xml

coverage-cli's People

Contributors

artbear avatar bia-tech avatar ditrixnew avatar yukon39 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

coverage-cli's Issues

Два одновременных запуска в CI контуре

Сейчас есть проблема, если я запускаю на одной системе два сборщика, то вопрос, как мне остановить нужный?

in directory: C:\BuildAgentSecond\work\161527a3295c878a
?????????? - Created pid file: C:\BuildAgentSecond\temp\buildTmp\coverage.9200.pid
Process exited with code 0

Вот лог при старте, отлично, а если я два стартанул и теперь вызываю стоп, какой из них остановиться?

Слеши в путях

Получаю вот такой генерик:

<?xml version="1.0" encoding="utf-8"?>
<coverage version="1">
    <file path="src\IRP\src\CommonModules\UsersEvent\Module.bsl">
        <lineToCover lineNumber="93" covered="true"/>
        <lineToCover lineNumber="94" covered="true"/>
    </file>     
    <file path="src\IRP\src\CommonModules\Saas\Module.bsl">
        <lineToCover lineNumber="2" covered="true"/>
        <lineToCover lineNumber="3" covered="true"/>
    </file>

Но в сонаре пути стоят обратными слешами, и из-за этого - система ничего не подгружает.
Пока не исправлю на

<?xml version="1.0" encoding="utf-8"?>
<coverage version="1">
    <file path="src/IRP/src/CommonModules/UsersEvent/Module.bsl">
        <lineToCover lineNumber="93" covered="true"/>
        <lineToCover lineNumber="94" covered="true"/>
    </file>     
    <file path="src/IRP/src/CommonModules/Saas/Module.bsl">
        <lineToCover lineNumber="2" covered="true"/>
        <lineToCover lineNumber="3" covered="true"/>
    </file>

Так что лучше, наверное - как то иметь возможность явного указания того, какой слешь тебе нужен. Хотя, странно это все, никогда бы не подумал на такое...

Падение на EDT 2020.5+

Писал в другую репу - сказали не их проблема.
1c-syntax/Coverage41C#58

C:\Users\DitriX>coverage-cli start --infobase test_database --output coverage.csv
?????????? - ?????? pid-????: C:\Users\DitriX\AppData\Local\Temp\coverage.17820.pid

C:\Users\DitriX>SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/EDT/components/1c-edt-2020.5.1+23-x86_64/plugins/ch.qos.logback.slf4j_1.1.2.v20160301-0943.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/EDT/components/1c-edt-2020.5.1+23-x86_64/plugins/org.slf4j.impl.log4j12_1.7.2.v20131105-2200.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
14:19:07.588 [main] DEBUG org.eclipse.jetty.util.log - Logging to Logger[org.eclipse.jetty.util.log] via org.eclipse.jetty.util.log.Slf4jLog
14:19:07.618 [main] INFO org.eclipse.jetty.util.log - Logging initialized @1881ms to org.eclipse.jetty.util.log.Slf4jLog
14:19:07.706 [main] DEBUG o.e.j.u.component.AbstractLifeCycle - starting org.eclipse.jetty.client.HttpClient@7fc44dec
SLF4J: Failed toString() invocation on an object of type [org.eclipse.jetty.util.component.ContainerLifeCycle$Bean]
java.lang.IncompatibleClassChangeError: org.eclipse.jetty.util.ssl.SslContextFactory and org.eclipse.jetty.util.ssl.SslContextFactory$Client disagree on InnerClasses attribute
at java.base/java.lang.Class.getDeclaringClass0(Native Method)
at java.base/java.lang.Class.isTopLevelClass(Class.java:1693)
at java.base/java.lang.Class.getSimpleBinaryName(Class.java:1678)
at java.base/java.lang.Class.getSimpleName0(Class.java:1562)
at java.base/java.lang.Class.getSimpleName(Class.java:1553)
at org.eclipse.jetty.util.ssl.SslContextFactory.toString(SslContextFactory.java:1770)
at java.base/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3031)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2908)
at java.base/java.util.Formatter.format(Formatter.java:2673)
at java.base/java.util.Formatter.format(Formatter.java:2609)
at java.base/java.lang.String.format(String.java:2897)
at org.eclipse.jetty.util.component.ContainerLifeCycle$Bean.toString(ContainerLifeCycle.java:796)
at org.slf4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:305)
at org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:277)
at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:231)
at org.eclipse.jetty.util.log.JettyAwareLogger.log(JettyAwareLogger.java:680)
at org.eclipse.jetty.util.log.JettyAwareLogger.debug(JettyAwareLogger.java:224)
at org.eclipse.jetty.util.log.Slf4jLog.debug(Slf4jLog.java:97)
at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:347)
at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:250)
at org.eclipse.jetty.client.HttpClient.doStart(HttpClient.java:203)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at com._1c.g5.v8.dt.internal.debug.core.runtime.client.RuntimeDebugHttpClient.(RuntimeDebugHttpClient.java:165)
at com.clouds42.Coverage41C.call(Coverage41C.java:84)
at com.clouds42.Coverage41C.call(Coverage41C.java:34)
at picocli.CommandLine.executeUserObject(CommandLine.java:1783)
at picocli.CommandLine.access$900(CommandLine.java:145)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2150)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2144)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2108)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:1975)
at picocli.CommandLine.execute(CommandLine.java:1904)
at com.clouds42.Coverage41C.main(Coverage41C.java:62)
14:19:07.741 [main] DEBUG o.e.j.u.component.ContainerLifeCycle - org.eclipse.jetty.client.HttpClient@7fc44dec added [FAILED toString()]
14:19:07.770 [main] DEBUG o.e.j.u.component.ContainerLifeCycle - org.eclipse.jetty.client.HttpClient@7fc44dec added {QueuedThreadPool[HttpClient@7fc44dec]@64df9a61{STOPPED,8<=0<=200,i=0,q=0}[org.eclipse.jetty.util.thread.TryExecutor$$Lambda$67/0x0000000800177c40@1ddae9b5],AUTO}
14:19:07.774 [main] DEBUG o.e.j.u.component.ContainerLifeCycle - org.eclipse.jetty.client.HttpClient@7fc44dec added {org.eclipse.jetty.io.MappedByteBufferPool@3383649e,POJO}
14:19:07.782 [main] DEBUG o.e.j.u.component.ContainerLifeCycle - org.eclipse.jetty.client.HttpClient@7fc44dec added {org.eclipse.jetty.util.thread.ScheduledExecutorScheduler@74e47444,AUTO}
14:19:07.783 [main] DEBUG o.e.j.u.component.ContainerLifeCycle - org.eclipse.jetty.client.HttpClient@7fc44dec added {org.eclipse.jetty.client.http.HttpClientTransportOverHTTP@9bd0fa6,AUTO}
14:19:07.786 [main] DEBUG o.e.j.u.component.ContainerLifeCycle - org.eclipse.jetty.client.HttpClient@7fc44dec added {org.eclipse.jetty.util.SocketAddressResolver$Async@46f699d5,POJO}

Конвертация pff файлов

У меня уже есть контур, который собирает pff. Хочется их конвертировать в формат сонара.

Не найден общий модуль

Есть общий модуль
CommonModules\Saas\Saas.mdo
У него стоит соответствующий ID, но система пишет, что он не найден.

ОШИБКА - Не найден общий модуль с идентификатором "66d24f37-b4c8-48bf-8abe-2550b2decc65"
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="66d24f37-b4c8-48bf-8abe-2550b2decc65">
  <name>Saas</name>
  <synonym>
    <key>en</key>
    <value>Saas</value>
  </synonym>
  <server>true</server>
  <serverCall>true</serverCall>
</mdclass:CommonModule>

Задать параметр ограничения памяти

Вопрос, у меня при старте покрытия - система сразу отжирает 4-8гигов.
Отжирает сам жарник Covrage41C, меня оттуда послали, и сказали что это не баг а фича, и надо ограничивать отдельно.
1c-syntax/Coverage41C#119
Вопрос - может у тебя сделать некий параметр, который можно будет передавать и ограничивать рост памяти таким образом?

Баг - команда convert выдает странные ошибки, если неверно указан каталог исходников

выдается куча строк

  • ОШИБКА - Не найден общий модуль с идентификатором "55d1909e-f552-441f-8e14-47d2e604cf6a"

а проще проверить наличие пути и выбросить исключение, как уже сделано в случае неверного пути к исходному файлу с замерами coverage.csv

Сброс кеша в файл

Как я понимаю - замер включается один раз и работает до конца.
Вопрос отсюда - можно ли как то системе сказать - периодамы сбрасывать кэш в файл csv, а не чтобы он хранился до последнего.
Или он всетаки куда-то скидывается во временные файлы?

Не найден клас mdclass:Configuration

Ловлю ошибку:

  ОШИБКА - Не найден модуль сеанса для конфигурации с идентификатором "f795147b-016b-4e3c-9d02-58181f16d51e"
10:03:55
  ОШИБКА - Не найден модуль сеанса для конфигурации с идентификатором "f795147b-016b-4e3c-9d02-58181f16d51e"
10:03:55

В моем случае этот UUID принадлежит файлу:
Configuration\Configuration.mdo

<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f795147b-016b-4e3c-9d02-58181f16d51e">
  <name>IRP</name>
  <synonym>
    <key>en</key>
    <value>IRP</value>
  </synonym>
  <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="e3520cbe-9782-4189-a67d-a0c8964a51a5"/>
  <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="a697ecc7-e3f7-4c7b-a293-303c19a1ddf6"/>
  <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="1e1b2c21-6d3c-4cff-95e5-1775402940eb"/>
  <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="c9e4b5e2-23ba-4dac-b9c5-f47d3a1a7ace"/>
  <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="a6cea7c6-a6a3-47f6-9424-59d2f6347dae"/>
  <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="9b7d6465-4ba2-48d9-be1b-7d5bffceab4a"/>
  <configurationExtensionCompatibilityMode>8.3.15</configurationExtensionCompatibilityMode>
  <defaultRunMode>ManagedApplication</defaultRunMode>
  <usePurposes>PersonalComputer</usePurposes>
  <defaultRoles>Role.FullAccess</defaultRoles>
........

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.