Automated tests 空手道:使用数据驱动的嵌入式模板方法进行API测试
我想编写通过从外部文件(csv)读取动态值的数据驱动测试。 能够从csv传递简单字符串的动态值(下面是帐号和附属id)。但是,使用嵌入表达式,如何从csv文件中为下面的“DealerReportFormats”json数组传递动态值 非常感谢您的帮助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
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就可以了: