Cucumber 空手道-有多个';何时';在单一场景中的s

Cucumber 空手道-有多个';何时';在单一场景中的s,cucumber,karate,Cucumber,Karate,我有一个场景,其中需要运行多个步骤/REST操作来完成一个流程 每个REST操作都需要有授权用户名和密码。我已经在后台会议中提供了这一点。这就是我现在的功能的样子 Feature: Adding to cart Background: * url 'https://soa-mp-rmsk-someurl.com' * header agent_uid = 'AUTO_TST' * configure ssl = true * header Authoriz

我有一个场景,其中需要运行多个步骤/REST操作来完成一个流程

每个REST操作都需要有授权用户名和密码。我已经在后台会议中提供了这一点。这就是我现在的功能的样子

Feature: Adding to cart

  Background: 
    * url 'https://soa-mp-rmsk-someurl.com'
    * header agent_uid = 'AUTO_TST'
    * configure ssl = true
    * header Authorization = call read('classpath:Project/JSFiles/auth.js') { username: 'ABC', password: '123' }
    * configure logPrettyResponse = true
    * configure logPrettyRequest = true

  Scenario: Find available mobiles
    Given path '/v1/available-mobiles'
    When method get
    Then status 200
    * def mobile = response.iPhoneXSMax

  # Add a mobile to cart
    Given path '/v1/mobiles/'+mobile+'/add
    And request {name: 'iPhoneXSMax'}
    When method put
    Then status 200
现在,这会抛出错误,表示
“faultstring”:“已发出身份验证质询”

我可以将它们分组到不同的场景中,以便它们每次调用
头授权
,从而成功运行;我也试过这个。对我有用。但我不认为将这些步骤分为不同的场景是一种好的做法,因为它们实际上构成了一个场景。我怎样才能克服这个错误?或者我应该在不同的场景中分发它们

编辑-1 这就是我试图为授权详细信息添加配置头的方式;我不能完全理解这一点,你能帮忙吗

headers.js

function fn() {
      var username = karate.get('username');
      var password = karate.get('password');
      if (username && password) {
        return { 
            Authorization: username + password
        };
      } else {
        return {};
      }
    }
我在专题背景中这样称呼它;但是没有起作用

* configure headers = read('classpath:headers.js')
* def username = 'ABC'
* def password = '123'

我想你已经完全忽略了基于标题的auth-空手道有一种全局性的钩子-这是大多数团队使用的。请参阅文档。

我只想说,对于编辑-1我设法得到了解决方案。这就是我编写headers.js文件的方式,该文件具有BASE64格式转换

请让我知道,伙计们,如果我能以任何更好的方式提高它

function fn() {
      var username = karate.get('username');
      var password = karate.get('password');

      if (username && password) {
      var temp = username + ':' + password;
      var Base64 = Java.type('java.util.Base64');
      var encoded = Base64.getEncoder().encodeToString(temp.bytes)
        return { 
            Authorization: 'Basic ' + encoded
        };
      } else {
        return {};
      }
    }

谢谢彼得;我经历了它,也经历了这个。[但是,如何将授权详细信息添加到
configure headers
?并且我需要在新
给定的
语句正确启动之前每次调用“*configure headers”?或者,如果我在后台调用一次就足够了?(这对我来说没问题)@sandeephegde文档和演示中的示例都是关于授权的。阅读它,然后提出具体问题。是的,请在后台打电话-但还有其他方法,我将留给您作为家庭作业-搜索“挂钩”在文档中。我做了一些工作并添加了我在问题中提到的身份验证细节。但我想我需要将用户名和密码转换/编码为Base64格式。你能帮我处理
headers.js
文件吗?我想我需要问一个不同的问题:)@sandeephegde no。你需要真正阅读文档。请一天假,这样做吧。我想这是值得的。