specflow/ использовать одну и ту же случайную величину во всех сценариях

У меня есть 3 сценария, в первом я создаю пользователя со случайным идентификатором. и мне нужно использовать тот же случайный идентификатор в других сценариях. Я пробовал featurecontext для хранения значения Id. но когда я пытаюсь поместить это сохраненное значение в новую переменную "user", она всегда равна нулю (у меня нет сообщений об ошибках. Пользователь правильно создан в моем REST API, сообщение об ошибке находится на уровне API, потому что я ищу для нулевого пользователя) это мой код

Feature
Scenario: Create User
    Given a random user 
    When  I create that user throught the API
            | Field     | Value             |
            | Firstname | Firstname         |
            | Lastname  | Lastname          |   
    Then  the API should returns a "Created" response

Scenario: Check the User-API
    Given the user already created 
    When  i make a Get request of this user
    Then  the API should returns an "OK" response

Stepdefinition

        [Binding]

            public class CreationUtilisateurSteps
            {
                private string Id;
                private string user;

        [Given(@"a random user)]
                public void GivenARandomUser()
                {
                   id = RandomUtil.GetRandomString();
                   FeatureContext.Current["mystoredid"]=id;
                }

        [When(@"I create that user throught the API")]
            public void WhenICreateThatUserThroughtTheAPI(Table table)
            {
                var user = table.CreateInstance<UserProfile>();
                var client = new RestClient(Settings.Default);
                var request = new RestRequest(Method.POST);
                request.AddHeader("Token", "");
                request.AddHeader("Cache-Control", "no-cache");
                request.AddHeader("Content-Type", "");
                request.AddHeader("Accept", "");
                request.AddHeader("Authorization", "");
                request.AddParameter("undefined", @"
                 {
                 ""id"":""" + Id + @""",
                 ""profile"":
                 {""firstname"":""" + user.Firstname + @""",
                 ""lastname"":""" + user.Lastname + @""",
                 }", ParameterType.RequestBody);

                response = client.Execute(request);
            }

    [Then(@"the API should returns a (.*) response")]
            public void ThenTheAPIShouldReturnsACreatedResponse(string statusCode)
            {
                Assert.Equal(Enum.Parse(typeof(HttpStatusCode), statusCode), response.StatusCode);
                var jsonResponse = JsonConvert.DeserializeObject<dynamic>(response.Content);

            }

  [Given(@"the user already created ")]
        public void GivenLUtilisateurDejaCree()
        {
            user=FeatureContext.Current["mystoredid"].tostring();
        }

заранее спасибо

1 ответ

По моему опыту использования specflow не стоит полагаться на тестовые данные из одного теста для другого. Я нахожу это слишком хрупким, но, возможно, это только я.

Это, как говорится, и, возможно, я что-то упускаю, если данные шаги находятся в той же привязке, вы не могли бы изменить private string id в private static string id чтобы оно сохранялось между тестами?

Обновить

Вот пример, показывающий, что статическая переменная будет сохраняться между тестами:

namespace specflow
{
    [Binding]
    public class Class1
    {
        private static string id;

        [Given(@"I have a new user")]
        public void GivenIHaveANewUser()
        {
            id = "5";
        }

        [Given(@"I have the same user")]
        public void GivenIHaveTheSameUser()
        {
            Assert.That(id, Is.EqualTo("5"));
        }
    }
}

Feature: SpecFlowFeature1

Scenario: new user
    Given I have a new user

Scenario: same user
    Given I have the same user

При этом мне кажется, что у вас есть другие проблемы с вашими приемочными тестами. Звучит так, будто вы не удаляете этих пользователей после завершения теста. Это нормально, если вы работаете в среде, которая вас не волнует. Если вы работаете с общей средой или производственной средой, у вас есть много случайных пользователей, которые действительно не должны быть. Вы должны действительно иметь [AfterFeature] удаление пользователей из базы данных. Также было бы лучше создать и удалить пользователя для каждого теста. Таким образом, вы не полагаетесь на другой тест для данных, поэтому ваш тест менее хрупок.

Другие вопросы по тегам