Programovanie

Ako písať testy výkonu pomocou NBench

Pri práci s aplikáciami budete často potrebovať informácie o alokácii pamäte, réžii odvozu odpadu (GC) a priepustnosti kódu. Vaša aplikácia môže byť pomalá alebo môže vyžadovať veľa zdrojov a vy by ste chceli zistiť, čo nie je v poriadku.

Aj keď funkčné problémy a chyby kódu zistíte pomocou testov jednotiek a kontroly kódu, možno budete potrebovať spôsob, ako izolovať problémy s výkonom. Tu prichádza vhod NBench. Tento článok predstavuje diskusiu o aplikácii NBench a o tom, ako ju môžeme použiť na napísanie testov výkonu pre aplikácie .NET.

Čo je to NBench? Prečo by som to mal používať?

NBench je populárny rámec na testovanie výkonu, ktorý je možné použiť na profilovanie výkonu metód v našej aplikácii. NBench dokáže merať priepustnosť kódu vašej aplikácie, alokáciu pamäte a réžiu GC zapojenú do regenerácie pamäte vyčistením nežiaducich objektov.

Môžete využiť program NBench na „testovanie jednotiek“ výkonu vašej aplikácie rovnakým spôsobom, ako píšete testy na jednotku pomocou rámcov XUnit alebo NUnit. Na NBench sa mi najviac páči, že sa dá integrovať do vášho zostavovacieho potrubia. A aj keď má NBench vlastného bežca, stále môžete NBench spustiť pomocou NUnit alebo Resharper. Je to ako keby ste vykonali testy jednotky.

NBench je distribuovaný ako balík NuGet. Za predpokladu, že Visual Studio je už vo vašom systéme nainštalovaný, môžete NBench nainštalovať prostredníctvom správcu balíkov NuGet alebo pomocou nasledujúceho príkazu v konzole správcu balíkov.

Inštalačný balík NBench

Mali by ste si tiež nainštalovať balíček NBench.Runner, ktorý slúži na spustenie vášho benchmarku. Môžete to urobiť aj prostredníctvom NuGet, alebo môžete vykonať nasledujúci príkaz z konzoly správcu balíkov.

Inštalačný balík NBench.Runner

Ak ste ako ja, budete chcieť spustiť svoje testy výkonu NBench pomocou NUnit. Môžete sa tiež pozrieť na používanie Pro.NBench.xUnit. Pro.NBench.xUnit vám umožňuje objaviť, spustiť alebo odladiť testy NBench pomocou xUnit v ReSharper.

Písanie testov výkonu pomocou NBench

Poďme preskúmať, ako môžeme písať a vykonávať testy výkonu pomocou NBench. Vytvorte nový projekt knižnice tried a uložte ho s užitočným názvom. Ďalej pridajte balíčky NBench a NBench.Runner, ktoré som spomenul vyššie. Tu je začiatok našej metódy testovania výkonu NBench.

[PerfBenchmark (NumberOfIterations = 1, RunMode = RunMode.Throughput,

TestMode = TestMode.Test, SkipWarmups = true)]

[ElapsedTimeAssertion (MaxTimeMilliseconds = 5000)]

public void Benchmark_Performance_ElaspedTime ()

{

// Sem napíšte váš kód, ktorý bude porovnateľný

}

Upozorňujeme, že pretože porovnávame výkon, musíme našu metódu označiť pomocou PerfBenchmark atribút. Tento atribút hovorí bežcovi, čo má s touto metódou robiť. Musíme tiež zahrnúť jeden alebo viac atribútov merania. Pretože testujeme rýchlosť vykonávania, použijeme ElapsedTimeAssertion atribút určiť čas, do ktorého by sa metóda mala dokončiť. Existuje mnoho ďalších atribútov tvrdenia, ktoré môžete využiť. Medzi podporované tvrdenia v NBench patria:

  • MemoryAssertionAttribute
  • GcTotalAssertionAttribute
  • ElapsedTimeAssertionAttribute
  • CounterTotalAssertionAttribute
  • GcThroughputAssertionAttribute
  • CounterThroughputAssertionAttribute
  • PerformanceCounterTotalAssertionAttribute
  • PerformanceCounterTotalAssertionAttribute

Nasledujúca metóda ukazuje, ako môžeme porovnať výkonnosť garbage collector. The Benchmark_Performance_GC metóda nám dáva maximálnu, minimálnu, priemernú a štandardnú odchýlku kolekcií, ktoré sa vyskytujú pre každú z troch generácií GC (generácia 0, 1 a 2).

[PerfBenchmark (RunMode = RunMode.Iterations, TestMode = TestMode.Measurement)]

[GcMeasurement (GcMetric.TotalCollections, GcGeneration.AllGc)]

public void Benchmark_Performance_GC ()

{

// Sem napíšte váš kód, ktorý bude porovnateľný

}

Ak chcete porovnať výkon na základe spotreby pamäte, môžete použiť testovaciu metódu.

[PerfBenchmark (popis,

NumberOfIterations = 5, RunMode = RunMode.Throughput, RunTimeMilliseconds = 2500, TestMode = TestMode.Test)]

[MemoryAssertion (MemoryMetric.TotalBytesAllocated, MustBe.LessThanOrEqualTo, ByteConstants.SixtyFourKb)]

public void Benchmark_Performance_Memory ()

{

// Sem napíšte váš kód, ktorý bude porovnateľný

}

The MemoryAssertion Pomocou atribútu môžete určiť, že chcete obmedziť testovanú metódu tak, aby pri každom spustení referenčnej hodnoty nespotrebovala viac ako určené množstvo pamäte. Napríklad ak vyššie uvedená metóda spotrebuje viac ako 64 kB pamäte, test sa považuje za zlyhaný.

Všimnite si, že v každom z príkladov kódu, ktoré som uviedol vyššie, som preskočil kód, ktorý sa má porovnávať. Porovnávanie metód vašej aplikácie je jednoduchá záležitosť vloženia vášho kódu do porovnávacích metód, ktoré som už uviedol.

NBench ako open-source, multiplatformový, automatizovaný rámec profilovania výkonu pre aplikácie .NET. NBench robí testovanie výkonu a záťažové testy takmer rovnako ľahké ako písanie a vykonávanie testov jednotiek. NBench môžete ľahko integrovať s rámcami na testovanie jednotiek, ako je NUnit. Môžete dokonca integrovať NBench s xUnit a spustiť testy v ReSharper alebo Visual Studio Test Explorer. Viac informácií o NBench sa môžete dozvedieť na stránkach GitHub a na webových stránkach Petabridge.

$config[zx-auto] not found$config[zx-overlay] not found