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

如何创建一个步骤定义来处理动态数据输入?

高山
2023-03-14

我已经搜索了一些,但找不到确切的例子。我有一张表格要填。表单字段如下所示:

日期:
货币:
总计:
描述:

但并非所有字段都需要用户输入数据。而不是编写几种方法来解释不同的组合,比如:

(When I enter the 'Date' and 'Currency' and 'Total' and 'Description')  
(When I enter the 'Date' and 'Total')  
(When I enter the 'Currency' and 'Description')  
etc...

我想以某种方式在功能文件中实现如下内容:

When I enter the following details:  
  |Date        |x    |       
  |Currency    |USD  |  
  |Total       |100  |   
  |Description |Test |  

然后有一个单一的方法来处理用户在第二列中输入的任何数据组合。

我发现一些网站有这样一个数据表驱动的例子:

When I enter the following details:  
  |Date        |<date>        |       
  |Currency    |<currency>    |  
  |Total       |<total>       |   
  |Description |<description> |  

Example data:
  |date |currency |total |description |  
  |x    |USD      |100   |foo         |
  |y    |EUR      |200   |test        |
  |z    |HKD      |124   |bar         |

但这不是我想要的。我不需要遍历预先确定的示例数据列表。我希望我已经足够清楚地总结了这个问题,并且有人知道一个好地方可以找到这种实现的示例。谢谢你的建议!

共有2个答案

贺俊材
2023-03-14

我能理解的是,您正在尝试对表单中的这4个字段进行组合测试。如果是这样的话,那么你需要看看ScenaioOutline选项,我认为你指的是你所说的数据表驱动。这将允许你举出你所有的组合作为例子。每个示例都将作为一个单独的场景进行挑选和运行。你可以修改你的时间,使其看起来像这样-

Scenaio Outline:
...
...
When I enter the following details : Date <date> Currency <currency>.......
...
...
Examples:
  |date |currency |total |description |  
  |x    |USD      |100   |foo         |
  |y    |EUR      |200   |test        |
  |z    |HKD      |124   |bar         |

如果将“示例”表中的任何数据留空,则“留空”将被发送到When步骤。

或者-如果您想从对象列表中的Whenstep获取数据,该列表具有与日期、货币等相对应的实例变量,则可以在步骤定义中使用list参数。这样可以避免编写模式表达式。然后你的脚步就变成了

When I enter the following details : 
date   | currency   | .......
<date> | <currency> | .......

确保实例变量名称与创建的对象中的表标题匹配。

翟修永
2023-03-14

是的,您可以使用数据表作为单个非重复步骤的参数。数据表的第一行必须是标题:

When I enter the following details:
  |Name        |Value|
  |Date        |x    |
  |Currency    |USD  |
  |Total       |100  |
  |Description |Test |

这里有一种可能的方法可以一步一步使用它:

@Given("^I enter the following details:$")
public void i_enter_the_following_details(Map<String, String> details) throws Throwable {
    for Map.Entry<String, String> entry : details.entrySet() {
        String key = entry.getKey();
        String value = entry.getValue();
        switch (key) {
            case "Date":
                // add the date to the form
                break;
            // ...
        }
    }
}

您还可以将该表作为数据表、值对象的列表列表获取

我这样写这个例子是因为我假设您需要编写不同的代码来将每个值放入其字段中。如果每个字段的代码都是相同的,那么您可以将该字段的CSS选择器放在数据表中,然后去掉开关。

更多的例子在这里和这里。

 类似资料:
  • 我是Spring新手,也是Spring批新手——所以,请耐心等待。 我知道spring batch是帮助运行步骤和任务的框架。 我尝试通过创建步骤和任务来使用spring批处理,但这些步骤和任务是在程序构建/编译时硬编码的。然而,我不知道如何动态创建任务和步骤。 我想做的是让用户创建一个脚本,说明如何从步骤列表中组装任务。每个步骤都将调用对现有RESTendpoint的远程调用。一项任务将包含多个

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以点击 或 来将已选择的工作或所有工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除已选择工作或所有工作,请点击 或 。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可在已选择的工作列表中拖拉工作到所需的位

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,

  • 正如之前介绍的,Flaskr 是一个数据库驱动的应用,更准确的说法 是,一个由关系数据库系统驱动的应用。关系数据库系统需要一个模 式来决定存储信息的方式。所以在第一次开启服务器之前,要点是创 建模式。 可以通过管道把 schema.sql 作为 sqlite3 命令的输入来创建这 个模式,命令为如下: sqlite3 /tmp/flaskr.db < schema.sql 这种方法的缺点是需要安装

  • 我需要多次调用webservice并传递使用来自多个表的数据创建的数据 UI->控制器->服务->(获取数据(表1,表2)并运行一些验证)1。如果验证失败-返回错误消息并停止。2.如果验证通过-调用JobLauncher并返回“任务启动”消息。 在异步作业中,我想到遵循2个步骤。 > bulkinsertstep > 我需要调用DB查询2个更多的表(Table3、table4)并创建一个大的数据集