java - Karate 框架 - 如何检查比赛中的条件 OR 包含响应

标签 java json automated-tests graphql karate

作为示例,我尝试使用匹配包含来验证我的架构响应和数据类型,有时它会返回 null,有时会返回一个字符串。我正在尝试以下操作,但断言失败,因为它的计算结果不为 true。

我正在尝试以下操作:

* match each $response.data.Results contains

        """
        {
        "providerID": '#number',
        "firstName": "#? _ == '#string' || _ == '#null'",
        "lastName": '#string',
        "mI": "#? _ == '#string' || _ == '#null'",
        "title": '#string',
        "name": '#string',
        "nameLFMT": '#string',
        "status": '#string',
        "specialties": '#array',
        "locations": '#array',
        "institutions": '#array',
        "acceptNewPatient": '#string',
        "imageUri": '#string',
        "nearestLatitude": '#number',
        "nearestLongitude": '#number'
        }

            """

例如“firstName”返回的数据为“firstName”:null,

在每次比赛之前我都会发送以下内容:

Scenario: SearchResults
  #Verify 200 response status returned
Given text query =
        """
     {
                  Results: getSearchResults(searchLatitude:"48.942833",
                        searchLongitude: "-119.984549",
                        providerType: "Primary Care Physicians",
                        sortBy: "distance",
                        maxDistance:"600",
                        skip: 0,
                        take: 10) {
                                        providerID
                                        firstName
                                        lastName
                                        mI
                                        title
                                        name
                                        nameLFMT
                                        status
                                        specialties
                                        locations
                                        institutions
                                        acceptNewPatient
                                        imageUri
                                        nearestLatitude
                                        nearestLongitude
                        }

    }

        """

And request { query: '#(query)' }
When method post
Then status 200

我没有定义架构,我还没有弄清楚如何做到这一点,所以我不确定这是否是我的问题。我知道这可能是我应该这样做的,但我仍在学习。

感谢您的帮助。

最佳答案

好吧,我在这里看到一个问题:

"firstName": "#? _ == '#string' || _ == '#null'"

那是行不通的。 #? 后面的部分必须是有效的 JavaScript 表达式。如果您不熟悉 JS,那么这可能很难理解,但是 #string 和 friend 们特定于 Karate match 关键字,并且不是在 JavaScript 中工作。

所以上面这行所做的是检查 firstName是否等于文字字符串#string

幸运的是 Karate 有一个解决方案:(请参阅文档“fuzzy matching”):

"firstName": "##string"

这很方便,双##表示“可选”,将匹配两者字符串或null

编辑:对于高级案例,请阅读:https://stackoverflow.com/a/50350442/143475

关于java - Karate 框架 - 如何检查比赛中的条件 OR 包含响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49780399/

相关文章:

javascript - Protractor 3.0.0 和 Cucumber 自动化测试

android - 通过 Android API <= 23 上的 Appium 功能更改语言

java - 创建对应泛型类型的Type对象

java - 如何使用参数化构造函数运行 junit

java - 如何在没有地址栏的情况下获取浏览器窗口大小Java?

javascript - THREE.js使用背景素材

json - Spring MVC 3.2 和 JSON ObjectMapper 问题

java - Mockito 在使用@Mock 时将空值注入(inject) Spring bean?

java - 我可以使用哪种 Spring 集成模式?

java - 解析具有未知值的 JSON