Přejít na obsah|Přejít k hlavnímu menu|Přejít k vyhledávání

edhouse-CookieGdpr-Policy-s
3203043
0
/cz/gdpr/
320650B6B

Zpět na Blog

NávodySQA

Vylepšete své automatizované testy

6.10.2026Jiří Veselý

Reqnroll je nástroj pro práci s projekty a je nástupcem SpecFlow. Používá Gherkin k psaní testovacích případů v přirozených jazycích a podporuje více než 70 jazyků. Kromě angličtiny podporuje formát Gherkin mnoho dalších jazyků, jako je němčina, španělština a francouzština. Aby se předešlo komunikačním chybám způsobeným překlady, doporučuje se ponechat specifikace a popisy akceptačních testů v jazyce daného oboru. 

Reqnroll používá Cucumber Expressions jako výchozí metodu pro propojení definic kroků s kroky. 

Bezplatný a otevřený BDD-Framework pro .NET 

Výhody pro všechny 

Reqnroll usnadňuje automatizaci testování tím, že z ní činí týmovou práci, což umožňuje každému členovi týmu efektivněji využívat své dovednosti. 

Pomozte svému týmu vyplnit mezery při definování požadavků 

Použití BDD k určení akceptačních kritérií vám pomůže rychle identifikovat skryté detaily a zajistit, že je všichni interpretují stejným způsobem. 

Společný jazyk, kterému rozumí všechny strany 

Různí členové týmu s jedinečnými názory mohou téma zkomplikovat. Použití Gherkinu pomáhá vytvořit společné porozumění pro celý tým. 

BDD (Behavior driven development) 

V softwarovém inženýrství je behavior-driven development (BDD) proces vývoje softwaru, který podporuje spolupráci mezi vývojáři, odborníky na zajištění kvality a zástupci zákazníků na softwarovém projektu. 

3 části 

Část 1 

Vývojář 

Zaměřte se na kódování – porozumění potřebám zainteresovaných stran 

Tester 

Zaměřte se na psaní testů v přirozeném jazyce namísto vytváření složitých testovacích kódů.  

Reqnroll přeměňuje scénáře Gherkin na automatizované testy a pomáhá týmům propojit automatizaci s funkčními soubory, což usnadňuje sdílení výsledných příkladů. 

Vlastník produktu 

Efektivnější spolupráce s vaším týmem. 

Část 2 

Formulace 

Formulace je proces převodu klíčových příkladů z objevů do formální dokumentace, jako jsou snadno čitelné scénáře Gherkin. 

Část 3 

Automatizace 

Automatizace zahrnuje transformaci formalizovaných scénářů do automatizovaných akceptačních testů. Tyto testy výrazně snižují úsilí potřebné pro regresní testování a poskytují okamžitou zpětnou vazbu, když chování systému již neodpovídá dokumentaci jeho specifikací. 

Vývojáři implementují definice kroků. 

Jednoduchý příklad 

Soubory testů jsou nazývány feature a obsahují jednotlivé scénáře (1– N), viz níže. 

Feature file “Calculator.feature” (vytvořeno testerem, product ownerem, vývojářem) 

Feature: Calculator 

 

Simple calculator for adding two numbers 

 

@CalculatorXGherkin 

Scenario: Add two numbers 

Given the first number is 50 

And the second number is 70 

When the two numbers are added 

Then the result should be 120 

 

Scenario: Add two numbers 2 

Given the first number is 10 

And the second number is 10 

When the two numbers are added 

Then the result should be 20

Step definitions (vytvořeno vývojářem)

using NUnit.Framework; 

 

namespace CalculatorXGherkin.StepDefinitions 

{ 

    [Binding] 

    public sealed class CalculatorStepDefinitions 

    { 

        int? firstNumber = null; 

        int? secondNumber = null; 

 

        [Given("the first number is {int}")] 

        public void GivenTheFirstNumberIs(int number) 

        { 

            firstNumber = number; 

        } 

 

        [Given("the second number is {int}")] 

        public void GivenTheSecondNumberIs(int number) 

        { 

            secondNumber = number; 

        } 

 

        [When("the two numbers are added")] 

        public void WhenTheTwoNumbersAreAdded() 

        { 

            Assert.That(firstNumber, Is.Not.Null); 

            Assert.That(secondNumber, Is.Not.Null); 

        } 

 

        [Then("the result should be {int}")] 

        public void ThenTheResultShouldBe(int result) 

        { 

            if (firstNumber + secondNumber != result) 

            { 

throw new Exception($"Expected {result} but got {firstNumber + secondNumber}"); 

            } 

        } 

    } 

} 

Pojďme provést test

PS D:\Sources\CalculatorXGherkin>  dotnet.exe test 

Restore complete (1.1s) 

  CalculatorXGherkin net8.0 succeeded (1.2s) → bin\Debug\net8.0\CalculatorXGherkin.dll 

NUnit Adapter 6.0.0.0: Test execution started 

Running all tests in D:\Sources\CalculatorXGherkin\bin\Debug\net8.0\CalculatorXGherkin.dll 

   NUnit3TestExecutor discovered 2 of 2 NUnit test cases using Current Discovery mode, Non-Explicit run 

Given the first number is 50 

-> done: CalculatorStepDefinitions.GivenTheFirstNumberIs(50) (0.0s) 

And the second number is 70 

-> done: CalculatorStepDefinitions.GivenTheSecondNumberIs(70) (0.0s) 

When the two numbers are added 

-> done: CalculatorStepDefinitions.WhenTheTwoNumbersAreAdded() (0.0s) 

Then the result should be 120 

-> done: CalculatorStepDefinitions.ThenTheResultShouldBe(120) (0.0s) 

 

