我的问题是关于BDD(Specflow)的最佳实践。 在我正在测试的web应用程序中,我必须编写一个关于创建合同的功能。
要创建合约,用户必须传递By 8 Tabs,对于每个标签,用户将输入超过15个值(最小4,最多40个值)。
我的主张是:
Given Go to the screen "Contrats"
And Click on the button "New contract"
When Enter in Tab1
| Field1 | Field2 | Field3 |
| -----------| ------------| ----------|
And Click on the Next button
And Enter in Tab2
| Field1 | Field2 |
| --------------- | -----------|
And Click on the Next button
And Enter in Tab3
| Field1 | Field2 | Field 3| Field4 | Field5 | Field6 |Field7 |
| -------| -------| ------ | -------- | --------- | -------| ----------------|
And Click on the Next button
And Enter in Tab4
| Field1 | Field2 | Field 3| Field4 | Field5 | Field6 |Field7 | Field8|
| -------| -------| ------ | -------- | --------- | -------| ----------------| ------|
And Click on the Next button
And Enter in Tab5
| Field1 | Field2 | Field 3| Field4 | Field5 | Field6
| -------| -------| ------ | -------- | --------- | -------|
And Click on the Next button
And Enter in Tab6
| Field1 | Field2 | Field3 |
| -----------| ------------| ----------|
And Click on the Next button
And Click on the Next button
And Cliquer sur Oui
And Enter in Tab7
| Field1 | Field2 |
| -----------| ------------|
And Click on confirm enregistration
And Save the contract reference and close the popup
And Click on button No
Then Redirecting the Summary tab
所以在这个Case的每个Tab中我必须有例子的模型:
public class Tab1{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
问题: 在此功能中,我尝试仅输入必填字段。 但在其他功能中,我必须输入更多字段,所以在Tab1中我将输入例如37个字段。 在这种情况下我能做些什么:
1 - 创建另一个模型?:我将有太多的模型
2 - 只创建一个具有最大字段的模型,对于第一种情况,我将为其他fiels设置一个空值(Field4-> Field37):模型的属性太多。
3 - 对于Tab1的每个bloc,我们创建类如:
public Class Tab1{
public Bloc1 Field1 { get; set; }
public Bloc2 Field2 { get; set; }
public Bloc3 Field3 { get; set; }
public class Bloc1{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
public Class Bloc2{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
.
.
.
}
但是使用此解决方案我如何编写我的功能?!
答案 0 :(得分:0)
即使我的测试数据遇到了同样的问题。我需要为每个测试传递20到30个字段,因为它包含端到端工作流程。如果您使用表,因为您需要为每组输入值创建表类(在您的情况下为Tab1,Tab2等),这将非常困难。
您可以使用 Scenatio Outline 而不是 Scenario 来传递输入值。见下面的例子:
# Basic Login check
# Verifies whether user is able to login or not
Scenario Outline: REG - Login Check
Given I have logged in using "<username>" and "<password>"
When I should see my username after login
Then I will logout of Echo
Examples:
| username | password |Field1|Field2|Field3|Field4|Field5|
| lee kirby-walker | LKirby-Walker10* |input1|input2|input3|input4|input5|
| sample 1 | pwd1 |input6|input7|input8|input9|input10|
您可以将任意数量的测试数据行传递给测试。但它在VS中创建了许多测试用例。这些测试数据值将作为参数传递给步骤定义方法。
请参阅以下步骤定义步骤鉴于我已使用“用户名”和“密码”登录
[Given(@"I have logged in using ""(.*)"" and ""(.*)""")]
public void LogInUsingUsernameAndPassword(string userName, string password)
{
ScenarioContext.Current["userName"] = userName;
UserHomePage = LoginPage.Login(userName, password);
Reporter.ReportNote(string.Format("User {0} logged in successfully", userName), Status.Pass);
}
但是使用 Scenario Outline ,您必须使用示例,否则specflow会引发错误。