Karate自动化中如何传递含空格的$filter参数?
解决Karate中OData $filter参数空格编码问题
遇到Karate将$filter参数里的空格编码为+导致OData接口报错的问题,可以用以下几种方法解决:
手动替换空格为%20
直接在$filter参数中将空格换成标准URI编码的%20,生成的参数符合OData要求:Scenario: Get one user details Given path 'users' And param language = 'en' And param $filter = "(username%20eq%20'test')" When method Get Then status 200使用Karate的
karate.encode()函数生成正确编码
利用Karate内置的URI编码函数对filter内容编码,自动将空格转为%20后拼接到URL中:Scenario: Get one user details Given path 'users' And param language = 'en' * def filterExpr = "username eq 'test'" * def encodedFilter = karate.encode(filterExpr) * karate.appendToUrl("?$filter=" + encodedFilter) When method Get Then status 200直接构造完整请求URL
如果参数较少,可直接拼接完整URL路径,绕过Karate的param自动编码逻辑:Scenario: Get one user details Given url 'https://userdetails.com/users?$filter=username eq \'test\'' And param language = 'en' When method Get Then status 200
原理说明:Karate的param关键字默认采用表单编码(application/x-www-form-urlencoded),会将空格转为+;但OData接口要求查询参数使用标准URI编码,空格需转为%20,因此需要通过上述方式规避默认编码行为。
内容的提问来源于stack exchange,提问作者Chinmayee
相关产品推荐
相关产品推荐

