如何在每个场景 xml 中设置变量

How to set a variable in the xml per scenario

我有这个 xml 下面我在后台设置:

* def Request = 
"""
                    <new1:Account>
                        <shar:PaidMode>#(PaidMode)</shar:PaidMode>
                        <shar:BillCycleCredit>#(BillCycleCredit)</shar:BillCycleCredit>
                        <shar:CreditCtrlMode>#(CreditCtrlMode)</shar:CreditCtrlMode>
                        <new1:BillCycleType>#(BillCycleType)</new1:BillCycleType>
                    </new1:Account>
"""

经过我的测试如下:

Scenario: Create first subscriber
    * def PaidMode = '0'
    And request Request 
    When method Post
    Then status 200
    * print Request

但我似乎无法将此 PaidMode 设置为 0 :( 我读过这个

which led me to this (thank you Peter!)

https://github.com/karatelabs/karate#embedded-expressions

这很简单,我敢肯定,我做错了什么对我来说并不明显

我觉得一切都很好。但是:确保在声明 xml 变量 'body' 之前设置变量 'paidMode' !也许这就是你错过的。

试试这个应该有效的例子:

* def paidMode = 'foo'
* def body = 
"""
<new1:Account>
    <shar:PaidMode>#(paidMode)</shar:PaidMode>
</new1:Account>
"""


* url 'https://httpbin.org/anything'
* request body
* method post

现在,如果您确实需要 XML“预设”,您可以使用 set 关键字进行如下更新:

* def body = 
"""
<new1:Account>
    <shar:PaidMode></shar:PaidMode>
</new1:Account>
"""
* set body/Account/PaidMode = 'foo'

一个技巧是从文件中 read XML,这样您就可以得到 re-use 的好处,您似乎想要这样做:

* def paidMode = 'foo'
* def body = read('some.xml')