Programmēšana

Kā rakstīt veiktspējas testus, izmantojot NBench

Strādājot ar lietojumprogrammām, jūs bieži vēlaties uzzināt atmiņas sadalījumu, atkritumu savākšanas (GC) pieskaitāmās izmaksas un koda caurlaidspēju. Jūsu lietojumprogramma var būt lēna vai patērēt daudz resursu, un jūs vēlaties uzzināt, kas ir nepareizi.

Lai gan funkcionālās problēmas un koda defektus varat atklāt, izmantojot vienības testus un kodu pārskatus, jums tomēr var būt nepieciešams veids, kā izolēt veiktspējas problēmas. Lūk, kur noderēs NBench. Šajā rakstā ir sniegta diskusija par NBench un to, kā mēs to varam izmantot, lai rakstītu .NET lietojumprogrammu veiktspējas testus.

Kas ir NBench? Kāpēc man to izmantot?

NBench ir populāra veiktspējas testēšanas sistēma, kuru var izmantot, lai profilētu metožu veiktspēju mūsu lietojumprogrammā. NBench var izmērīt jūsu lietojumprogrammas koda caurlaidspēju, atmiņas piešķiršanu un GC pieskaitāmās izmaksas, kas saistītas ar atmiņas atgūšanu, iztīrot nevēlamus objektus.

Jūs varat izmantot NBench, lai “pārbaudītu vienību” lietojumprogrammas darbībā tāpat kā rakstāt vienības testus, izmantojot XUnit vai NUnit ietvarus. Man vislabāk patīk NBench tas, ka to var integrēt jūsu būvniecības cauruļvadā. Lai arī NBench ir savs skrējējs, jūs joprojām varat palaist NBench, izmantojot NUnit vai Resharper. Tā jūtas tieši tāpat, kā vadīt vienības testus.

NBench tiek izplatīts kā NuGet pakete. Pieņemot, ka Visual Studio jau ir instalēta jūsu sistēmā, NBench varat instalēt, izmantojot NuGet pakotņu pārvaldnieku vai izmantojot šo pakotņu pārvaldnieka konsoles komandu.

Install-Package NBench

Jums vajadzētu arī instalēt paketi NBench.Runner, ko izmanto, lai palaistu jūsu etalonu. To var izdarīt, izmantojot arī NuGet, vai pakotņu pārvaldnieka konsolē izpildīt šo komandu.

Install-Package NBench.Runner

Ja jūs esat līdzīgs man, jūs vēlaties veikt savus NBench veiktspējas testus, izmantojot NUnit. Jūs varētu izpētīt arī Pro.NBench.xUnit lietošanu. Pro.NBench.xUnit ļauj jums atklāt, palaist vai atkļūdot NBench testus, izmantojot xUnit ReSharper.

Veiktspējas testu rakstīšana, izmantojot NBench

Izpētīsim, kā mēs varam rakstīt un izpildīt veiktspējas testus, izmantojot NBench. Izveidojiet jaunu klases bibliotēkas projektu un saglabājiet to ar noderīgu nosaukumu. Pēc tam pievienojiet NBench un NBench.Runner paketes, kuras es minēju iepriekš. Šeit ir sākums mūsu NBench veiktspējas pārbaudes metodei.

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

TestMode = TestMode.Test, SkipWarmups = true)]

[ElapsedTimeAssertion (MaxTimeMilliseconds = 5000)]

public void Benchmark_Performance_ElaspedTime ()

{

// Šeit uzrakstiet savu etalona kodu

}

Ņemiet vērā, ka, tā kā mēs salīdzinām veiktspēju, mums ir jāatzīmē sava metode, izmantojot PerfBenchmark atribūts. Šis atribūts stāsta skrējējam, ko darīt ar šo metodi. Mums jāiekļauj arī viens vai vairāki mērījumu atribūti. Tā kā mēs pārbaudām izpildes ātrumu, mēs izmantojam ElapsedTimeAssertion atribūts, lai norādītu laiku, kurā metodei jābūt pabeigtai. Ir daudz citu apgalvojumu atribūtu, kurus varat izmantot. NBench atbalstītie apgalvojumi ietver:

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

Šī metode parāda, kā mēs varam salīdzināt atkritumu savācēja veiktspēju. The Etalona_izrāde_GC metode dod mums kolekciju maksimālo, minimālo, vidējo un standartnovirzi, kas notiek katrai no trim GC paaudzēm (0., 1. un 2. paaudze).

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

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

public void Benchmark_Performance_GC ()

{

// Šeit uzrakstiet savu etalona kodu

}

Ja vēlaties salīdzināt veiktspēju, pamatojoties uz atmiņas patēriņu, šeit varat izmantot testa metodi.

[PerfBenchmark (Apraksts,

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

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

public void Benchmark_Performance_Memory ()

{

// Šeit uzrakstiet savu etalona kodu

}

The Atmiņas apgalvojums atribūtu var izmantot, lai norādītu, ka vēlaties, lai testējamā metode patērētu ne vairāk kā norādīto atmiņas daudzumu katrā etalona izpildē. Piemēram, ja iepriekš parādītā metode patērē vairāk par 64 KB atmiņas, tiek uzskatīts, ka pārbaude nav izdevusies.

Ņemiet vērā, ka katrā no iepriekš parādītajiem kodu piemēriem es izlaidu kodu, kas tiks salīdzināts. Lietojumprogrammas metožu etalonsalīdzināšana ir vienkārša koda ielīmēšana etalona metodēs, kur esmu norādījis.

Atvērtā koda, starpplatformu, automatizēta veiktspējas profilēšanas sistēma .NET lietojumprogrammām NBench padara veiktspējas un stresa testēšanu gandrīz tikpat vienkāršu kā vienības testu rakstīšana un izpildīšana. Jūs varat viegli integrēt NBench ar vienību testēšanas ietvariem, piemēram, NUnit. Jūs pat varat integrēt NBench ar xUnit un palaist testus ReSharper vai Visual Studio Test Explorer. Jūs varat uzzināt vairāk par NBench vietnē GitHub un vietnē Petabridge.