我试图将6.75的销售税率与我的预期值6.75(字符串格式)进行比较。我编写了以下Groovy代码行来实现这一点,但我得到了数字格式异常,我无法弄清楚问题出在哪里
Groovy代码
def jsonSlurper = new JsonSlurper()
def parsedResponseJson=jsonSlurper.parseText(context.expand('${StandardFinance#Response}'))
def actualSalesTaxRate = parsedResponseJson.CustomerQuoteFinanceResponse.StandardFinanceResponse.Responses[0].StandardPaymentEngineFinanceResponse.paymentWithTaxes.financeItemizedTaxes.salesTax.taxParameters.rate
def actualSalesTaxRate = parsedResponseJson.CustomerQuoteFinanceResponse.StandardFinanceResponse.Responses[0].StandardPaymentEngineFinanceResponse.paymentWithTaxes.financeItemizedTaxes.salesTax.taxParameters.rate
log.info actualSalesTaxRate.size()
actualSalesTaxRate = Float.parseFloat(actualSalesTaxRate)
def expectedSalesTaxRate = "6.75"
log.info expectedSalesTaxRate.size()
expectedSalesTaxRate = Float.parseFloat(expectedSalesTaxRate)
assert expectedSalesTaxRate.toString() == actualSalesTaxRate.toString(),"FAIL --- Sales Tax Rate is different"
JSON响应
{
"CustomerQuoteFinanceResponse": {
"StandardFinanceResponse": {
"Responses": [{
"StandardPaymentEngineFinanceResponse": {
"class": ".APRNonCashCustomerQuote",
"RequestID": "1",
"term": "48",
"financeSourceId": "F000CE",
"paymentWithTaxes": {
"class": ".FinancePaymentWithTaxes",
"amountFinanced": "34523.48",
"monthlyPayment": "782.60",
"monthlyPaymentWithoutDealerAddOns": 782.6,
"financeItemizedTaxes": {
"salesTax": {
"taxParameters": {
"rate": "6.75"
},
"salesTaxAmount": "2322.61"
}
}
}
}
}]
}
}
}
答案 0 :(得分:3)
您不必将其转换为数字,因为响应中的值是字符串。
EXPECTED_TAX_RATE
,并将值提供为6.75
。rate
是字符串值。Script Assertion
。以下是完整的Script Assertion
//Check the response is received
assert context.response, 'Response is empty or null'
//Read test case property for expected value as string; this way there is no need to edit the assertion; just change the property value
def expectedTaxRate = context.expand('${#TestCase#EXPECTED_TAX_RATE}')
def json = new groovy.json.JsonSlurper().parseText(context.response)
def actualTaxRate = json.CustomerQuoteFinanceResponse.StandardFinanceResponse.Responses[0].StandardPaymentEngineFinanceResponse.paymentWithTaxes.financeItemizedTaxes.salesTax.taxParameters.rate
log.info "Actual tax rate $actualSalesTaxRate"
//Now compare expected and actual
assert actualTaxRate == expectedTaxRate, 'Both tax rates are not matching'
您可能会遇到一些问题,例如“保留字符串值。如何与数字进行比较。例如monthlyPaymentWithoutDealerAddOns
的数字不是字符串。如何处理?”
此处将测试用例级自定义属性定义为EXPECTED_MONTHLY_PATYMENT
且值为782.6
。
就像已经提到过的那样,可以在Script Assertion
中阅读以下内容
def expectedMonthlyPayment = context.expand('${#TestCase#EXPECTED_MONTHLY_PATYMENT}') //but this is string
您可以将实际值读作:
def actualPayment = json.CustomerQuoteFinanceResponse.StandardFinanceResponse.Responses[0].StandardPaymentEngineFinanceResponse.paymentWithTaxes.monthlyPaymentWithoutDealerAddOns
log.info actualPayment.class.name //this shows the data type
现在 expectedPayment 需要转换为 actualPayment 的类型
def actualPayment = json.CustomerQuoteFinanceResponse.StandardFinanceResponse.Responses[0].StandardPaymentEngineFinanceResponse.paymentWithTaxes.monthlyPaymentWithoutDealerAddOns
log.info actualPayment.class.name //this shows the data type
def expectedPayment = context.expand('${#TestCase#EXPECTED_MONTHLY_PATYMENT}') as BigDecimal
assert actualPayment == actualPayment
答案 1 :(得分:0)
鉴于此JSON(类似于提供的完整JSON,但具有结束语法):
def s = '''
{"CustomerQuoteFinanceResponse": {"StandardFinanceResponse": {
"Responses": [ {
"StandardPaymentEngineFinanceResponse": {
"class": ".APRNonCashCustomerQuote",
"RequestID": "1",
"term": "48",
"financeSourceId": "F000CE",
"paymentWithTaxes": {
"class": ".FinancePaymentWithTaxes",
"amountFinanced": "34523.48",
"monthlyPayment": "782.60",
"monthlyPaymentWithoutDealerAddOns": 782.6,
"financeItemizedTaxes": {
"salesTax": {
"taxParameters": {"rate": "6.75"},
"salesTaxAmount": "2322.61"
}}}}}]}}}
'''
考虑以下代码:
def jsonSlurper = new groovy.json.JsonSlurper()
def json = jsonSlurper.parseText(s)
def response = json.CustomerQuoteFinanceResponse
.StandardFinanceResponse
.Responses[0]
assert 6.75 == response.StandardPaymentEngineFinanceResponse
.paymentWithTaxes
.financeItemizedTaxes
.salesTax
.taxParameters
.rate as Float