首页 > 解决方案 > 空手道单场景多url访问

问题描述

我想在一个场景中访问多个 url。

当 url 被定义Background并且另一个 url 被使用时Scenario,url 被改变。

如果我使用path,则不会出现这种行为。可以修复urlBackground

Feature: examples

Background:
    * url 'https://jsonplaceholder.typicode.com'

Scenario: get all users and then get the first user by id
    Given path 'users'
    When method get
    Then status 200

    Given url 'https://api.github.com/search/repositories'
        And param q = 'intuit/karate' 
    When method get
    Then status 200

    # The expected behavior is accessed to 'https://jsonplaceholder.typicode.com/users'.
    # But the accual behavior is accessed to 'https://api.github.com/search/repositories/users'.
    Given path 'users'
    When method get
    Then status 200

标签: karate

解决方案


不,但如果你移动Given url 'https://api.github.com/search/repositories'到第二个Scenario:,它会工作得很好。

这是一个刻意的设计。查看hello world 示例。它打了 2 个电话,但url只提到了一次,因为第二个电话只是一个path加法。这是典型的 REST 模式。

所以如果你真的需要做一个不同的 API 调用,你必须使用完整的url

Background:
    * def baseUrl = 'https://jsonplaceholder.typicode.com'

Scenario: get all users and then get the first user by id
    Given url baseUrl
    And path 'users'
    When method get
    Then status 200

    Given url 'https://api.github.com/search/repositories'
    And param q = 'intuit/karate' 
    When method get
    Then status 200

    Given url baseUrl
    And path 'users'
    When method get
    Then status 200

推荐阅读