VSTest.Console.exe opzioni della riga di comando

VSTest.Console.exe è lo strumento da riga di comando per eseguire i test. È possibile specificare diverse opzioni in qualsiasi ordine nella riga di comando. Queste opzioni sono elencate in opzioni della riga di comando generale.

Nota

L'adapter MSTest in Visual Studio funziona anche in modalità legacy (equivalente all'esecuzione di test con mstest.exe) per garantire la compatibilità. In modalità legacy non può sfruttare la funzionalità TestCaseFilter. L'adattatore può passare alla modalità legacy quando viene specificato un file testsettings, forcelegacymode è impostato su true in un file runsettings oppure usando attributi come HostType.

Per eseguire test automatizzati in un computer basato sull'architettura arm, è necessario usare VSTest.Console.exe.

Aprire prompt dei comandi per sviluppatori per usare lo strumento da riga di comando oppure è possibile trovare lo strumento in %Program Files(x86)%\Microsoft Visual Studio\<versione>\<edition>\common7\ide\CommonExtensions\<Platform | Microsoft>.

Opzioni generali della riga di comando

Nella tabella seguente sono elencate le opzioni comunemente usate per VSTest.Console.exe e le descrizioni brevi. È possibile visualizzare un riepilogo simile digitando VSTest.Console/? in una riga di comando. Per informazioni di riferimento complete, incluse le opzioni interne e legacy che non sono elencate qui, vedere vstest.console.exe opzioni della riga di comando e opzioni omesse in modo specifico nel repository vstest.

