我正在尝试从文件中读取json负载,并使用场景概述和示例从CSV文件中设置值

时间:2019-02-06 13:53:32

标签: karate

我有一个示例json文件,如下所示

{
book : {bookId : '<bookId>' , 
         bookName : '<bookName>'
         },
staff : {
     sfattid : '<sfattid>',
     name : '<name>'
     },
libraryMember : { 
libMembId : '<libMembId>',
name : '<libraryMember>'

         }
}

我有一个包含以下信息的CSV文件

enter image description here

我想为csv文件中的每个变量设置值,并在运行时设置REST请求3次。

功能:使用动态表的方案大纲     从csv文件中

Scenario Outline: staffname name: <name>
  # When json payload =     {book : {bookId : '<bookId>' , bookName : '<bookName>',},staff : {sfattid : '<sfattid>', name : '<name>'},libraryMember : { libMembId : '<libMembId>' ,name : '<libraryMember>'}}
    When json payload = read("request.json")
    Given url 'http://localhost:8089/'
    And path 'returnBook'
    And request payload
    When method post
    Then status 200
    Then match karate.jsonPath(response,"$.status") ==  '<status>'



Examples:
| read('bookreturn.csv') |

我写了下面的代码,它们可以很好地工作,但是在以下情况下,功能文件中存在相同的json有效负载,我想保留在文本文件中。请提出一些代码。

功能:使用动态表的方案大纲     从csv文件中

Scenario Outline: staffname name: <name>
  # When json payload =     {book : {bookId : '<bookId>' , bookName : '<bookName>',},staff : {sfattid : '<sfattid>', name : '<name>'},libraryMember : { libMembId : '<libMembId>' ,name : '<libraryMember>'}}
    When json payload = read("request.json")
    Given url 'http://localhost:8089/'
    And path 'returnBook'
    And request payload
    When method post
    Then status 200
    Then match karate.jsonPath(response,"$.status") ==  '<status>' 

    Examples:
    | read('bookreturn.csv') |

1 个答案:

答案 0 :(得分:1)

对不起,您无法对其进行进一步优化,因为要使<name>正常工作,必须位于功能文件本身内。我个人认为您在不必要地过度设计测试。您已经拥有的东西没有错。

如果您真的坚持-这是替代方法,请参阅:https://github.com/intuit/karate#data-driven-features

* def books = read('bookreturn.csv')
* def result = call read('called.feature') books

但是您将需要使用2个功能文件。循环中的每本书都可以在embedded expressions中使用。这样您就可以从JSON文件中读取文件,并且文件中的所有嵌入式表达式都可以使用。

认真地坚持你拥有的东西!