Karate如何在单测试场景移除karate-config.js配置的全局请求头
问题背景
你已在karate-config.js中编写全局请求头配置,实现所有feature文件无需重复定义请求头的效果,当前配置运行正常,代码如下:
karate.configure('headers', { Accept: 'application/json', eid: 123, intVal: 557 });
需要实现的需求:单个feature文件包含多个测试场景时,仅对其中1个场景移除eid请求头做负向测试,其余场景保留原有全局请求头配置。
实现方法
Karate框架的configure配置遵循就近作用域规则:在单个Scenario内部定义的配置,仅对当前场景生效,场景执行完成后会自动回退到全局/上层配置,不会影响同文件下其他场景的运行逻辑,直接在需要做负向测试的场景内单独覆盖headers配置即可。
写法1:直接重写当前场景的请求头
直接在目标场景内定义不包含eid的headers集合,写法最简单直观:
Feature: 接口请求头校验测试 # 以下普通场景无需额外配置,自动继承全局请求头 Scenario: 正常场景-携带全量合法请求头 Given url 'https://your-test-endpoint.com/api' When method get Then status 200 # ... 其余正常场景省略,均无需修改请求头配置 Scenario: 负向场景-缺失必填eid请求头 # 仅当前场景生效的headers配置,移除了eid字段 * configure headers = { Accept: 'application/json', intVal: 557 } Given url 'https://your-test-endpoint.com/api' When method get Then status 400 // 按业务预期断言缺失请求头的返回状态
写法2:基于全局头动态移除字段(推荐)
如果后续全局请求头可能新增其他字段,不想每次调整都同步修改负向场景的硬编码配置,可以先拉取全局headers对象,删除目标key后再赋值给当前场景的headers配置,可维护性更高:
Scenario: 负向场景-缺失必填eid请求头 * def tempHeaders = karate.get('karate.headers') * remove tempHeaders.eid * configure headers = tempHeaders Given url 'https://your-test-endpoint.com/api' When method get Then status 400
注意:不要把headers覆盖逻辑写在
Background块中,该块的配置会作用于当前feature下的所有场景,会导致所有场景都丢失eid请求头。
内容的提问来源于stack exchange,提问作者Shivkumar Dubey
相关产品推荐
相关产品推荐

