【发布时间】:2020-06-05 13:17:50
【问题描述】:
我刚刚开始实施空手道 UI (v0.9.5)。已经用空手道实现了api测试,效果很好。
遵循此页面上的 HTTP 基本身份验证策略 - https://github.com/intuit/karate#http-basic-authentication-example 基本身份验证处理适用于 api 测试。我设置了一次 HTTP 标头并运行所有 api 测试。 现在进行 UI 测试,我打开的 URL 会弹出基本的身份验证弹出窗口,如下所示:
所以我认为我可以使用与 api 测试相同的策略来处理这个问题。在我的功能文件的背景部分,我调用进行身份验证的功能文件并设置如下标题:
设置标题的调用功能文件(admin-headers.feature)。通过 karate-config.js 执行管理员用户登录后,此功能文件获取令牌。然后将令牌与 Base64 编码的基本身份验证一起分配给调用 headers.js 的标头。 Base64 用户和密码作为 maven 参数输入,并通过 karate-config 变量读取。
(/admin-headers.feature)
Feature: karate-config.js will perform one time login for admin and
set the session token for all subsequent requests
Background:
* def session = adminAuthInfo.authSession
* def basic_auth = call read('classpath:basic-auth.js') { username: '#(basicAuthUser)', password: '#(basicAuthPassword)' }
* configure headers = read('classpath:headers.js')
Scenario: One-time login for user and set the
session token in request header
上述功能文件(/headers.js)返回Auth和Cookie的js代码。
function() {
var session = karate.get('session');
var basic_auth = karate.get('basic_auth');
if(session){
return {
Authorization: basic_auth,
Cookie: "SESSION=" + session
};
} else {
return {};
}
}
我的 UI 测试功能文件(/ui-test.feature):
Feature: Login test
Background:
# Authorise via api
* callonce read('classpath:common/headers/admin-headers.feature')
* configure driver = { type: 'chrome' }
Scenario: Test login
Given driver 'https://test.internal.mysite.com/names'
运行上述功能文件仍会显示身份验证弹出窗口。
然后我尝试在初始化驱动程序时设置 cookie(我认为这可能不是正确的方法?)如下:
Feature: Login test
Background:
# Authorise via api
* def login = callonce read('classpath:common/headers/admin-headers.feature')
* def uiCookie = { name: 'SESSION', value: '#(login.userAuthInfo.authSession)', domain: 'test.internal.mysite.com' }
* configure driver = { type: 'chrome', cookie: '#(uiCookie)' }
Scenario: Test login
Given driver 'https://test.internal.mysite.com/names'
以上也行不通。我在这里做错了什么?一直弹出是因为初始化驱动时没有设置cookie然后打开指定的url?
非常感谢您的帮助。
【问题讨论】:
标签: karate