Given the first number is 10 

-> done: CalculatorStepDefinitions.GivenTheFirstNumberIs(10) (0.0s) 

And the second number is 10 

-> done: CalculatorStepDefinitions.GivenTheSecondNumberIs(10) (0.0s) 

When the two numbers are added 

-> done: CalculatorStepDefinitions.WhenTheTwoNumbersAreAdded() (0.0s) 

Then the result should be 20 

-> done: CalculatorStepDefinitions.ThenTheResultShouldBe(20) (0.0s) 

NUnit Adapter 6.0.0.0: Test execution complete 

CalculatorXGherkin test net8.0 succeeded (1.3s) 

Test summary: total: 2, failed: 0, succeeded: 2, skipped: 0, duration: 1.3s 

Build succeeded in 4.1s

Další využití – testování WebUI 

Reqnroll lze využít i k testování webových aplikací. 

Implementujeme kroky (step definitions) pro tlačítka, rozbalovací seznamy atd. 
Například v projektu React použijeme k identifikaci testované položky speciální atribut „data-testid“. 

Definice kroku (step definition)

/// <summary> 

/// Button is located by attribute 'data-testid' 

/// </summary> 

/// <param name="name"></param> 

/// <returns></returns> 

[Then(@"Click on button '([^']*)'")] 

public async Task ThenClickOnButton(string id) 

{ 

    Button button = new(driver.Page, id); 

    await button.ClickOnButton(); 

} 

// Implementace stisknutí tlačítka 

internal class Button 

{ 

     private readonly string dataTestId; 

     private readonly IPage pageObject; 

 

     public Button(IPage page, string id) 

     { 

        dataTestId = id; 

        pageObject = page; 

     } 

 

     /// <summary> 

     /// Buton is located by data-testid attribute 

     /// </summary> 

     /// <returns></returns> 

public async Task ClickOnButton() 

     { 

          ILocator button = pageObject.GetByTestId(dataTestId); 

          await Assertions.Expect(button).ToBeVisibleAsync(); 

         await Click(button); 

     } 
 

private async Task Click(ILocator button) 

{ 

    var isDisabled = await button.IsDisabledAsync(); 

    if (!isDisabled) 

    { 

        await button.ClickAsync(); 

    } 

} 

}

Feature file (vytvoření nového uživatele)

Feature: ProcessCreateUser 

@PipelneServiceRole 

@Createuser 

Scenario: Create new user 

    Given I navigate to the application '/login' 

    And Login 

    When User logged 

    Then Go to Page '/settings' 

    When Page is '/settings' 

    Then Click on button 'usermanagement.tabtitle' 

        And Click on button 'usermanagement.createuser' 

        And Fill input 'createusermodal.username' with '#TestUserName2' 

        And ComboBox 'createusermodal.role' select item 'Service' 

        And Fill input 'createusermodal.password' with '#TestPassword' 

        And Fill input 'createusermodal.confirmpassword' with '#TestPassword' 

        And Click on button 'createusermodal.cancel' 

    Then Logout

Prefix ‘#’ označuje systémovou proměnnou operačního systému Microsoft Windows.

Formulář pro vytvoření uživatele

Taktéž můžeme testovat položky na jednotlivých webových stránkách

Testovaná stránka

Step definition

[Then(@"Validate items on page")] 

 public async Task ThenValidateItemsOnPage(Table table) 

 { 

     IEnumerable<PageItem> pageItems = table.CreateSet<PageItem>(); 

     PageItems items = new PageItems(driver.Page, pageItems); 

     await items.CheckItems(); 

 } 

Zde vidíme načtení tabulky do proměnné, kterou následně procházíme

IEnumerable<PageItem> pageItems = table.CreateSet<PageItem>();

Detekce položky

public async Task<bool> CheckItems() 

 { 

     using var item = pageItems.GetEnumerator(); 

     while (item.MoveNext()) 

     { 

         string labelLocatorId = string.Empty; 

         ILocator labelLocator; 

 

         // Label 

         if (!string.IsNullOrEmpty(item.Current.Label)) 

         { 

             labelLocator = page.GetByTestId(item.Current.Label); 

             await Assertions.Expect(labelLocator).ToBeVisibleAsync(); 

         } 

… 

  } 

Vice informací o projektu

https://docs.reqnroll.net/latest/index.html#

Plugin pro externí data 

https://docs.reqnroll.net/latest/integrations/externaldata.html

Podporované datové zdroje 

  • soubory CSV (formát ‘CSV’, s příponou .csv) 

  • soubory Excelu (formát Excel, přípony .xlsx, .xls, .xlsb) 

Použití tabulek s daty 

https://docs.reqnroll.net/latest/automation/datatable-helpers.html 

Sdílet článek

Autor

Jiří Veselý

Jiří VeselýProfesní kariéru jsem začínal jako programátor zakázkových aplikací. Po několika letech jsem přešel do oblasti softwarového testování, kde mohu naplno využít svou zvídavost, analytické myšlení a chuť hledat cesty ke zlepšování kvality.

Edhouse newsletter

Získejte aktuální info ze světa Edhouse - novinky, setkávání, aktuální trendy softwarové i hardwarové.

Registrací vyjadřujete souhlas se zpracováním osobních údajů.

Děkujeme za váš zájem o odběr našeho newsletteru! Pro dokončení registrace je potřeba potvrdit vaše přihlášení. Na zadaný e-mail jsme vám právě zaslali potvrzovací odkaz. Klikněte prosím na tento odkaz, aby bylo vaše přihlášení dokončeno. Pokud e-mail nenajdete, zkontrolujte prosím složku nevyžádané pošty (spam) nebo složku hromadné pošty.