Karate框架中Scenario Outline里Map类型参数metainfo的设置问题
问题:Karate Scenario Outline中Map类型参数metainfo赋值报错处理
我尝试创建如下Scenario Outline场景:
Scenario Outline: Create a request Given print 'reason=<reason>, detail=<detail>, metainfo=<metainfo>' When call create_request Then match response.message == "#notnull" * call json_to_proto request * print 'response \n', response Examples: reason | detail | metainfo test | Testing | { foo: bar }
我的问题是:metainfo被定义为Map类型,使用语句"metainfo": "#(karate.get('metainfo', {}))"时,报错org.graalvm.polyglot.PolyglotException: Expect a map object but found...,请问该如何正确设置metainfo的值?
解决方案
修正Examples中的Map格式
当前Examples里的{ foo: bar }不是标准JSON格式,JSON要求键和字符串值必须用双引号包裹,需改成{"foo": "bar"}。Gherkin的Examples表格中,Map类型参数必须严格遵循JSON语法,否则Karate会将其识别为字符串而非Map对象,进而导致类型不匹配报错。简化参数引用方式
如果create_request是调用的feature文件或函数,直接在请求体中使用<metainfo>占位符即可,无需额外用karate.get()包裹。比如请求JSON体可以这样写:{ "reason": "<reason>", "detail": "<detail>", "metainfo": <metainfo> }这种写法下Karate会自动将Examples中的Map类型参数正确注入,无需手动转换。
添加类型验证步骤
可以在Given步骤中加入类型检查,确认metainfo的实际类型:Given print 'metainfo type:', typeof metainfo如果输出结果是
string,说明Examples中的格式仍有问题,需要再次修正为标准JSON格式的Map。
内容的提问来源于stack exchange,提问作者Ishita
相关产品推荐
相关产品推荐