Opzione Descrizione
[test dei nomi di file] Eseguire test dai file specificati. Separare più nomi di file di test con spazi.
Esempi: mytestproject.dll, mytestproject.dll myothertestproject.exe
/Settings:[nome file] Eseguire test con impostazioni aggiuntive, ad esempio agenti di raccolta dati. Per altre informazioni, vedere Configurare unit test usando un file con estensione runsettings
Esempio: /Settings:local.runsettings
/Tests:[ nome test] Eseguire test con nomi che contengono i valori specificati. Questo comando corrisponde al nome completo del test, incluso lo spazio dei nomi . Per fornire più valori, separarli in base a virgole.
Esempio: /Tests:TestMethod1,testMethod2
L'opzione della riga di comando /Tests non può essere usata con l'opzione della riga di comando /TestCaseFilter .
/Parallel Specifica che i test devono essere eseguiti in parallelo. Per impostazione predefinita, è possibile usare fino a tutti i core disponibili nel computer. È possibile configurare il numero di core da usare in un file di impostazioni.
/InIsolation Esegue i test in un processo isolato.
Questo isolamento rende meno probabile che il processo vstest.console.exe venga arrestato in caso di errore nei test, ma i test potrebbero essere eseguiti più lentamente.
/TestAdapterPath:[ percorso] Forza il processo vstest.console.exe a usare adattatori di test personalizzati da un percorso specificato (se presente) nell'esecuzione del test.
Esempio: /TestAdapterPath:[pathToCustomAdapters]
/Platform:[tipo di piattaforma] Forza l'uso dell'architettura della piattaforma specificata, anziché la piattaforma determinata dal runtime corrente. I valori non fanno distinzione tra maiuscole e minuscole; I valori accettati sono x86, x64, ARM64ARM, S390x, Ppc64le, , RiscV64e LoongArch64.
In Windows, solo x86 e x64 possono essere forzati in modo affidabile; specificando ARM i risultati in x64 nella maggior parte dei sistemi. Non specificare questa opzione per l'esecuzione in un runtime che non si trova nell'elenco di valori validi.
/Framework: [versione framework] Versione .NET di destinazione da usare per l'esecuzione di test.
I moduli brevi del framework moderno vengono accettati e analizzati dal parser del framework NuGet, ad esempio net48, net6.0o net10.0 (nonché i moduli lunghi come .NETFramework,Version=v4.8 e .NETCoreApp,Version=v10.0).
Vengono accettati anche gli Framework35alias legacy , Framework40Framework45, FrameworkCore10, e FrameworkUap10 .
TargetFrameworkAttribute viene usato per rilevare automaticamente questa opzione dall'assembly e per Framework40 impostazione predefinita quando l'attributo non è presente. È necessario specificare questa opzione in modo esplicito se si rimuove il TargetFrameworkAttribute dagli assembly .NET Core.
Se il framework di destinazione viene specificato come Framework35, i test vengono eseguiti in CLR 4.0 "modalità di compatibilità".
Esempio: /Framework:net8.0
/TestCaseFilter:[expression] Eseguire test che corrispondono all'espressione specificata.
<Expression> è del formato <proprietà>=<valore>[|<Expression>].
Esempio: /TestCaseFilter:"Priority=1"
Esempio: /TestCaseFilter:"TestCategory=Nightly|FullyQualifiedName=Namespace.ClassName.MethodName"
L'opzione della riga di comando /TestCaseFilter non può essere usata con l'opzione della riga di comando /Tests .
Per informazioni sulla creazione e l'uso di espressioni, vedere filtro TestCase. Quando si digita un filtro direttamente in una shell, vedere Espressioni di filtro di escape nella shell.
/Environment:[NAME]=[VALUE] Imposta il valore di una variabile di ambiente per il processo host di test. Crea la variabile, se non esiste, ed esegue l'override se lo fa. Questa opzione implica /InIsolation e forza l'esecuzione dei test in un processo isolato. Specificare l'opzione più volte per impostare più variabili. Forma breve: /e.
Esempio: /e:VARIABLE1=VALUE1
/? Visualizza le informazioni sull'utilizzo.
/Logger:[ URI/friendlyname] Specificare un logger per i risultati del test. Specificare il parametro più volte per abilitare più logger.
Esempio: per registrare i risultati in un file dei risultati dei test di Visual Studio (TRX), usare
/Logger:trx
[; LogFileName=<Valori predefiniti per il nome di file univoco>]
Usare LogFilePrefix=<prefix> invece di LogFileName mantenere un file separato e con timestamp per ogni esecuzione. LogFileName imposta un nome esplicito e sovrascrive il file precedente, mentre LogFilePrefix non lo è.
Per altre informazioni, vedere Esempio di registrazione.
/ListTests:[ nome file] Elenca i test individuati dal contenitore di test specificato. Forma breve: /lt.
Nota: l'opzione /TestCaseFilter non ha alcun effetto quando si elencano i test; controlla solo i test che vengono eseguiti.
/Blame Esegue i test in modalità di colpa. Questa opzione è utile per isolare i test problematici che causano l'arresto anomalo dell'host di test. Quando viene rilevato un arresto anomalo, crea un file di sequenza in TestResults/<Guid>/<Guid>_Sequence.xml che acquisisce l'ordine dei test eseguiti prima dell'arresto anomalo.
È anche possibile raccogliere un dump di arresto anomalo o di blocco, ad esempio /Blame:CollectDump;DumpType=full o /Blame:CollectHangDump;TestTimeout=90m;HangDumpType=mini. Le opzioni equivalenti dotnet test sono --blame-crash e --blame-hang.
Per i requisiti completi relativi alla matrice di opzioni e alla raccolta di dump, vedere l'articolo relativo alla colpa dell'agente di raccolta dati.
/Diag:[nome file] Scrive i log di traccia di diagnostica nel file specificato.
Impostare il livello di traccia con /Diag:<file name>;tracelevel=<off\|error\|warning\|info\|verbose> (il valore predefinito è verbose).
/ResultsDirectory:[ percorso] Se non esiste, la directory dei risultati del test verrà creata nel percorso specificato.
Esempio: /ResultsDirectory:<pathToResultsDirectory>
/ParentProcessId:[parentProcessId] ID processo del processo padre responsabile dell'avvio del processo corrente.
/Port:[ porta] Porta per la connessione socket e ricezione dei messaggi dell'evento.
/Collect:[dataCollector friendlyName] Abilita l'agente di raccolta dati per l'esecuzione del test. Altre informazioni.
@[file] Legge le opzioni aggiuntive dal file di risposta specificato. Gli argomenti nel file sono separati da spazi vuoti (spazi o righe nuove) e sono supportate le virgolette, in modo che le opzioni possano estendersi su più righe.
Esempio: vstest.console.exe @options.rsp

