Karate结合GraphQL:如何验证Schema、响应及传入数据?
嘿,作为纯测试人员刚接触这些技术确实有点绕,我来一步步帮你解决这些问题,都是Karate里实用的小技巧,不用太担心代码复杂度~
1. 先搞定Schema结构验证(只确认字段存在)
Karate里可以用match关键字结合类型匹配器,轻松验证响应的字段结构,不用管具体值。比如你的GraphQL查询返回用户对象,只需确认包含providerID、firstName、lastName这几个字段,且类型正确:
Scenario: 验证GraphQL响应的Schema结构 Given url '你的GraphQL接口地址' And request { query: '{ user { providerID firstName lastName } }' } When method post Then status 200 # 检查user对象仅包含指定字段,且字段类型符合预期(#string代表字符串类型) And match response.data.user contains only { providerID: '#string', firstName: '#string', lastName: '#string' } # 如果你只需要确认字段存在、不关心是否有额外字段,改用下面的写法 # And match response.data.user has keys ['providerID', 'firstName', 'lastName']
这里的#string是Karate的内置类型匹配器,对应数字用#number、布尔值用#boolean,完全满足你只验结构的需求。
2. 单独验证数据本身
等结构验证通过后,再针对性验证具体数据内容,比如已知某个用户的providerID,验证返回的姓名是否正确:
Scenario: 验证GraphQL响应的具体数据 Given url '你的GraphQL接口地址' And request { query: '{ user(providerID: "123") { firstName lastName } }' } When method post Then status 200 # 直接匹配具体的预期值 And match response.data.user.firstName == 'John' And match response.data.user.lastName == 'Doe'
如果数据是动态获取的(比如从其他接口或配置文件拿到预期值),也可以用变量存储后再匹配:
Scenario: 动态验证数据 # 先获取预期的用户数据(示例,实际可替换为接口调用或读取配置) * def expectedUser = { firstName: 'John', lastName: 'Doe' } Given url '你的GraphQL接口地址' And request { query: '{ user(providerID: "123") { firstName lastName } }' } When method post Then status 200 # 用变量匹配整个用户对象 And match response.data.user == expectedUser
3. 给GraphQL传入参数的两种常用方式
方式一:直接写入查询字符串(适合简单参数)
如果参数不多,直接把参数值写在GraphQL的query里就行:
And request { query: '{ user(providerID: "123") { firstName lastName } }' }
方式二:用GraphQL变量传参(规范且易维护)
如果参数复杂或需要复用,推荐用GraphQL的变量语法,把参数和查询逻辑分开:
Scenario: 用变量给GraphQL传参 # 定义要传入的参数集合 * def userParams = { providerID: '123' } # 编写带变量占位符的GraphQL查询 * def query = """ query GetUser($providerID: String!) { user(providerID: $providerID) { providerID firstName lastName } } """ # 把查询语句和变量一起作为请求体发送 And request { query: query, variables: userParams } Given url '你的GraphQL接口地址' When method post Then status 200
这些都是Karate处理GraphQL最常用的操作,你可以先从结构验证开始练手,慢慢过渡到数据验证和传参,多试几次就熟啦~
内容的提问来源于stack exchange,提问作者Jo-Anne
相关产品推荐
相关产品推荐

