Karate框架中能否通过文件或变量对status状态码进行断言?
Karate 框架状态码动态断言解决方案
完全可以实现,Karate 原生支持使用变量、文件读取结果替代硬编码的整数状态码做断言,不用固定写死200/400这类数值。
两种常用实现方式
1. 直接用变量断言
你可以提前在场景/Feature 全局定义状态码变量,直接传入status断言关键字即可:
Scenario: CF_001 - When Order is Successfully Created * def expectedStatus = 200 Given path '/api/v1.0/abcd/create' And header Authorization = 'Bearer ' + accessToken And header X-Azure-FDID = XAzureFDID And request read('Requests/request01.json') When method POST Then status expectedStatus Then print response
2. 从文件读取状态码断言
如果要把状态码存在外部文件统一管理,不管是JSON配置文件还是纯文本文件都支持,注意纯文本文件读取结果默认是字符串类型,需要转成整数再做断言,避免类型不匹配导致断言失败:
示例1:从JSON配置文件读取
先准备状态码配置文件status-config.json:
{ "create_order_success": 200, "create_order_param_error": 400, "auth_failed": 401 }
场景中使用:
Scenario: CF_001 - When Order is Successfully Created * def statusConfig = read('config/status-config.json') Given path '/api/v1.0/abcd/create' And header Authorization = 'Bearer ' + accessToken And header X-Azure-FDID = XAzureFDID And request read('Requests/request01.json') When method POST Then status statusConfig.create_order_success Then print response
示例2:从纯文本TXT文件读取
如果你就用你示例里的QAcreate01.txt存状态码200,需要把读取到的字符串转成整数:
Scenario: CF_001 - When Order is Successfully Created * def expectedStatus = read('Responses/QAcreate01.txt') * 1 Given path '/api/v1.0/abcd/create' And header Authorization = 'Bearer ' + accessToken And header X-Azure-FDID = XAzureFDID And request read('Requests/request01.json') When method POST Then status expectedStatus Then print response # 你原来的写法要改下类型才能匹配成功 And match expectedStatus == response.status
你原有代码的问题说明
你最后一行And match read('Responses/QAcreate01.txt') == response.status会断言失败,因为read读TXT文件返回的是字符串"200",而response.status是整数200,类型不一致,按上面的方法转成整数再断言即可。
内容的提问来源于stack exchange,提问作者Vedangi Kirtane
相关产品推荐
相关产品推荐

