2016-04-06 9 views
1

Ich möchte parametrisierte Tests von mehreren Baugruppen parallel mit dem NUnit 3 Console Runner ausführen können. Der Schlüssel ist, dass ich die statischen Initialisierer parallel laufen lassen möchte (der langsame Teil der Tests).Führen Sie NUnit3-Tests parallel von mehreren Baugruppen aus Konsolen Runner aus

Ich kann dies mit dem ReSharper 10 Test Runner in VisualStudio arbeiten. Wenn ich das gleiche Projekt in der NUnit 3-Konsole ausführen, werden die statischen Initialisierer nicht parallel ausgeführt.

Ich habe eine einfache Komponententestlösung erstellt, um das Problem zu reproduzieren. Es gibt zwei Projekte. Jedes Projekt hat eine Testklasse, die wie die folgende Klasse aussieht. Ich habe die Protokollierung hinzugefügt, um zu zeigen, dass die Tests nicht parallel vom Konsolen-Runner ausgeführt werden.

[TestFixture] 
public class UnitTest1 
{ 
    public static IEnumerable Test1Static 
    { 
     get 
     { 

      Console.WriteLine($"before sleep 1 - {DateTime.Now}"); 
      Thread.Sleep(12000); 
      Console.WriteLine($"after sleep 1 - {DateTime.Now}"); 
      return new List<bool> { true, true }; 
     } 
    } 

    [Test, TestCaseSource(nameof(Test1Static))] 
    public void TestMethod1(bool tc) 
    { 
     Assert.IsTrue(tc); 
    } 
} 

Console runner Ergebnisse:

C:\dev>"C:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe" "C:\Users\username\Documents\Visual Studio 2015\Projects\testn 
unit1\UnitTestProject1\bin\Debug\UnitTestProject1.dll" "C:\Users\username\Documents\Visual Studio 2015\Projects\testnunit1\UnitTestProjec 
t2\bin\Debug\UnitTestProject2.dll" 
NUnit Console Runner 3.2.0 
Copyright (C) 2016 Charlie Poole 

Runtime Environment 
    OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 
    CLR Version: 4.0.30319.42000 

Test Files 
    C:\Users\username\Documents\Visual Studio 2015\Projects\testnunit1\UnitTestProject1\bin\Debug\UnitTestProject1.dll 
    C:\Users\username\Documents\Visual Studio 2015\Projects\testnunit1\UnitTestProject2\bin\Debug\UnitTestProject2.dll 

before sleep 1 - 4/6/2016 3:13:34 PM 
after sleep 1 - 4/6/2016 3:13:46 PM 
before sleep 2 - 4/6/2016 3:13:47 PM 
after sleep 2 - 4/6/2016 3:13:59 PM 

Run Settings 
    WorkDirectory: C:\dev 
    ImageRuntimeVersion: 4.0.30319 
    ImageTargetFrameworkName: .NETFramework,Version=v4.5.2 
    ImageRequiresX86: False 
    ImageRequiresDefaultAppDomainAssemblyResolver: False 
    NumberOfTestWorkers: 8 

Test Run Summary 
    Overall result: Passed 

Antwort

1

Sie haben NUnit nicht gesagt, die beiden Baugruppen in parallelen Prozessen laufen. Fügen Sie --process: Parallel zu Ihrer Befehlszeile hinzu. Schlagen Sie vor, die Dokumentation zu Version 3 unter http://github.com/nunit/docs.wiki zu lesen und nicht nach der Dokumentation der älteren Version zu gehen.

Abhängig von der Leistung möchten Sie möglicherweise die Anzahl der parallelen Threads pro Prozess (als Standardwert von 8 auf Ihrem Computer angezeigt) auf eine niedrigere Anzahl reduzieren.

+0

Ich erhalte eine Fehlermeldung "Der Wert 'Parallel' ist nicht gültig für die Option '--process'". Basierend auf https://github.com/nunit/docs/wiki/Console-Command-Line habe ich versucht "--process: Multiple" zu verwenden. Dadurch konnten die Tests ausgeführt werden, aber ich habe das gleiche Ergebnis wie ohne diese Option. Ich bin in der Lage zu beweisen, dass die Konsole Runner Testfälle parallel läuft, es läuft nur nicht die statischen Initialisierer für jede Baugruppe parallel. – rsideb

+0

Sorry, mein Fehler. Ich meinte Mehrfaches. Zwei Assemblys werden gleichzeitig ausgeführt. Wenn die statische Initialisierung nicht von einer externen Ressource abhängig ist, würde ich erwarten, dass sie parallel läuft. Wenn nicht, möchten Sie vielleicht ein Problem mit einem einfachen Retro-Fall einreichen. – Charlie

Verwandte Themen