kodtäckningsverktyg för dotnet-täckning
Den här artikeln gäller för: ✔️ .NET Core 3.1 SDK och senare versioner
Sammanfattning
dotnet-coverage [-h, --help] [--version] <command>
beskrivning
Verktyget dotnet-coverage
:
- Möjliggör plattformsoberoende insamling av kodtäckningsdata för en process som körs.
- Tillhandahåller plattformsoberoende sammanslagning av kodtäckningsrapporter.
Alternativ
-h|--help
Visar kommandoradshjälp.
--version
Visar versionen av verktyget dotnet-coverage.
Installera
Om du vill installera den senaste versionen av dotnet-coverage
NuGet-paketet använder du installationskommandot för dotnet-verktyget:
dotnet tool install --global dotnet-coverage
Kommandon
Command |
---|
dotnet-täckningssammanslagning |
dotnet-täckning samla in |
dotnet-coverage connect |
ögonblicksbild av dotnet-täckning |
dotnet-täckningsavstängning |
dotnet-täckningsinstrument |
dotnet-täckningssammanslagning
Kommandot merge
används för att sammanfoga flera kodtäckningsrapporter till en. Det här kommandot är tillgängligt på alla plattformar. Det här kommandot stöder följande format för kodtäckningsrapport:
coverage
cobertura
xml
Sammanfattning
dotnet-coverage merge
[--remove-input-files]
[-o|--output <output>] [-f|--output-format <output-format>]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<files>
Argument
<files>
Rapporter om täckning av indatakod.
Alternativ
--remove-input-files
Tar bort alla indatatäckningsrapporter som har sammanfogats.
-r, --recursive
.NET 7 SDK och tidigare versioner söker endast efter täckningsrapporter i underkataloger.
-o|--output <output>
Anger utdatafilen för kodtäckningsrapporten.
-f|--output-format <output-format>
Utdatafilformatet. Värden som stöds:
coverage
,xml
ochcobertura
. Standardvärdet ärcoverage
(binärt format som kan öppnas i Visual Studio).-l|--log-file <log-file>
Anger loggfilens sökväg. När du anger en katalog (med en sökvägsavgränsare i slutet) genereras en ny loggfil för varje process som analyseras.
-ll|--log-level <log-level>
Anger loggnivån. Värden som stöds:
Error
,Info
ochVerbose
.
dotnet-täckning samla in
Kommandot collect
används för att samla in kodtäckningsdata för alla .NET-processer och dess underprocesser. Du kan till exempel samla in kodtäckningsdata för ett konsolprogram eller ett Blazor-program. Det här kommandot stöder dynamisk och statisk instrumentering. Statisk instrumentation är tillgänglig på alla plattformar. Du kan ange filer som ska instrumenteras statiskt med hjälp av include-files
alternativet . Dynamisk instrumentering är tillgängligt i Windows (x86, x64 och Arm64), Linux (x64) och macOS (x64). Kommandot stöder endast .NET-moduler. Inbyggda moduler stöds inte.
Sammanfattning
Kommandot collect
kan köras i två lägen.
Kommandoläge
Kommandot collect
samlar in kodtäckning för den angivna processen som körs av command
argumentet.
dotnet-coverage collect
[-s|--settings <settings>] [-id|--session-id <session-id>]
[-if|--include-files <include-files>] [-o|--output <output>]
[-f|--output-format <output-format>] [-l|--log-file <log-file>]
[-ll|--log-level <log-level>] [-?|-h|--help]
<command> <args>
Serverläge
Kommandot collect
är värd för en server för kodtäckningssamling. Klienter kan ansluta till servern via connect
kommando.
dotnet-coverage collect
[-s|--settings <settings>] [-id|--session-id <session-id>]
[-sv|--server-mode] [-b|--background] [-t|--timeout]
[-if|--include-files <include-files>] [-o|--output <output>]
[-f|--output-format <output-format>] [-l|--log-file <log-file>]
[-ll|--log-level <log-level>] [-?|-h|--help]
Argument
<command>
Kommandot som du vill samla in kodtäckningsdata för.
<args>
Kommandoradsargumenten för kommandot.
Alternativ
-s|--settings <settings>
Anger sökvägen till inställningarna för XML-kodtäckning.
-id|--session-id <session-id>
Anger sessions-ID för kodtäckning. Om det inte anges genererar verktyget ett slumpmässigt GUID.
-sv|--server-mode
Startar insamlaren i serverläge. Klienter kan ansluta till servern med
connect
kommandot .-b|--background
Startar insamlingsservern för kodtäckning i en ny bakgrundsprocess. Klienter kan ansluta till servern med
connect
kommandot .-t|--timeout
Tidsgräns (i millisekunder) för interprocesskommunikation mellan klienter och servern.
-if|--include-files <include-files>
Anger en lista över filer som ska instrumenteras statiskt.
-o|--output <output>
Anger utdatafilen för kodtäckningsrapporten.
-f|--output-format <output-format>
Utdatafilformatet. Värden som stöds:
coverage
,xml
ochcobertura
. Standardvärdet ärcoverage
(binärt format som kan öppnas i Visual Studio).-l|--log-file <log-file>
Anger loggfilens sökväg. När du anger en katalog (med en sökvägsavgränsare i slutet) genereras en ny loggfil för varje process som analyseras.
-ll|--log-level <log-level>
Anger loggnivån. Värden som stöds:
Error
,Info
ochVerbose
.
dotnet-coverage connect
Kommandot connect
används för att ansluta till den befintliga servern och samlar in kodtäckningsdata för alla .NET-processer och dess underprocesser. Du kan till exempel samla in kodtäckningsdata för ett konsolprogram eller ett Blazor-program. Kommandot stöder endast .NET-moduler. Inbyggda moduler stöds inte.
Kommentar
Kommandot använder dynamisk instrumentering för alla underprocesser som är tillgängliga i Windows (x86, x64 och Arm64), Linux (x64) och macOS (x64). Om du behöver statiskt instrumentera ett .NET-modulanvändningskommando instrument
(med motsvarande sessions-ID-alternativ) innan du connect
kör kommandot.
Sammanfattning
dotnet-coverage connect
[-b|--background] [-t|--timeout]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<session>
<command> <args>
Argument
<session>
Sessions-ID:t för servern som hanteras av
collect
kommandot.<command>
Kommandot som du vill samla in kodtäckningsdata för.
<args>
Kommandoradsargumenten för kommandot.
Alternativ
-b|--background
Startar klienten i en ny bakgrundsprocess.
-t|--timeout
Tidsgräns (i millisekunder) för kommunikation mellan klienten och servern.*
-l|--log-file <log-file>
-l|--log-file <log-file>
Anger loggfilens sökväg. När du anger en katalog (med en sökvägsavgränsare i slutet) genereras en ny loggfil för varje process som analyseras.
-ll|--log-level <log-level>
Anger loggnivån. Värden som stöds:
Error
,Info
ochVerbose
.
ögonblicksbild av dotnet-täckning
Skapar en täckningsfil för befintlig kodtäckningssamling.
Sammanfattning
dotnet-coverage snapshot
[-r|--reset]
[-o|--output <output>]
[-tn|--tag-name <tag-name>] [-tid|--tag-identifier <tag-identifier>]
[-t|--timeout]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<session>
Argument
<session>
Sessions-ID för samlingen som en täckningsfil ska genereras för.
Alternativ
-r|--reset <reset>
Rensar befintlig täckningsinformation när en täckningsfil har skapats.
-o|--output <output>
Anger utdatafilen för kodtäckningsrapporten. Om det inte anges genereras det automatiskt med en tidsstämpel.
-tn|--tag-name <tag-name>
Skapar ett namn på en ögonblicksbildtagg i täckningsfilen med aktuell täckningsinformation. Taggnamn och taggidentifierare är ömsesidigt inkluderande.
-tid|--tag-identifier <tag-identifier>
Skapar en taggidentifierare för ögonblicksbilder i täckningsfilen med aktuell täckningsinformation. Taggnamn och taggidentifierare är ömsesidigt inkluderande.
-t|--timeout
Tidsgräns (i millisekunder) för kommunikation mellan klienten och servern.
-l|--log-file <log-file>
Anger loggfilens sökväg. När du anger en katalog (med en sökvägsavgränsare i slutet) genereras en ny loggfil för varje process som analyseras.
-ll|--log-level <log-level>
Anger loggnivån. Värden som stöds:
Error
,Info
ochVerbose
.
dotnet-täckningsavstängning
Stänger befintlig kodtäckningssamling.
Sammanfattning
dotnet-coverage shutdown
[-t|--timeout]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<session>
Argument
<session>
Sessions-ID för samlingen som ska stängas.
Alternativ
-t|--timeout
Tidsgräns (i millisekunder) för kommunikation mellan processer med servern.
-l|--log-file <log-file>
Anger loggfilens sökväg. När du anger en katalog (med en sökvägsavgränsare i slutet) genereras en ny loggfil för varje process som analyseras.
-ll|--log-level <log-level>
Anger loggnivån. Värden som stöds:
Error
,Info
ochVerbose
.
dotnet-täckningsinstrument
Instrumentkommandot används för att instrumentera binärt på disk.
Sammanfattning
dotnet-coverage instrument
[-s|--settings <settings>] [-id|--session-id <session-id>]
[-o|--output <output>] [-l|--log-file <log-file>]
[-ll|--log-level <log-level>] [-?|-h|--help]
<input-file>
Argument
<input-file>
Indatabinär.
Alternativ
-s|--settings <settings>
Anger sökvägen till inställningarna för XML-kodtäckning.
-id|--session-id <session-id>
Anger sessions-ID för kodtäckning. Om det inte anges genererar verktyget ett slumpmässigt GUID.
-o|--output <output>
Anger sökvägen till utdatafilen binär. Om det inte tillhandahålls utförs instrumentationen på plats.
-l|--log-file <log-file>
Anger loggfilens sökväg. När du anger en katalog (med en sökvägsavgränsare i slutet) genereras en ny loggfil för varje process som analyseras.
-ll|--log-level <log-level>
Anger loggnivån. Värden som stöds:
Error
,Info
ochVerbose
.
Exempelscenarier
Samla in kodtäckning
Samla in kodtäckningsdata för alla .NET-program (till exempel konsol eller Blazor) med hjälp av följande kommando:
dotnet-coverage collect dotnet run
Om ett program som kräver en signal avslutas kan du använda Ctrl+C, som fortfarande låter dig samla in kodtäckningsdata. För argumentet kan du ange alla kommandon som så småningom startar en .NET-app. Det kan till exempel vara ett PowerShell-skript.
Sessioner
När du kör kodtäckningsanalys på en .NET-server som bara väntar på meddelanden och skickar svar, behöver du ett sätt att stoppa servern för att få slutresultat för kodtäckning. Du kan använda Ctrl+C lokalt, men inte i Azure Pipelines. I dessa scenarier kan du använda sessioner. Du kan ange ett sessions-ID när du startar samlingen och sedan använda shutdown
kommandot för att stoppa samlingen och servern.
Anta till exempel att du har en server i katalogen D:\serverexample\server och ett testprojekt i katalogen D:\serverexample\tests . Testerna kommunicerar med servern via nätverket. Du kan starta kodtäckningssamlingen för servern på följande sätt:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo "dotnet run"
Sessions-ID angavs som serverdemo
. Sedan kan du köra tester på följande sätt:
D:\serverexample\tests> dotnet test
En kodtäckningsfil för sessionen serverdemo
kan genereras med aktuell täckning enligt följande:
dotnet-coverage snapshot --output after_first_test.coverage serverdemo
Dessutom kan en tagg för ögonblicksbilder läggas till i täckningsfilen med hjälp av taggalternativ på följande sätt:
dotnet-coverage snapshot --tag-name after_first_test --tag-identifier after_first_test serverdemo
Slutligen kan sessionen serverdemo
och servern stängas på följande sätt:
dotnet-coverage shutdown serverdemo
Följande är ett exempel på fullständiga utdata på serversidan:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo "dotnet run"
SessionId: serverdemo
Waiting for a connection... Connected!
Received: Hello!
Sent: HELLO!
Waiting for a connection... Code coverage results: output.coverage.
D:\serverexample\server>
Server- och klientläge
Insamling av kodtäckning kan också göras i server-klientläge. I det här scenariot startar en kodtäckningssamlingsserver och flera klienter kan ansluta till servern. Kodtäckning samlas in för alla klienter tillsammans.
Starta kodtäckningsservern med följande kommando:
dotnet-coverage collect --session-id serverdemo --server-mode
I det här exemplet angavs serverdemo
sessions-ID som för servern. En klient kan ansluta till servern med det här sessions-ID:t med hjälp av följande kommando:
dotnet-coverage connect serverdemo dotnet run
Slutligen kan du stänga sessionen serverdemo
och servern med hjälp av följande kommando:
dotnet-coverage shutdown serverdemo
Serverprocessen skapar en samlad kodtäckningsrapport för alla klienter och utgångar.
Följande är ett exempel på fullständiga utdata på serversidan:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo --server-mode
SessionId: serverdemo
// Server will be in idle state and wait for connect and shutdown commands
Code coverage results: output.coverage.
D:\serverexample\server>
Följande är ett exempel på fullständiga utdata på klientsidan:
D:\serverexample\server> dotnet-coverage connect serverdemo ConsoleApplication.exe World
Hello World!!
D:\serverexample\server> dotnet-coverage connect serverdemo WpfApplication.exe
D:\serverexample\server> dotnet-coverage shutdown serverdemo
D:\serverexample\server>
Du kan också starta både servern och klienten i bakgrundsläge. En annan process startar i bakgrunden och returnerar kontrollen tillbaka till användaren.
Följande är ett exempel på fullständiga utdata i klientläge för bakgrundsservern:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo --server-mode --background
D:\serverexample\server> dotnet-coverage connect --background serverdemo ConsoleApplication.exe World
D:\serverexample\server> dotnet-coverage connect --background serverdemo WpfApplication.exe
D:\serverexample\server> dotnet-coverage shutdown serverdemo
D:\serverexample\server>
Statisk kodtäckning för hanterade sammansättningar
Verktyget dotnet-coverage kan användas för att samla in kodtäckning för hanterade sammansättningar med hjälp av statisk instrumentation. Det finns tre olika metoder som du kan använda. För att demonstrera antar vi att vi har ett enkelt C#-konsolprogram:
D:\examples\ConsoleApp> dotnet run
Hello, World!
Använd kommandot collect med alternativet inkludera filer eller konfiguration
Om du inte vill använda instrument
kommandot kan de filer som ska instrumenteras anges med hjälp av --include-files
alternativet så här:
D:\examples\ConsoleApp> dotnet-coverage collect --include-files .\bin\Debug\net7.0\*.dll dotnet run
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
SessionId: 57862ec0-e512-49a5-8b66-2804174680fc
Hello, World!
Code coverage results: output.coverage.
Du kan också ange filer som ska instrumenteras med hjälp av konfigurationen på följande sätt:
<ModulePaths>
<IncludeDirectories>
<Directory>D:\examples\ConsoleApp\bin\Debug\net7.0</Directory>
</IncludeDirectories>
</ModulePaths>
Använda instrument och samla in kommandon
I det här fallet måste den första binärfilen instrumenteras på följande sätt:
D:\examples\ConsoleApp> dotnet-coverage instrument .\bin\Debug\net7.0\ConsoleApp.dll
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
Input file successfully instrumented.
Sedan kan du samla in kodtäckning på följande sätt:
D:\examples\ConsoleApp> dotnet-coverage collect .\bin\Debug\net7.0\ConsoleApp.exe
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
SessionId: a09e6bef-ff64-4b5f-8bb8-fc495ebb50ba
Hello, World!
Code coverage results: output.coverage.
Använda instrument och samla in kommandon i serverläge
I det här fallet kan du helt separera täckningssamlingen från att köra ditt program. Instrumentera först binärfilen enligt följande:
D:\examples\ConsoleApp> dotnet-coverage instrument --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 .\bin\Debug\net7.0\ConsoleApp.dll
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
Input file successfully instrumented.
Kommentar
Sessions-ID måste användas i det här scenariot för att säkerställa att programmet kan ansluta och tillhandahålla data till extern insamlare.
I det andra steget måste du starta täckningsinsamlaren på följande sätt:
D:\examples\ConsoleApp> dotnet-coverage collect --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 --server-mode
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
SessionId: 73c34ce5-501c-4369-a4cb-04d31427d1a4
Sedan kan programmet startas på följande sätt:
D:\examples\ConsoleApp> .\bin\Debug\net7.0\ConsoleApp.exe
Hello, World!
Slutligen kan insamlaren stängas på följande sätt:
D:\examples\ConsoleApp> dotnet-coverage shutdown 73c34ce5-501c-4369-a4cb-04d31427d1a4
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
Inställningar
Du kan ange en fil med inställningar när du använder collect
kommandot . Inställningsfilen kan användas för att undanta vissa moduler eller metoder från kodtäckningsanalys. Formatet är samma som datainsamlarens konfiguration i en runsettings-fil . Mer information finns i Anpassa kodtäckningsanalys. Här är ett exempel:
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<CodeCoverage>
<!--
Additional paths to search for .pdb (symbol) files. Symbols must be found for modules to be instrumented.
If .pdb files are in the same folder as the .dll or .exe files, they are automatically found. Otherwise, specify them here.
Note that searching for symbols increases code coverage run time. So keep this small and local.
-->
<SymbolSearchPaths>
<Path>C:\Users\User\Documents\Visual Studio 2012\Projects\ProjectX\bin\Debug</Path>
<Path>\\mybuildshare\builds\ProjectX</Path>
</SymbolSearchPaths>
<!--
About include/exclude lists:
Empty "Include" clauses imply all; empty "Exclude" clauses imply none.
Each element in the list is a regular expression (ECMAScript syntax). See /visualstudio/ide/using-regular-expressions-in-visual-studio.
An item must first match at least one entry in the include list to be included.
Included items must then not match any entries in the exclude list to remain included.
-->
<!-- Match assembly file paths: -->
<ModulePaths>
<Include>
<ModulePath>.*\.dll$</ModulePath>
<ModulePath>.*\.exe$</ModulePath>
</Include>
<Exclude>
<ModulePath>.*CPPUnitTestFramework.*</ModulePath>
</Exclude>
<!-- Additional directories from .NET assemblies should be statically instrumented: -->
<IncludeDirectories>
<Directory Recursive="true">C:\temp</Directory>
</IncludeDirectories>
</ModulePaths>
<!-- Match fully qualified names of functions: -->
<!-- (Use "\." to delimit namespaces in C# or Visual Basic, "::" in C++.) -->
<Functions>
<Exclude>
<Function>^Fabrikam\.UnitTest\..*</Function>
<Function>^std::.*</Function>
<Function>^ATL::.*</Function>
<Function>.*::__GetTestMethodInfo.*</Function>
<Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
<Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
</Exclude>
</Functions>
<!-- Match attributes on any code element: -->
<Attributes>
<Exclude>
<!-- Don't forget "Attribute" at the end of the name -->
<Attribute>^System\.Diagnostics\.DebuggerHiddenAttribute$</Attribute>
<Attribute>^System\.Diagnostics\.DebuggerNonUserCodeAttribute$</Attribute>
<Attribute>^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$</Attribute>
<Attribute>^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$</Attribute>
</Exclude>
</Attributes>
<!-- Match the path of the source files in which each method is defined: -->
<Sources>
<Exclude>
<Source>.*\\atlmfc\\.*</Source>
<Source>.*\\vctools\\.*</Source>
<Source>.*\\public\\sdk\\.*</Source>
<Source>.*\\microsoft sdks\\.*</Source>
<Source>.*\\vc\\include\\.*</Source>
</Exclude>
</Sources>
<!-- Match the company name property in the assembly: -->
<CompanyNames>
<Exclude>
<CompanyName>.*microsoft.*</CompanyName>
</Exclude>
</CompanyNames>
<!-- Match the public key token of a signed assembly: -->
<PublicKeyTokens>
<!-- Exclude Visual Studio extensions: -->
<Exclude>
<PublicKeyToken>^B77A5C561934E089$</PublicKeyToken>
<PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>
<PublicKeyToken>^31BF3856AD364E35$</PublicKeyToken>
<PublicKeyToken>^89845DCD8080CC91$</PublicKeyToken>
<PublicKeyToken>^71E9BCE111E9429C$</PublicKeyToken>
<PublicKeyToken>^8F50407C4E9E73B6$</PublicKeyToken>
<PublicKeyToken>^E361AF139669C375$</PublicKeyToken>
</Exclude>
</PublicKeyTokens>
<EnableStaticManagedInstrumentation>True</EnableStaticManagedInstrumentation>
<EnableDynamicManagedInstrumentation>True</EnableDynamicManagedInstrumentation>
</CodeCoverage>
</Configuration>
Koppla kodtäckningsrapporter
Du kan sammanfoga a.coverage
och b.coverage
lagra data på merged.coverage
följande sätt:
dotnet-coverage merge -o merged.coverage a.coverage b.coverage
Om du till exempel kör ett kommando som dotnet test --collect "Code Coverage"
lagras täckningsrapporten i en mapp som heter ett slumpmässigt GUID. Sådana mappar är svåra att hitta och sammanfoga. Med det här verktyget kan du slå samman alla kodtäckningsrapporter för alla dina projekt med hjälp av globbande mönster på följande sätt:
dotnet-coverage merge -o merged.cobertura.xml -f cobertura **\*.coverage
Föregående kommando sammanfogar alla täckningsrapporter från den aktuella katalogen och alla underkataloger och lagrar resultatet i en cobertura-fil. I Azure Pipelines kan du använda aktiviteten Publicera kodtäckningsresultat för att publicera en sammanslagen cobertura-rapport.
Du kan använda merge
kommandot för att konvertera en kodtäckningsrapport till ett annat format. Följande kommando konverterar till exempel en rapport om täckning av binär kod till XML-format.
dotnet-coverage merge -o output.xml -f xml input.coverage