Programiranje

Kako napisati teste učinkovitosti z uporabo NBench

Pri delu z aplikacijami boste pogosto želeli vedeti o dodeljevanju pomnilnika, zbiranju smeti (GC) in prenosu kode. Vaša aplikacija je lahko počasna ali pa porablja veliko virov in želite ugotoviti, kaj je narobe.

Čeprav lahko z uporabo preskusov enote in pregledov kode zaznate funkcionalne težave in napake kode, boste morda vseeno potrebovali način za izolacijo težav z zmogljivostjo. Tu nam NBench pride prav. Ta članek predstavlja razpravo o NBench in kako ga lahko uporabimo za pisanje testov učinkovitosti za .NET aplikacije.

Kaj je NBench? Zakaj naj ga uporabljam?

NBench je priljubljen okvir za testiranje zmogljivosti, ki ga lahko uporabimo za profiliranje učinkovitosti metod v naši aplikaciji. NBench lahko izmeri pretočnost kode vaše aplikacije, dodeljevanje pomnilnika in režijske stroške GC, ki sodelujejo pri ponovnem pridobivanju pomnilnika, tako da očisti neželene predmete.

NBench lahko izkoristite za "enotno preizkušanje" učinkovitosti vaše aplikacije na enak način, kot pri pisanju enotnih testov uporabite ogrodja XUnit ali NUnit. Najbolj mi je všeč pri NBench, da ga je mogoče integrirati v vaš gradbeni cevovod. In čeprav ima NBench lastnega tekača, lahko NBench še vedno poganjate s pomočjo NUnit ali Resharper. Zdi se, kot da izvajate svoje enote.

NBench se distribuira kot paket NuGet. Ob predpostavki, da je Visual Studio že nameščen v vašem sistemu, lahko NBench namestite prek upravitelja paketov NuGet ali z naslednjim ukazom v konzoli upravitelja paketov.

Namesti paket NBench

Namestiti bi morali tudi paket NBench.Runner, ki se uporablja za zagon referenčne vrednosti. To lahko storite tudi prek NuGet ali pa iz konzole upravitelja paketov izvedete naslednji ukaz.

Namestitveni paket NBench.Runner

Če ste takšni kot jaz, boste želeli opraviti preizkuse učinkovitosti NBench z uporabo NUnit. Morda boste preučili tudi uporabo Pro.NBench.xUnit. Pro.NBench.xUnit vam omogoča odkrivanje, zagon ali razhroščevanje testov NBench z uporabo xUnit v ReSharper.

Pisanje preizkusov učinkovitosti z uporabo NBench

Raziščimo, kako lahko s pomočjo NBench zapišemo in izvedemo preizkuse učinkovitosti. Ustvarite nov projekt knjižnice predavanj in ga shranite s koristnim imenom. Nato dodajte pakete NBench in NBench.Runner, ki sem jih omenil zgoraj. Tu je začetek naše metode preizkušanja zmogljivosti NBench.

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

TestMode = TestMode.Test, SkipWarmups = true)]

[ElapsedTimeAssertion (MaxTimeMilliseconds = 5000)]

public void Benchmark_Performance_ElaspedTime ()

{

// Tukaj napišite kodo, ki jo želite primerjati

}

Upoštevajte, da moramo, ker primerjamo uspešnost, svojo metodo označiti z uporabo PerfBenchmark atribut. Ta atribut govori tekaču, kaj storiti s to metodo. Vključiti moramo tudi enega ali več merilnih atributov. Ker testiramo hitrost izvedbe, uporabljamo ElapsedTimeAssertion atribut, da določite čas, v katerem naj se metoda zaključi. Obstaja veliko drugih lastnosti trditve, ki jih lahko izkoristite. Podprte trditve v NBench vključujejo naslednje:

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

Naslednja metoda prikazuje, kako lahko primerjamo uspešnost zbiralca smeti. The Benchmark_Performance_GC metoda nam daje največji, najmanjši, povprečni in standardni odmik zbirk, ki se pojavijo za vsako od treh generacij GC (generacija 0, 1 in 2).

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

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

public void Benchmark_Performance_GC ()

{

// Tukaj napišite kodo, ki jo želite primerjati

}

Če želite primerjati zmogljivost na podlagi porabe pomnilnika, je tukaj testna metoda, ki jo lahko uporabite.

[PerfBenchmark (Opis,

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

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

javna praznina Benchmark_Performance_Memory ()

{

// Tukaj napišite kodo, ki jo želite primerjati

}

The Trditev o pomnilniku atribut lahko uporabite za določitev, da želite, da preskušana metoda omeji tako, da pri vsakem zagonu primerjalnega preizkusa porabi največ določeno količino pomnilnika. Če na primer zgoraj prikazana metoda porabi več kot 64 KB pomnilnika, se šteje, da test ni uspel.

Upoštevajte, da sem v vsakem od zgornjih primerov kode preskočil kodo, ki jo je treba primerjati. Primerjalno preizkušanje metod vaše aplikacije je preprosto prilepite kodo v primerjalne metode, kjer sem jih navedel.

NBench je odprtokodni, samodejni okvir za avtomatizirano profiliranje zmogljivosti za .NET aplikacije. NBench omogoča preizkušanje zmogljivosti in obremenitve skoraj tako enostavno kot pisanje in izvajanje preskusov enot. NBench lahko enostavno integrirate z enotami za testiranje enot, kot je NUnit. NBench lahko celo integrirate z xUnit in zaženete teste v ReSharper ali Visual Studio Test Explorer. Več o NBenchu ​​lahko izveste na GitHub in na spletnem mestu Petabridge.

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