Automated tests 空手道:使用数据驱动的嵌入式模板方法进行API测试

Automated tests 空手道:使用数据驱动的嵌入式模板方法进行API测试,automated-tests,expression,karate,data-driven-tests,Automated Tests,Expression,Karate,Data Driven Tests,我想编写通过从外部文件(csv)读取动态值的数据驱动测试。 能够从csv传递简单字符串的动态值(下面是帐号和附属id)。但是,使用嵌入表达式,如何从csv文件中为下面的“DealerReportFormats”json数组传递动态值 非常感谢您的帮助 Scenario Outline: Dealer dynamic requests Given path '/dealer-reports/retrieval' And request read('../DealerTemplate

我想编写通过从外部文件(csv)读取动态值的数据驱动测试。 能够从csv传递简单字符串的动态值(下面是帐号和附属id)。但是,使用嵌入表达式,如何从csv文件中为下面的“DealerReportFormats”json数组传递动态值

非常感谢您的帮助

Scenario Outline: Dealer dynamic requests
    Given path '/dealer-reports/retrieval'
    And request read('../DealerTemplate.json')   
  When method POST
    Then status 200
    Examples: 
      | read('../DealerData.csv') | 


DealerTemplate.json is below
{    
  "DealerId": "FIXED",
  "DealerName": "FIXED",
  "DealerType": "FIXED",

  "DealerCredentials": {
    "accountNumber": "#(DealerCredentials_AccountNumber)",
    "affiliateId": "#(DealerCredentials_AffiliateId)"
  },
"DealerReportFormats": [
    {
      "name": "SalesReport",
      "format": "xml"
    },
    {
      "name": "CustomerReport",
      "format": "txt"
    }
  ]
}

DealerData.csv: 

DealerCredentials_AccountNumber,DealerCredentials_AffiliateId
testaccount1,123
testaccount2,12345
testaccount3,123456

CSV只适用于“平面”结构,因此,在我看来,尝试将其与JSON结合起来是过于雄心勃勃的。如果需要,请寻找其他框架:)

也就是说,我看到了两种选择:

a) 在CSV中使用正确的引用和转义

b) 参考JSON文件

以下是一个例子:

Scenario Outline:
* json foo = foo
* print foo

Examples:
| read('test.csv') |
test.csv
是:

foo,bar
"{ a: 'a1', b: 'b1' }",test1
"{ a: 'a2', b: 'b2' }",test2
如果你想避开双引号,我把它作为练习留给你。这是可能的

选项(b)是您可以引用独立的JSON文件并读取它们:

foo,bar
j1.json,test1
j2.json,test2
您可以在功能中执行
*def foo=read(foo)

CSV只适用于“扁平”结构,因此,在我看来,尝试将其与JSON结合起来是过于雄心勃勃的。如果需要,请寻找其他框架:)

也就是说,我看到了两种选择:

a) 在CSV中使用正确的引用和转义

b) 参考JSON文件

以下是一个例子:

Scenario Outline:
* json foo = foo
* print foo

Examples:
| read('test.csv') |
test.csv
是:

foo,bar
"{ a: 'a1', b: 'b1' }",test1
"{ a: 'a2', b: 'b2' }",test2
如果你想避开双引号,我把它作为练习留给你。这是可能的

选项(b)是您可以引用独立的JSON文件并读取它们:

foo,bar
j1.json,test1
j2.json,test2

您可以在功能中执行
*def foo=read(foo)

我试图理解这个问题,但放弃了。这里的任何人都可以试一试。或者你可以按照这个过程:@PeterThomas我尽了最大的努力来简化这个问题。你能帮我吗suggest@jyohas不要使用csv作为输入。相反,使用json作为输入。这样,您就可以获得输入json中的json数组。@Neodown csv用于将动态值馈送到json模板中。想要为DealErrorReportFormats下的'name'和'format'字段传递动态值(类似于我为#(DealerCredentials_AccountNumber)'所做的操作)@jyohas已经看到了我的答案。在我诚实的观点下,你试图做的太多了。有时候,写一些额外的
场景
-s很好:我试图理解这个问题,但放弃了。这里的任何人都可以试一试。或者你可以遵循以下流程:@PeterThomas我尽了最大努力简化这个问题。你能吗suggest@jyohas不要使用csv作为输入。相反,使用json作为输入。这样,您就可以拥有json数组,就像输入json中一样。@Neodown csv用于将动态值输入json模板。想要在DealErrorReportFormats下传递“name”和“format”字段的动态值(类似于我对#(DealRecredentials_AccountNumber)“)@jyohas查看我的答案。在我看来,你想做的太多了。有时,编写一些额外的
场景
-s就可以了: