空手道框架 - 如何检查匹配中的条件 OR 包含响应

Posted

技术标签:

【中文标题】空手道框架 - 如何检查匹配中的条件 OR 包含响应【英文标题】:Karate framework - How to check conditional OR in match contains response 【发布时间】:2018-09-21 15:40:43 【问题描述】:

我正在尝试使用匹配包含来验证我的架构响应和数据类型,有时它会返回一个空值,有时它会返回一个字符串,例如。我正在尝试以下操作,但我的断言失败了,因为它没有评估为真。

我正在尝试以下方法:

* 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

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

感谢您的帮助。

【问题讨论】:

【参考方案1】:

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

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

那是行不通的。 #? 后面的部分必须是有效的 javascript 表达式。如果您不熟悉 JS,但 #string 和朋友专门针对空手道 match 关键字并且不是在 JavaScript 中起作用的东西,这可能很难理解。

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

幸运的是,空手道有一个解决方案:(请参阅文档以获取“fuzzy matching”):

"firstName": "##string"

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

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

【讨论】:

以上是关于空手道框架 - 如何检查匹配中的条件 OR 包含响应的主要内容,如果未能解决你的问题,请参考以下文章

空手道 - 条件 if 并且包含何时响应可以是 json 或 html

在空手道 Netty 场景中匹配请求中的键值对

如何使用空手道框架迭代特定功能文件的excel行?

如何在空手道框架中运行特定数量的特征文件?

如何使用空手道框架处理简单的变量和值?

如何在空手道 UI 自动化框架中截取屏幕截图并将其保存为当前日期和时间 [重复]