当被调用的功能在空手道框架中发出soap请求时,无法访问被调用的功能响应值
我有一个公共特性,用于通过替换request.xml中的字段来发出所有soap请求当被调用的功能在空手道框架中发出soap请求时,无法访问被调用的功能响应值,soap,karate,Soap,Karate,我有一个公共特性,用于通过替换request.xml中的字段来发出所有soap请求 Feature: Common Soap Feature Background: * url 'http://XXX.XXX.XXX.XXX:8080/soap/GetTransaction' Scenario: * def soap = read('request.xml') * replace soap | token | va
Feature: Common Soap Feature
Background:
* url 'http://XXX.XXX.XXX.XXX:8080/soap/GetTransaction'
Scenario:
* def soap = read('request.xml')
* replace soap
| token | value |
| @@MTID@@ | MTID |
| @@MCC_Code@@ | MCC_Code |
| @@Token@@ | Token |
| @@Trans_link@@ | Trans_link |
| @@traceid_lifecycle@@ | traceid_lifecycle |
| @@TXn_ID@@ | TXn_ID |
| @@Txn_Type@@ | Txn_Type |
| @@Bill_Amt@@ | Bill_Amt |
| @@Bill_Ccy@@ | Bill_Ccy |
| @@Settle_Amt@@ | Settle_Amt |
| @@Settle_Ccy@@ | Settle_Ccy |
| @@Fx_Fee_Fixed@@ | Fx_Fee_Fixed |
| @@Fx_Fee_Rate@@ | Fx_Fee_Rate |
| @@FX_Pad@@ | FX_Pad |
| @@MCC_Pad@@ | MCC_Pad |
| @@Txn_Amt@@ | Txn_Amt |
| @@Txn_CCy@@ | Txn_CCy |
| @@Txn_Ctry@@ | Txn_Ctry |
| @@Txn_GPS_Date@@ | Txn_GPS_Date |
| @@GPS_POS_Data@@ | GPS_POS_Data |
| @@GPS_POS_Capability@@ | GPS_POS_Capability |
| @@Proc_Code@@ | Proc_Code |
| @@Authorised_by_GPS@@ | Authorised_by_GPS |
| @@Txn_Stat_Code@@ | Txn_Stat_Code |
Given request soap
When soap action
Then status 200
通过调用方特性,我可以如下调用上述通用soap特性,它可以成功地工作,但我无法访问soap请求的responseTime或其他响应值
Feature: Caller Feature
Background:
* def soap = read('soap.feature')
* def config = { username: 'XXX', password:'XXX', url: 'jdbc:mysql://XXX.XXX.XXX.XXX:32231/XXX', driverClassName: 'com.mysql.jdbc.Driver' }
* def DbUtils = Java.type('com.XXX.XXX.utils.DbUtils')
* def db = new DbUtils(config)
* def result = db.readRows('SELECT public_token FROM card where status="ACTIVE" and type="PHYSICAL" order by id desc limit 1')
* def publicToken = result[0].public_token
* def SampleUtils = Java.type('com.XXX.XXX.utils.SampleUtils')
* def traceIdLifecycle = SampleUtils.randomTraceId()
* def transactionLink = SampleUtils.randomId()
Scenario:
* def transactionId = SampleUtils.randomId()
* def gpsDateTime = SampleUtils.now()
* table parameters
| MTID | MCC_Code | Token | Trans_link | traceid_lifecycle | TXn_ID | Txn_Type | Bill_Amt | Bill_Ccy | Settle_Amt | Settle_Ccy | Fx_Fee_Fixed | Fx_Fee_Rate | FX_Pad | MCC_Pad | Txn_Amt | Txn_CCy | Txn_Ctry | Txn_GPS_Date | GPS_POS_Data | GPS_POS_Capability | Proc_Code | Authorised_by_GPS | Txn_Stat_Code |
| '0100' | '6011' | publicToken | transactionLink | traceIdLifecycle | transactionId | 'A' | '-6.95' | '826' | '0.00' | '' | '0.20' | '0.30' | '0.00' | '0.00' | '0.0000' | '949' | 'TUR' | gpsDateTime | '0051000300000Nx' | '00001001000100000000000010010000000000000012230041' | '010000' | 'N' | 'A' |
* def caller = call soap parameters
* assert caller.responseTime < 400
功能:调用者功能
背景:
*def soap=read('soap.feature')
*def config={username:'XXX',password:'XXX',url:'jdbc:mysql://XXX.XXX.XXX.XXX:32231/XXX,driverClassName:'com.mysql.jdbc.Driver'}
*def DbUtils=Java.type('com.XXX.XXX.utils.DbUtils'))
*def db=新的DbUtils(配置)
*def result=db.readRows('从卡中选择公共令牌,其中status=“ACTIVE”和type=“PHYSICAL”order by id desc limit 1')
*def publicToken=result[0]。公共令牌
*def SampleUtils=Java.type('com.XXX.XXX.utils.SampleUtils')
*def traceIdLifecycle=SampleUtils.randomTraceId()
*def transactionLink=SampleUtils.randomId()
脚本:
*def transactionId=SampleUtils.randomId()
*def gpsDateTime=SampleUtils.now()
*表参数
|TXn+ID TXXN)TXn)TXn+ID TXn+TXn)TXn+TTXN+ID TTXN)TXn类型学学学学学学元钱钱,学元元钱,学元钱,学元,学元,学元,学元,学元,学元,码码码码码码码码码码码码码码码码码,码码码码,码码码,码码码,码码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,码,能力|程序代码|由全球定位系统授权||Txn_统计代码|
|“0100”——“6011”——“publicToken”——“transactionLink”——“traceIdLifecycle”——“transactionId”——“A”——“6.95”——“0.00”——“0.20”——“0.30”——“0.00”——“0.0000”——“949”——“TUR”——“gpsDateTime”——“0000300000NX”——“100000000000101000000000 1000000000|“A”|
*def caller=调用soap参数
*断言caller.responseTime<400
但是使用被称为FeatureResponseTime的断言不起作用
如何访问所谓的soap功能响应字段?看起来您做的一切都是对的!一些建议:
- 这是空手道的最新版本吗
- 尝试在同一功能中临时拨打第二个电话
- 作为一种解决方法,您可以使用
System.currentTimeMillis()
如果您认为存在问题,请按照以下过程进行操作:要访问的数据在变量“caller”中,但caller是一个数组。 所有常用脚本参数都在其中,请求、响应、头和响应时间等 要访问时间,请执行以下操作:
断言调用方[0]。响应时间>10
要访问和验证响应,请执行以下操作:
* xml soapResponseXml = caller[0].response
* match soapResponseXml /Envelope/Body/AddResponse/AddResult == 4
这里有一个有效的例子。调用者功能:
Feature: Caller Feature
Background:
* def soap = read('common.feature')
Scenario: soap 1.2
* table parameters
| param_a | param_b |
| 1 | 3 |
* def caller = call soap parameters
* print caller
* xml soapResponseXml = caller[0].response
* match soapResponseXml /Envelope/Body/AddResponse/AddResult == 4
* assert caller[0].responseTime > 10
其共同特点是:
Feature: Common Soap Feature
Background:
* url 'http://www.dneonline.com/calculator.asmx'
Scenario:
* def soap = read('request.xml')
* replace soap
| token | value |
| @@a@@ | param_a |
| @@b@@ | param_b |
Given request soap
When soap action 'http://tempuri.org/Add'
Then status 200
以及请求XML模板:
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<Add xmlns="http://tempuri.org/">
<intA>@@a@@</intA>
<intB>@@b@@</intB>
</Add>
</soap12:Body>
另一种方法是只调用公共脚本,而不将结果分配给变量 然后在公共脚本中定义将在调用者范围内的变量 例如:
Feature: Caller Feature
Background:
* def soap = read('common.feature')
Scenario: soap 1.2
* table parameters
| param_a | param_b |
| 1 | 3 |
* call soap parameters
* match soapResponseXml /Envelope/Body/AddResponse/AddResult == 4
* assert soapReponseTime > 10
及
它是版本0.7.0,但我用最新版本0.8.0再次尝试了该示例,但没有任何更改。问题不仅仅是从调用方功能获取响应时间。我想访问其他字段,如响应xml内容。@MeteAlpaslanKATIRCIOGLU我不知道。请参阅我发布的链接。最好的。顺便说一句,当我打印调用者的内容如下:“*打印调用者”我可以看到responseTime或response在那里。我认为这些字段没有分配上下文,因此我不能将它们与assert一起使用。同时,如果它是REST,我可以轻松访问被调用的功能响应字段,如responseHeaders。我没有更多的帮助
Feature: Caller Feature
Background:
* def soap = read('common.feature')
Scenario: soap 1.2
* table parameters
| param_a | param_b |
| 1 | 3 |
* call soap parameters
* match soapResponseXml /Envelope/Body/AddResponse/AddResult == 4
* assert soapReponseTime > 10
Feature: Common Soap Feature
Background:
* url 'http://www.dneonline.com/calculator.asmx'
Scenario:
* def soap = read('request.xml')
* replace soap
| token | value |
| @@a@@ | param_a |
| @@b@@ | param_b |
Given request soap
When soap action 'http://tempuri.org/Add'
Then status 200
* xml soapResponseXml = response
* def soapReponseTime = responseTime
* def soapResponseStatus = responseStatus