Использование заполнителей в файле функций 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"
            .
            .

В запросе параметр X-Auth-Token будет одинаковым для всех скриптов и не будет часто меняться. Поэтому я подумал установить для него какую-то переменную и использовать эту переменную в сценариях. Но не нашел никакого способа сделать это по-своему. Ничего страшного, даже если мы можем установить значение в behat.yml и использовать его в сценарии, но даже это было невозможно.

Также у меня есть более одного параметра, который необходимо установить таким образом.

Итак, есть ли способ установить значение один раз и повторно использовать его в каждом сценарии?


person Nandakumar V    schedule 03.03.2017    source источник


Ответы (1)


Вы можете использовать комбинацию из двух.

  1. Фон, в котором выполняются все стандартные шаги. для всех сценариев.
  2. Хук BeforeFeature, который подготавливает текущий объем испытаний.

Ниже происходит следующее.

  1. Тег @BeforeScenario запускает метод prepare() прежде всего, чтобы установить вашу переменную для текущего сеанса функции.

  2. Определения шагов в задаче Background выполняются перед каждым сценарием, поэтому вам не нужно дублировать их в каждом сценарии.

ПРИМЕЧАНИЕ. Если ваш X-Auth-Token не будет часто меняться, просто жестко закодируйте значение в файле FeatureContext и вообще не выполняйте шаг 2 выше. Мой пример здесь, чтобы дать вам представление о некоторых полезных функциях Behat.

ПРИМЕР

Отрегулируйте его для ваших нужд!

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: 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

РЕЗУЛЬТАТ

введите здесь описание изображения

person BentCoder    schedule 03.03.2017