作者:zevbin_187 | 来源:互联网 | 2024-11-28 14:17
针对接口自动化测试中遇到的SSO单点登录系统不支持通过API接口返回Token的问题,本文提供了一种解决方案,即通过UI自动化工具Selenium模拟用户登录过程,从浏览器的localStorage或sessionStorage中提取Token。
在进行接口自动化测试时,遇到了一个棘手的问题:SSO(Single Sign-On)单点登录系统不支持通过API接口返回Token,但后续的API请求又必须携带Token才能正常工作。经过多次尝试和查阅资料,最终找到了一个有效的解决方案——使用Selenium框架来模拟用户登录,并从浏览器中获取Token。
首先,通过开发者工具(F12)检查Token是存储在localStorage还是sessionStorage中。这一步对于正确获取Token至关重要。
接下来,我们编写Python脚本,使用Selenium完成登录流程,并从中提取Token。以下是具体的实现代码:
首先,在cfg.py文件中定义了登录URL、用户名和密码:
import time
from selenium import webdriver
from cfg import LoginUrl, usename, password
class GetToken:
def __init__(self):
self.driver = webdriver.Chrome()
def loginUI(self):
self.driver.get(LoginUrl)
self.driver.maximize_window()
self.driver.implicitly_wait(10)
# 输入用户名和密码
self.driver.find_element_by_id('LoginForm_username').send_keys(usename)
self.driver.find_element_by_id('LoginForm_password').send_keys(password)
self.driver.find_element_by_id('loginSubmit').click()
# 等待5秒,确保session和token已成功返回并存储在浏览器中
time.sleep(5)
# 从localStorage或sessionStorage中获取Token
def get_token(self):
# 根据实际情况选择从localStorage或sessionStorage中获取
token = self.driver.execute_script('return localStorage.getItem("token");')
return token
# 关闭浏览器
def close_browser(self):
self.driver.quit()
if __name__ == '__main__':
gt = GetToken()
gt.loginUI()
ret_token = gt.get_token()
print('获取到的Token:', ret_token)
gt.close_browser()
运行上述代码后,将输出获取到的Token值,如下图所示:
通过这种方式,即使SSO系统不支持直接通过API接口返回Token,我们也能顺利地完成接口自动化测试中的Token获取步骤。
推荐阅读
-
本文探讨了如何在Python环境中集成并调用Java代码,通过具体的步骤和示例展示了这一过程的技术细节。适合对跨语言编程感兴趣的开发者阅读。 ...
[详细]
蜡笔小新 2024-11-27 17:54:57
-
本文讨论了在处理分页数据时常见的低级错误,并提供了优化后的代码示例,以减少重复代码并提高可读性和维护性。 ...
[详细]
蜡笔小新 2024-11-28 15:27:32
-
-
在处理大型代码项目时,简单的C/C++插件往往无法满足需求。本文介绍如何通过配置GNU Global等工具,在VSCode中实现高效的函数跳转。 ...
[详细]
蜡笔小新 2024-11-28 14:01:47
-
本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ...
[详细]
蜡笔小新 2024-11-28 11:23:57
-
本文将指导你如何通过自定义配置,使 Windows Terminal 中的 PowerShell 7 更加高效且美观。我们将移除默认的广告和提示符,设置快捷键,并添加实用的别名和功能。 ...
[详细]
蜡笔小新 2024-11-28 07:25:46
-
本文档提供了使用ECharts库创建柱状图、饼图和双折线图的JavaScript函数。每个函数都详细列出了参数说明,并通过示例展示了如何调用这些函数以生成不同类型的图表。 ...
[详细]
蜡笔小新 2024-11-27 20:24:40
-
蜡笔小新 2024-11-27 19:20:38
-
本文介绍了两项主要任务:编写一个脚本来检测192.168.1.0/24子网中当前在线的IP地址,以及如何在Linux系统中挂载Windows网络共享目录。通过具体步骤和代码示例,帮助读者理解和掌握相关技能。 ...
[详细]
蜡笔小新 2024-11-27 19:13:58
-
本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ...
[详细]
蜡笔小新 2024-11-28 13:19:52
-
本文详细对比了MySQL中的InnoDB与MyISAM两种存储引擎,从性能、事务处理能力、锁机制等多个维度进行了深入探讨,旨在为数据库设计者提供选择依据。 ...
[详细]
蜡笔小新 2024-11-28 12:32:28
-
OpenCV—python角点特征检测之一(cornerHarris、Shi-Tomasi、FAST),Go语言社区,Golang程序员人脉社 ...
[详细]
蜡笔小新 2024-11-28 12:13:08
-
本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ...
[详细]
蜡笔小新 2024-11-28 11:01:19
-
本文介绍如何使用Qt框架创建基础窗口的两种方法。第一种方法直接在main函数中创建并显示窗口;第二种方法通过定义一个继承自QWidget的类来实现更复杂的功能。 ...
[详细]
蜡笔小新 2024-11-28 03:27:55
-
本文详细介绍了Python中的流程控制与条件判断技术,包括数据导入、数据变换、统计描述、假设检验、可视化以及自定义函数的创建等方面的内容。 ...
[详细]
蜡笔小新 2024-11-27 20:04:59
-
本文探讨了如何从文本文件中正确读取一行数据,并将其赋值给C语言中的变量,同时解决了常见的错误和注意事项。 ...
[详细]
蜡笔小新 2024-11-27 19:52:14
-
zevbin_187
这个家伙很懒,什么也没留下!