从黄瓜stepdef中的@dataprovider Testng文件中读取参数值

时间:2016-09-15 17:08:54

标签: selenium webdriver cucumber testng

遵循这个回答问题的相同原则: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也会有帮助。

2 个答案:

答案 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中检索值的实例。

这并不能真正回答您的原始问题,但它可能会指向您找到适合您的解决方案。