我有一个场景,其中有多个步骤/需要运行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": "Authentication challenge issued"
。
我可以将它们分为不同的场景,以便它们每次都调用header authorization
,从而成功运行;我也尝试过。为我工作。但是我认为将这些步骤组合在不同的场景中不是一个好习惯,因为它们实际上是一个场景。我该如何克服这个错误?还是应该在不同的情况下分发它们?
https://automationpanda.com/2018/02/03/are-gherkin-scenarios-with-multiple-when-then-pairs-okay/
EDIT-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'
答案 0 :(得分:2)
我认为您完全错过了基于标头的身份验证-空手道具有全局性的钩子-这是大多数团队使用的钩子。请参阅文档以获取configure headers
。
答案 1 :(得分:1)
只是想说一下,对于 EDIT-1 ,我设法获得了解决方案。这就是我编写具有BASE64格式转换的headers.js文件的方式。
如果我能以更好的方式增强它,请告诉我。
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 {};
}
}