处理空单元格并在 CSV 文件的示例中使用 null

问题描述 投票:0回答:1

问题涉及处理空单元格并在“示例”中使用 null。

我们的测试数据是从具有各种组合的 CSV 文件中读取的,并非所有值都始终出现在列中(特别是与响应值进行比较的基准)。

比较需要有条件:

  • 如果 CSV 中不存在值,则应跳过比较。
  • 如果存在值,我们需要读取响应键并进行比较。
csv karate data-driven-tests
1个回答
0
投票

是的,当您使用 CSV 文件时,预处理会有点困难,以便按照您期望的方式处理空值。但这是可能的,请注意,下面的所有示例都可以在本地尝试,只需将它们剪切并粘贴到本地/功能文件中即可。

首先让我们看看如何在“正常”

Examples
块中执行此操作,然后看看差异:

Feature: using nulls and inline json

  Scenario Outline:
    Given url 'https://reqres.in/api'
    And path 'register'
    And request { email: '#(email)', password: '#(password)' }
    When method post
    Then status 400
    * print response
    * match response == errorResponse

    Examples:
      | email! | password! | errorResponse!                                             |
      | null   | null      | { error: 'Missing email or username' }                     |
      | 'aa'   | 'bb'      | { error: 'Note: Only defined users succeed registration' } |

请注意 列名称如何添加后缀

!
,以便正确处理
null
等内容,而不是默认的
''
或空字符串。但是当您使用 CSV 作为数据源时,您需要手动进行预处理。幸运的是,通过使用
@setup
场景

,这很容易
Feature: converting empty cells to null from a csv

  @setup
  Scenario:
    * def raw = read('examples.csv')
    * def convert = x => x || null
    * def data = raw.map(x => ({ email: convert(x.email), password: convert(x.password), error: x.error }))

  Scenario Outline:
    Given url 'https://reqres.in/api'
    And path 'register'
    And request { email: '#(email)', password: '#(password)' }
    When method post
    Then status 400
    * print response
    * match response == { error: '#(error)' }

    Examples:
      | karate.setup().data |

对于上面的例子,

examples.csv
的内容如下:

email,password,error
,,Missing email or username
aa,bb,Note: Only defined users succeed registration

为了完整起见,空手道世界中“循环”的另一种方式是这样

Feature: looping over a json array converted from a csv

  Scenario:
    * def raw = read('examples.csv')
    * def convert = x => x || null
    * def data = raw.map(x => ({ email: convert(x.email), password: convert(x.password), error: x.error }))
    * call read('@register') data

  @ignore @register
  Scenario:
    Given url 'https://reqres.in/api'
    And path 'register'
    And request { email: '#(email)', password: '#(password)' }
    When method post
    Then status 400
    * print response
    * match response == { error: '#(error)' }
© www.soinside.com 2019 - 2024. All rights reserved.