我有3个场景,在第一个我用随机Id创建一个用户。 我需要在其他场景中使用该SAME随机ID。 我尝试过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();
}
提前谢谢
答案 0 :(得分:0)
根据我使用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]
从数据库中删除用户。
此外,最好为每个测试创建和删除用户。这样你就不会依赖另一个测试数据,因为你的测试不那么脆弱。