遵循这个回答问题的相同原则:Reading parameter values from Testng.xml file in cucumber stepdefs 我需要能够读取来自@dataprovider类而不是testng.xml
的数据@Test(dataProvider = "allUsers", dataProviderClass = ***.automated_testing.DataProviders.DataProviderClass.class)
@Given("^user is sucessfuly logged into *** website$")
public void user_is_sucessfuly_logged_into_***_website(String userName, String passWord) throws Throwable {
homePage.logIn(userName, passWord);
}
@Given("^User clicks Overview tab$")
public void user_clicks_Overview_tab() throws Throwable {
overviewPage = homePage.goToOverviewPage();
}
在这种情况下,只有第一种方法(具有@Test注释)才有效,这是完全有道理的。但是,如何在Cucumber框架的所有方法中使用相同的@Test?
** EDITED: 我认为现在使用@DataProvider的唯一原因是我希望使用具有不同角色的不同用户。使用dataprovider,它为我在该类中传递的每个对象创建一个测试,如果有另一种方法这样做而不需要@DataProvider也会有帮助。
答案 0 :(得分:0)
以下是'示例'如何工作的示例:)
Scenario Outline: feeding a suckler cow
Given the cow weighs <weight> kg
When we calculate the feeding requirements
Then the energy should be <energy> MJ
And the protein should be <protein> kg
Examples:
| weight | energy | protein |
| 450 | 26500 | 215 |
| 500 | 29500 | 245 |
| 575 | 31500 | 255 |
| 600 | 37000 | 305 |
意味着此特定测试将使用示例表中描述的每行中的数据执行4次。 有关更多示例,请参阅cucumber-jvm docs:https://cucumber.io/docs/reference
此外,无需使用@Test
注释标记测试,黄瓜测试以特征文件格式描述。
答案 1 :(得分:0)
您是对的,在示例中指定用户名和密码是有风险的。您面临的风险是您必须更改用户名或类似内容时。
这也是因为作为特定用户的登录并不是该示例的真正兴趣所在。业务代表通常对此事件感兴趣,登录通常不是核心。因此,我倾向于确保当我在针对特定方案的测试下设置系统时,如果需要,我允许Given
步骤查找用户名和密码。结果是我有一些代码可以查找用户名和密码并使用它。如果需要,这会导致一个地方发生变化,在许多情况下不会有很多地方。
我的解决方案看起来像这样:
@Given("^user is sucessfuly logged into *** website$")
public void user_is_sucessfuly_logged_into_***_website() throws Throwable {
String userName = helperClass.getUserName();
String passWord = helperClass.getPassword();
homePage.logIn(userName, passWord);
}
helperClass
是一个知道如何从您正在使用的@Dataprovider
中检索值的实例。
这并不能真正回答您的原始问题,但它可能会指向您找到适合您的解决方案。