当前位置: 首页 > 知识库问答 >
问题:

Cucumber:生成测试数据的最佳方式?并储存起来以备后用?

秦宏硕
2023-03-14

我对 Cucumber 自动化测试仍然很陌生,我在文档中没有找到任何关于这一点的内容,所以我猜要么是不可能的,要么是以非常不同的方式完成的。

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

具体的用例是:我正在使用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个答案

蓬弘
2023-03-14

不,cucumber不允许这样的事情。Cucumber 唯一要做的就是解析您的步骤并运行匹配的方法。

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

例如,执行您描述的步骤:

And user enters username and password

那么将要执行的方法将类似于:

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

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

}
爱琪
2023-03-14

随机用户和密码并不是真正必要的。请阅读等价类测试与边界值测试

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

`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);
}`

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

属性文件可能如下所示:

VAR#:用户名=用户名VAR#:密码=1234

鱼阳伯
2023-03-14

要生成用户和密码,您必须自己实现,正如@Eugene S。

要在步骤之间共享变量,最好使用依赖注入。Cucumber-jvm支持多个DI框架,如下所列:https://cucumber.io/docs/reference/java-di不幸的是,关于如何做到这一点,没有很多“官方”(Cucumber)留档。

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

    < Li > pico container:html" target="_blank">http://www . think code . se/blog/2017/04/01/sharing-state-between-steps-in-cucumber JVM-using-pico container < Li > Spring:http://www . think code . se/blog/2017/06/24/sharing-state-between-steps-in-cucumber JVM-using-Spring < Li > Guice:http://www . think code . se/blog/2017/08/16/sharing-state-between-steps-in-cucumber JVM-using-Guice
 类似资料:
  • 问题内容: 我希望在学习快速的过程中开发一个库存/物品库存应用程序。它基本上是具有项目名称,数量和位置的东西。 例如。 25号工作货车灯泡 开关,6,仓库 当用户输入此数据并按下按钮时,什么是存储此数据并在以后检索的最佳方法。我知道我可以将此附加到数组并显示该数组,但是如果应用程序关闭,该怎么办? 我应该在学习数据库存储吗?我可以将数据保存到手机吗? 问题答案: 如果要存储的数据很少且不敏感,则可

  • 问题内容: 在MySQL数据库中存储IP地址的最佳字段类型和长度是什么? IPv6呢? 问题答案: 将IP存储为,然后使用和功能存储/检索IP地址。 样例代码:

  • 问题内容: 我的角度应用程序有2个控制器。我的问题是,当用户离开页面时,控制器不会保留数据。 如何将所选控制器上的选定数据存储到数据存储中,以便可以在其他控制器之间使用? 问题答案: 选项1-自定义 您可以利用专用的角度服务在控制器之间存储和共享数据(服务是单实例对象) 服务定义 在多个控制器中的用法 选项2-HTML5 您可以使用内置的浏览器本地存储并从任何地方存储数据 写作 读 看看这个很棒的

  • 问题内容: 我上了一堂课,想跟踪学生的统计数据。我打算稍后制作一个GUI来处理这些数据。 我的主要问题是:保存和以后检索此数据的最佳方法是什么? 我已经读过关于pickle和JSON的文章,但是我并没有真正了解它们的工作方式(尤其是关于它们如何保存数据的信息,例如哪种格式和位置)。 问题答案: 对于持久性数据(存储有关学生的信息),数据库是一个不错的选择。如前所述,Python附带了Sqlite3

  • “...如果这不可行,RFC4122建议使用命名空间变体,如类型5 UUID。” 我计划使用Java生成UUID,并引用了API https://docs.oracle.com/javase/8/docs/API/Java/util/UUID.html 通过维基百科:

  • 问题内容: 我正在创建一个Web API,需要一种很好的方法来非常快速地生成一些格式正确的xml。我找不到在python中执行此操作的任何好方法。 注意:一些库看起来很有前途,但要么缺少文档,要么仅输出到文件。 问题答案: 使用lxml: 输出: 有关更多信息,请参见教程。