黄瓜:生成测试数据的最佳方法?并存储以备将来使用?

时间:2018-01-11 15:13:54

标签: java cucumber

我对Cucumber自动化测试还很陌生,我在文档中没有发现任何相关内容,所以我猜测它不可能或者它以完全不同的方式完成。

问题是,在机器人自动化框架中,我习惯使用这样的变量:$ {userName},一旦设置,这些可以由不同的测试共享。黄瓜可以吗?

具体用例是:我正在使用Java版本的Cucumber,我想创建一个新的用户帐户,我将在整个功能文件的所有场景中使用:

Scenario: Create user account
    Given user navigates to the home page
    And user enters username and password  *(this is where I want to provide random data and have it stored for future use)*
    And user clicks on the register button
    Then user should see the default landing page

我总是可以使用java在我的测试实现中创建一个随机用户名和密码,并将它们存储在类范围的变量中,以便将来在需要它们的所有步骤中使用。但我不确定这是一个好习惯。有没有更好的方法呢?

3 个答案:

答案 0 :(得分:2)

要生成用户名和密码,您必须自己实施,如@Eugene S所述。

要在步骤之间共享变量,最好使用依赖注入。 Cucumber-jvm支持多个DI框架,如下所示:https://cucumber.io/docs/reference/java-di 不幸的是,没有很多"官方" (黄瓜)有关如何执行此操作的文档。

Thomas Sundberg撰写了几篇关于如何使用不同DI框架在各步骤之间共享变量的博客文章,包括:

答案 1 :(得分:1)

随机用户和密码不是必需的。请阅读Equivalence Class Testing vs. Boundary Value Testing

您可以为变量创建通配符:

`And user enters username and password "VAR#:username" "VAR#:password"`

`@Given("^user enters username and password$")
public void getCredentials(String userName, String password) {
    userName = DataStore.getValue(userName);
    password = DataStore.getValue(password);
}`

在dataStore中,您可以从属性文件或其他任何内容中获取值。

属性文件可以如下所示:

VAR#:用户名=用户名 VAR#:口令= 1234

答案 2 :(得分:0)

不,黄瓜不允许这样的事情。 Cucumber唯一能做的就是解析你的步骤并运行匹配的方法。

要实现您所描述的内容,您只需创建一个方法,以某种方式封装您需要的数据和变量。然后,您可以运行此步骤以获取它。

例如,采取您描述的步骤:

And user enters username and password

然后将执行的方法如下所示:

@Given("^user enters username and password$")
public void getCredentials() {

    //for example
    userName = SomeStaticClaass.getUsername();
    password = SomeStaticClaass.getPassword();

}