Mancia

Le opzioni e i valori non fanno distinzione tra maiuscole e minuscole.

Esempi

La sintassi per l'esecuzione di vstest.console.exe è:

vstest.console.exe [TestFileNames] [Options]

Per impostazione predefinita, il comando restituisce 0 quando viene chiuso normalmente, anche se non vengono individuati test. Se si desidera restituire un valore diverso da zero se non vengono individuati test, usare <TreatNoTestsAsError>true</TreatNoTestsAsError>'opzione runsettings.

Il comando seguente esegue vstest.console.exe per la libreria di test myTestProject.dll:

vstest.console.exe myTestProject.dll

Il comando seguente esegue vstest.console.exe con più file di test. Separare i nomi dei file di test con spazi:

vstest.console.exe myTestFile.dll myOtherTestFile.dll

Il comando seguente esegue vstest.console.exe con diverse opzioni. Esegue i test nel file myTestFile.dll in un processo isolato e usa le impostazioni specificate nel file Local.RunSettings. Inoltre, esegue solo i test contrassegnati come "Priority=1" e registra i risultati in un file trx.

vstest.console.exe myTestFile.dll /Settings:Local.RunSettings /InIsolation /TestCaseFilter:"Priority=1" /Logger:trx

Il comando seguente esegue vstest.console.exe con l'opzione /blame per la libreria di test myTestProject.dll:

vstest.console.exe myTestFile.dll /blame

Se si verifica un arresto anomalo dell'host di test, viene generato il file sequence.xml. Il file contiene nomi completi dei test nella sequenza di esecuzione fino a e include il test specifico in esecuzione al momento dell'arresto anomalo.

Se non è presente alcun arresto anomalo dell'host di test, il file disequence.xml non verrà generato.

Esempio di file sequence.xml generato:

<?xml version="1.0"?>
<TestSequence>
  <Test Name="TestProject.UnitTest1.TestMethodB" Source="D:\repos\TestProject\TestProject\bin\Debug\TestProject.dll" />
  <Test Name="TestProject.UnitTest1.TestMethodA" Source="D:\repos\TestProject\TestProject\bin\Debug\TestProject.dll" />
</TestSequence>

In questo caso, l'ultimo <Test Name> è il test in esecuzione al momento dell'arresto anomalo.

Codici di uscita

vstest.console.exe restituisce uno dei due codici di uscita:

Codice Meaning
0 Successo. L'operazione richiesta è stata completata e, per un'esecuzione di test, tutti i test eseguiti sono stati superati.
1 Fallimento. Ad esempio, uno o più test non riusciti, è stato segnalato un errore di esecuzione, la riga di comando non è valida o manca, non è stato possibile caricare un'origine di test o l'esecuzione è stata interrotta o annullata.

Il processo non restituisce mai alcun altro valore. Quando si eseguono test tramite dotnet test, il .NET SDK visualizza un codice di uscita diverso da zero quando l'esecuzione ha esito negativo nello stesso modo.

Quando l'individuazione non trova test corrispondenti, lo strumento di esecuzione stampa un avviso anziché un errore e per impostazione predefinita restituisce 0comunque . Per eseguire un'esecuzione che individua o seleziona zero test restituiti 1 , impostare <TreatNoTestsAsError>true</TreatNoTestsAsError> nell'elemento RunConfiguration del file con estensione runsettings . Per altre informazioni, vedere Configurare unit test usando un file con estensione runsettings.

Espressioni di filtro di escape nella shell

