karate - 在空手道 UI 场景中处理基本身份验证
问题描述
我刚刚开始实施空手道 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
将 Auth 和 Cookie 返回到上述功能文件 (/headers.js) 的 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?
非常感谢您的帮助。
解决方案
我认为您提出了一个非常好的功能请求,它也configure driver
应该接受 cookie,以便您可以导航到页面并一次性设置 cookie,我打开了一个功能请求:https ://github.com/intuit/karate /问题/1053
所以试试这个顺序,参考文档cookie()
:https ://github.com/intuit/karate/tree/master/karate-core#cookieset
* driver 'about:blank'
* cookie(uiCookie)
* driver 'https://test.internal.mysite.com/names'
现在它应该可以工作了!
推荐阅读
- android-studio - Android Studio 房间数据库 - 在 onRestart() 方法中不返回值
- javascript - 如何在 CKEditor5 中设置选择?
- python - 如何让这个 Python 脚本为使用 API 进行的交易添加限制?
- cuda - 如何将双精度数组绑定到texture2D?
- java - 从 Activity 移动到 Google Maps Activity 时,Android Studio 中的 NullPointerException 调用突出显示错误
- vue.js - 在组件生命周期的哪个阶段,prop 被注入到组件中?
- unit-testing - 如何模拟在类内部但不在任何成员函数内部实例化的对象
- sql - 带有 WHERE 子句的 JOIN 之后的 SQL WHERE 语句
- c# - 删除附加到已发送电子邮件的文件时出现异常
- javascript - Vue 相同的类 div,仅展开子项,没有(此)父项