我对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在我的测试实现中创建一个随机用户名和密码,并将它们存储在类范围的变量中,以便将来在需要它们的所有步骤中使用。但我不确定这是一个好习惯。有没有更好的方法呢?
答案 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();
}