2017-03-03 4 views
0

ich eine Feature-Datei wie untenPlatzhalter verwenden in Feature-Datei von Behat

Feature: Test send API request 
    In order to test my API 
    As a Tester 
    I want to be able to perform HTTP request 


    Scenario:Sending GET request to activate user after registration api to verify whether the response code is 403 when 'X-Auth-Token' is missing 
      When I have a request "GET /api/activateuser?token=:tokenhash" 
      And I set the "Accept" header to "application/json" 
      And I set the "X-Auth-Token" header to "0125ee8dfe42bafbec95aa0d2676c91d8a780715b76504cf798aae6e74c08a30" 
      . 
      . 

    Scenario:Sending GET request to activate user after registration api to verify whether the response code is 403 when 'X-Auth-Token' is invalid 
      When I have a request "GET /api/activateuser?token=:tokenhash" 
      And I set the "Accept" header to "application/json" 
      And I set the "X-Auth-Token" header to "0125ee8dfe42bafbec95aa0d2676c91d8a780715b76504cf798aae6e74c08a30" 
      . 
      . 

    Scenario:Sending GET request to activate user after registration api to verify whether the response code is 404 when userid is invalid 
      When I have a request "GET /api/activateuser?token=:tokenhash" 
      And I set the "Accept" header to "application/json" 
      And I set the "X-Auth-Token" header to "0125ee8dfe42bafbec95aa0d2676c91d8a780715b76504cf798aae6e74c08a30" 
      . 
      . 

In der Anfrage 'X-Auth-Token' Parameter für alle scnerios gleich sein, die nicht häufig ändern. Also habe ich darüber nachgedacht, es auf eine Variable zu setzen und diese Variable in den Szenarien zu verwenden. Aber ich habe keine Methode gefunden, dies in Behat zu tun. Es ist in Ordnung, auch wenn wir den Wert in behat.yml setzen und im Szenario verwenden können, aber selbst das war nicht möglich.

Auch ich habe mehr als einen Parameter, der so eingestellt werden musste.

Gibt es also eine Methode, den Wert einmal festzulegen und in jedem Szenario erneut zu verwenden?

Antwort

1

Sie können eine Kombination von zwei verwenden.

  1. A Background Hier können Sie alle allgemeinen Schritte für alle Szenarien ausführen.
  2. Ein BeforeFeature Haken, der Ihren aktuellen Testbereich vorbereitet.

Was passiert, ist dies.

  1. @BeforeScenario Tag läuft prepare() Methode, bevor alles andere Ihre Variable für aktuelle Feature-Sitzung zu setzen.

  2. Schrittdefinitionen unter Background Aufgabe vor jedem Szenario ausführen, sodass Sie sie nicht in jedem Szenario duplizieren müssen.

HINWEIS: Wenn Ihr X-Auth-Token nicht häufig ändern Sie dann nur schwer Code den Wert in Ihrer FeatureContext Datei und nicht implementieren Schritt 2 überhaupt oben. Mein Beispiel gibt Ihnen eine Vorstellung von einigen nützlichen Funktionen von Behat.

Beispiel

Passen Sie es für Ihren Bedarf!

FeatureContext

namespace Your\Bundle\Features\Context; 

use Behat\Behat\Hook\Scope\BeforeScenarioScope; 
... 

class FeatureContext ... 
{ 
    private static $xAuthToken; 

    /** 
    * @BeforeFeature 
    */ 
    public static function prepare() 
    { 
     self::setXAuthToken(); 
    } 

    private static function setXAuthToken() 
    { 
     self::$xAuthToken = 123; 
    } 

    /** 
    * @Given /^I set the header "([^"]*)" to "([^"]*)"$/ 
    */ 
    public function iSetTheHeader($header, $value) 
    { 
     // Do whatever you want 
    } 

    /** 
    * @Given /^I send "([^"]*)" request to "([^"]*)"$/ 
    */ 
    public function iSendRequest($method, $url) 
    { 
     // Do whatever you want 
    } 

    /** 
    * @Given /^the X-Auth-Token is available$/ 
    */ 
    public function theXAuthTokenIsAvailable() 
    { 
     echo self::$xAuthToken; 
    } 
} 

Feature-Datei

Feature: Shared token 

    Background: I am common to all scenarios 
    Given I set the header "Accept" to "application/json" 
    When I send "GET" request to "/api/hello-world" 

    Scenario: 1 
    Given the X-Auth-Token is available 

    Scenario: 2 
    Given the X-Auth-Token is available 

RESULT

enter image description here

Verwandte Themen