Un'espressione /TestCaseFilter viene analizzata sia dalla shell che dalla piattaforma di test, quindi alcuni caratteri richiedono l'escape specifico della shell prima chevstest.console.exe li riceva. La citazione dell'intera espressione, come negli esempi precedenti in questo articolo, evita la maggior parte dei problemi. I casi seguenti richiedono assistenza aggiuntiva:

  • PowerShell: la virgola (,) è l'operatore di matrice e il punto e virgola (;) è un separatore di istruzioni. Virgolette l'intera espressione di filtro in modo che venga passata letteralmente, ad esempio /TestCaseFilter:"FullyQualifiedName=MyNamespace.MyClass.MyMethod".

  • Bash e zsh (Linux e macOS): escape ! con una barra rovesciata quando si usa l'operatore !~ (non contiene), ad esempio --filter FullyQualifiedName\!~IntegrationTests con dotnet test. Virgolette anche valori che contengono caratteri con un significato speciale per la shell, ad esempio <, >o , in un elenco di argomenti di tipo generico:

    dotnet test --filter "FullyQualifiedName=MyNamespace.MyClass<Type1,Type2>.MyMethod"
    

Per informazioni di riferimento sui filtri completi e sulle proprietà supportate per ogni framework di test, vedere Filtro TestCase.

Esempio di registrazione

Ogni logger definisce i propri parametri. A differenza di trx, il logger della console consente di impostare il livello di dettaglio. Per altre informazioni, digitare nella riga di VSTest.Console/? comando.

Di seguito è riportato un esempio per il logger della console:

vstest.console.exe myTestFile.dll /logger:console;verbosity=detailed

I livelli di dettaglio supportati includono livelli di dettaglio silenziosi, minimi, normali e dettagliati.

In PowerShell è necessario usare le virgolette:

vstest.console.exe myTestFile.dll /logger:"console;verbosity=detailed"

Per l'elenco completo dei logger disponibili, nonché le istruzioni per la creazione di un logger personalizzato, vedere Creazione di report sui risultati dei test nel repository vstest.

Esempio UWP

Per la piattaforma UWP, è necessario fare riferimento al file appxrecipe anziché a una DLL.

vstest.console.exe /Logger:trx /Platform:x64 /framework:frameworkuap10 UnitTestsUWP\bin\x64\Release\UnitTestsUWP.build.appxrecipe

Variabili di ambiente

La piattaforma di test riconosce diverse variabili di ambiente. Di seguito sono riportati quelli più utili quando si eseguono test dalla riga di comando. Per l'elenco completo, vedere Variabili di ambiente riconosciute dalla piattaforma di test nel repository vstest.

Variable Descrizione
VSTEST_CONNECTION_TIMEOUT Timeout, in secondi, per stabilire connessioni tra componenti della piattaforma di test (vstest.console.exe, testhost e agente di raccolta dati). Il valore predefinito è 90. Aumentarlo nei computer lenti o quando la latenza di rete causa timeout di connessione.
VSTEST_DIAG Abilita la registrazione diagnostica e specifica il percorso del file di log. Equivalente all'opzione /Diag .
VSTEST_DIAG_VERBOSITY Imposta il livello di dettaglio della registrazione diagnostica quando VSTEST_DIAG è abilitato. I valori validi sono Verbose, Info, Warninge Error (il valore predefinito è Verbose).
VSTEST_HOST_DEBUG Impostare su qualsiasi valore non vuoto per abilitare il debug del processo testhost.
VSTEST_RUNNER_DEBUG Impostare su qualsiasi valore non vuoto per abilitare il debug dello strumento di esecuzione (vstest.console.exe).
VSTEST_DUMP_PATH Esegue l'override della directory predefinita in cui vengono archiviati i dump di arresto anomalo del sistema.
VSTEST_DUMP_FORCEPROCDUMP Impostare su qualsiasi valore non vuoto per forzare l'uso di ProcDump per la raccolta di dump di arresto anomalo del sistema.
VSTEST_DISABLE_UTF8_CONSOLE_ENCODING Impostare su 1 per disabilitare l'impostazione della codifica UTF-8 nell'output della console.
VSTEST_CONSOLE_PATH Percorso dell'eseguibile vstest.console.exe usato dall'app di inoltro di dotnet test .NET SDK. Equivale a -p:VSTestConsolePath quando si esegue dotnet test in un progetto.