超强整理,Web自动化测试-验证码/cookie机制(详全)

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

1、后台登录案例

设计测试用例处理验证码以及绕过登录使用cookie机制

1)搭建测试环境

安装第三方库,配置对应的测试环境
需要安装依赖库

pip install selenium

安装对应的浏览器以及驱动
谷歌浏览器
谷歌的驱动

浏览器和驱动版本号一定要保持一致才能进行使用

版本号是114之前:
https://chromedriver.storage.googleapis.com/index.html
版本号是114之后:
https://googlechromelabs.github.io/chrome-for-testing/#stable

将谷歌驱动下载完成之后,放置项目文件中即可使用

2)验证测试环境

import time
from selenium import webdriver# 创建驱动对象
driver = webdriver.Chrome()# 访问被测地址
url = "http:n&"
driver.get(url)# 页面最大化
driver.maximize_window()# 强制等待
time.sleep(5)# 关闭驱动
driver.quit()

3)设计流程用例

定位页面元素
操作页面元素

后台登录业务流程用例设计:
访问后台登录页面
输入账号
输入密码
输入验证码
点击登录按钮

import time
from selenium import webdriver
from selenium.webdriver.common.by import By# 创建驱动对象
driver = webdriver.Chrome()# 访问被测地址
url = "http:/bin&"
# # - 访问后台登录页面
driver.get(url)# 页面最大化
driver.maximize_window()# - 输入账号
driver.find_element(By.XPATH,
'/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[2]/td[2]/input').send_keys("admin")# - 输入密码
driver.find_element(By.XPATH,
'/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[3]/td[2]/input').send_keys("msjy123")# - 输入验证码
driver.find_element(By.XPATH,
'/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[5]/td[2]/input').send_keys("8888")# - 点击登录按钮
driver.find_element(By.XPATH, '//*[@id="login_btn"]').click()# 强制等待
time.sleep(5)
# 关闭驱动
driver.quit()

4)验证码处理

一般情况公司如果涉及web自动化测试需要对验证码进行处理会有以下几种方式:
关闭验证码的功能
设置万能的验证码

通过第三方打码平台识别验证码
获取验证码图片

使用selenium提供的截图方法获取验证码图片

# 截取验证码图片
driver.find_element(By.XPATH, '//*[@id="verify"]').screenshot('verify.png')

通过第三方接口发送请求识别验证码图片内容
超级鹰官方平台:https://www.chaojiying.com/price.html

识别验证码图片的接口:https://upload.chaojiying.net/Upload/Processing.php

# 通过第三方接口发送请求识别验证码图片内容
url2 = "https://upload.chaojiying.net/Upload/Processing.php"# 传参数据
data = {# 用户名"user": "tianqiu2",# 密码"pass": "ltqiu123456",# 用户id"sofid": "949627",# 验证码的编号:整数类型"codetype": 1902
}# 提取验证码图片
files = {"userfile": open("verify.png", "rb")}# 发送请求识别验证码
resp = requests.post(url2, data=data, files=files)# 查看响应结果
print(type(resp.json())) # <class 'dict'>返回结果是字典类型
print(resp.json())

从返回结果的字典中提取验证码结果

# 提取验证码数字
if res["err_no"] == 0:code = res["pic_str"]print(f"验证码识别成功:{code}")
else:print("验证码识别失败")

注意点:
一般处理特殊场景或者特殊功能实现不会与用例脚本代码混合在一个模块中,而是会进行独立封装然后调用;
主要的核心目的是实现降低代码的耦合性;

5)封装识别函数

在utils模块中定义img_code函数进行封装

import requestsdef img_code():# 通过第三方接口发送请求识别验证码图片内容url2 = "https://upload.chaojiying.net/Upload/Processing.php"# 传参数据data = {# 用户名"user": "tianqiu2",# 密码"pass": "ltqiu123456",# 用户id"sofid": "949627",# 验证码的编号:整数类型"codetype": 1902}# 提取验证码图片files = {"userfile": open("verify.png", "rb")}# 发送请求识别验证码resp = requests.post(url2, data=data, files=files)# 查看响应结果# print(type(resp.json())) # <class 'dict'>返回结果是字典类型# print(resp.json())res = resp.json()# 提取验证码数字if res["err_no"] == 0:code = res["pic_str"]print(f"验证码识别成功:{code}")return codeelse:print("验证码识别失败")return False

在用例脚本中可以调用函数识别验证码输入:

# 调用识别验证码函数获取验证码内容
code = img_code()# - 输入验证码
driver.find_element(By.XPATH,
'/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[5]/td[2]/input').send_keys(code)

2、通过cookie保持登录

需要保持自动登录的方式:
通过cookie信息的唯一标识符id进行验证;
让标识符id一直保持登录状态,那么再次访问就是已登录状态;
通过cookie的机制原理先获取已登录的id然后在未登录的页面进行使用并且刷新;

需要退出状态状态的方式:
关闭浏览器;
自动清楚cookie信息;
删除已登录的标识符id;
默认退出登录状态;

注意点:对页面的cookie值进行修改完成之后,一定要进行刷新页面清除缓存才能生效

1)给页面添加cookie

使用selenium提供的方法:add_cookies,需要天剑的cookie内容都是键值对的方式

通过手动添加已登录的cookie信息,绕过登录,保持登录状态

# 手动添加cookie信息进入自动登录
driver.add_cookie(
{"name": "PHPSESSID", "value": "t83q6ua3v073nuc9dur8m08qi6"}
)# 刷新页面清除缓存
driver.refresh()

2)获取页面的cookie

通过selenium提供的get_cookies()获取当前页面的cookie信息

# 获取页面的cookie信息
cookies = driver.get_cookies()
for i in cookies:print(i)

3)自动化获取cookie

在第一次登录完成之后,把当前页面的已登录的cookie信息进行保存
在第二次及以后所有的登录中使用已登录的cookie信息,直接绕过登录

定义2个函数来获取cookie信息和使用cookie信息

# 保存cookie信息
def save_cookie(driver):# 将页面中的cookie信息保存在json文件中# 获取页面的cookie信息cookies = driver.get_cookies()with open("cookies.json", "w") as f:# 将cookie字典类型转化成json类型写入到cookies.json文件中f.write(json.dumps(cookies))# 使用cookie信息
def load_cookies(driver):# 从cookies,json文件中读取cookie信息with open("cookies.json", ) as f:# 将json文件格式转化为Python中的字典cookies = json.loads(f.read())# 遍历字典获取键值对cookie进行添加for cookie in cookies:driver.add_cookie(cookie)else:# 刷新页面,清除缓存driver.refresh()

出现问题:
进入被测页面之后直接使用cookie信息,那么没有对应的cookies.json文件那么程序会报错

解决方案:
在读取cookie信息的文件函数中添加捕获异常的代码

# 使用cookie信息
def load_cookies(driver):# 从cookies,json文件中读取cookie信息try:with open("cookies.json", ) as f:# 将json文件格式转化为Python中的字典cookies = json.loads(f.read())# 遍历字典获取键值对cookie进行添加for cookie in cookies:driver.add_cookie(cookie)else:# 刷新页面,清除缓存driver.refresh()except:pass

当使用cookie信息进行绕过登录之后,原来的页面元素无法进行定位
判断当前页面是否登录

已登录
不执行流程用例脚本

未登录
执行流程用例脚本完成第一次登录保存cookies.json

通过定义一个函数判断页面的标题是否是登录状态

# 通过定义一个函数判断页面的标题是否是登录状态
def is_login(driver):if "管理员登录" in driver.title:print("目前没有cookies信息,需要进行正常流程登录")return Trueelse:print("已登录")return False

用例完整流程执行脚本:

import code
import timeimport requests as requests
from selenium import webdriver
from selenium.webdriver.common.by import Byfrom utils import img_code, load_cookies, save_cookie,is_login# 创建驱动对象
driver = webdriver.Chrome()
# 访问被测地址url = "http:/n&"
# # - 访问后台登录页面
driver.get(url)# 页面最大化
driver.maximize_window()# 使用cookie信息
load_cookies(driver)if is_login(driver):# 截取验证码图片driver.find_element(By.XPATH, '//*[@id="verify"]').screenshot('verify.png')# 调用识别验证码函数获取验证码内容code = img_code()# - 输入账号driver.find_element(By.XPATH,
'/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[2]/td[2]/input').send_keys("admin")# - 输入密码driver.find_element(By.XPATH,
'/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[3]/td[2]/input').send_keys("msjy123")# - 输入验证码driver.find_element(By.XPATH,
'/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[5]/td[2]/input').send_keys(code)# - 点击登录按钮driver.find_element(By.XPATH, '//*[@id="login_btn"]').click()# 保存cookie信息save_cookie(driver)# 强制等待time.sleep(5)# 关闭驱动driver.quit()
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

人生路上或许充满了迷茫、坎坷和挑战,但只要保持勇气、耐心和信念,就能越过重重困难,走向辉煌的彼岸。相信自己,勇往直前!

在追逐梦想的路上,不要畏惧失败与挫折,因为最伟大的胜利往往诞生于最艰难的时刻。坚持奋斗,相信自己,你定能创造属于自己的辉煌。

生活就像一场马拉松,不是速度快与否,而是坚持到底的勇气和毅力。不论前方有多少困难,只要心怀梦想,勇往直前,你定能迎接辉煌的成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot整合Elastic-job

一 概述 Elastic-Job 最开始只有一个 elastic-job-core 的项目&#xff0c;定位轻量级、无中心化&#xff0c;最核心的服务就是支持弹性扩容和数据分片&#xff01;从 2.X 版本以后&#xff0c;主要分为 Elastic-Job-Lite 和 Elastic-Job-Cloud 两个子项目。esjbo官网地址 Ela…

【五】【C语言\动态规划】删除并获得点数、粉刷房子、买卖股票的最佳时机含冷冻期,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

Docker部署Plik临时文件上传系统并实现远程访问设备上传下载文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

[Angular] 笔记 11:可观察对象(Observable)

chatgpt: 在 Angular 中&#xff0c;Observables 是用于处理异步数据流的重要工具。它们被广泛用于处理从异步操作中获取的数据&#xff0c;比如通过 HTTP 请求获取数据、定时器、用户输入等。Observables 提供了一种机制来订阅这些数据流&#xff0c;并可以在数据到达时执行相…

代码随想录算法训练营day1|704.二分查找、27.移除元素

第一章 数组 part01 今日任务 数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 详细布置 数组理论基础 文章链接&#xff1a;代码随想录 题目建议&#xff1a; 了解一下数组基础&#xff0c;以及数组的内存空间地址&#xff0c;数组也没那么简单。 704. 二…

Jupyter Notebook 开启远程登录

Jupyter Notebook可以说是非常好用的小工具&#xff0c;但是不经过配置只能够在本机访问 安装jupyter notebook conda install jupyter notebook 生成默认配置文件 jupyter notebook --generate-config 将会在用户主目录下生成.jupyter文件夹&#xff0c;其中jupyter_noteb…

查看ios app运行日志

摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块&#xff0c;可以对苹果奔溃日志进行符号化、格式化和分析&#xff0c;极大地简化了开发者的调试…

短说社区运营的使用工具分享(一)

本文是一篇针对短说社区运营的使用工具分享帖&#xff0c;是小编结合日常使用&#xff0c;总结的一些可以帮助网站管理员和运营人员进行日常操作和管理的工具。 1. 想天工作台之运营面板 想天工作台可以将桌面划分不同的类型来辅助办公&#xff0c;我分享下我当前的桌面情况&…

基于Mbed Studio环境下开发STM32

基于Mbed Studio环境下开发STM32 &#x1f4cd;Mbed官网&#xff1a;https://os.mbed.com/ ✨mbed OS是ARM出的一个免费开源的&#xff0c;面向物联网的操作系统。提供了一个定义良好的API来开发C应用程序&#xff1b;集成度很高&#xff0c;类似Arduino&#xff0c;目前并不兼…

新兴品牌如何做好传播?媒介盒子分享三招

很多品牌抓住了品类和流量红利&#xff0c;给自己做了传播&#xff0c;但是红利是有时效的&#xff0c;流量越来越贵&#xff0c;竞争对手你追我赶&#xff0c;只有真正占领用户心智&#xff0c;才能获取长期利润。今天媒介盒子就来和大家聊聊&#xff1a;新兴品牌如何做好传播…

用katalon解决接口/自动化测试拦路虎--参数化

不管是做接口测试还是做自动化测试&#xff0c;参数化肯定是一个绕不过去的坎。 因为我们要考虑到多个接口都使用相同参数的问题。所以&#xff0c;本文将讲述一下katalon是如何进行参数化的。 全局变量 右侧菜单栏中打开profile&#xff0c;点击default&#xff0c;打开之后…

[spark] SaveMode

https://spark.apache.org/docs/latest/api/java/index.html?org/apache/spark/sql/SaveMode.html Overwrite 覆盖模式是指将DataFrame保存到数据源时&#xff0c;如果数据/表已经存在&#xff0c;则现有数据将被DataFrame的内容覆盖。 注意: Overwrite 模式会覆盖已存在的表…

室内设计师效果图云渲染好?还是本地渲染好?

室内设计师在设计项目中经常面临一个关键的技术选择&#xff1a;使用云渲染服务或本地渲染完成效果图渲染呢&#xff1f;每种方式都有其独的优势与不足&#xff0c;且影响整个设计的完成速度、质量和成本。当然还有部分人群不知道云渲染是什么&#xff1f;本文整理关于云渲染的…

完全背包问题,原理剖析,公式推导,OJ详解

文章目录 前言一、完全背包的状态设计1、状态设计2、状态转移方程3、对比0/1背包问题4、时间复杂度分析 二、完全背包问题的优化1、时间复杂度优化2、空间复杂度优化 三、OJ练习裸题完全背包离散化最小值 前言 完全背包问题&#xff0c;相比0/1背包问题&#xff0c;实就每个物品…

upset 绘制

好久没有更新,今天来一个upset图的绘制 1.1 安装包 #绘制upset的包现在看来有三个 ## UpSet ### 最基本的upsetR包,使用方便,但是扩展不方便 devtools::install_github("hms-dbmi/UpSetR") ## complex-upset ### UpSet的升级款 支持ggplot2 devtools::install_git…

码住!8个小众宝藏的开发者学习类网站

1、simplilearn simplilearn是全球排名第一的在线学习网站&#xff0c;它的课程由世界知名大学、顶级企业和领先的行业机构通过实时在线课程设计和提供&#xff0c;其中包括顶级行业从业者、广受欢迎的培训师和全球领导者。 2、VisuAlgo VisuAlgo是一个免费的在线学习算法和数…

c++环形缓冲区学习

C环形缓冲区设计与实现&#xff1a;从原理到应用的全方位解析 - 知乎 这里插入一个回调函数的学习&#xff1a; C回调函数详解_c 回调函数-CSDN博客 【C】C回调函数基本用法&#xff08;详细讲解&#xff09;_c 回调函数-CSDN博客

微软为 Android 用户推出了人工智能助手 Copilot 应用程序

微软为 Android 用户推出了人工智能助手 Copilot 应用程序 - 与 ChatGPT 类似&#xff0c;它包括聊天机器人功能和 DALL-E 3 图像生成 - 该应用程序包括免费访问 OpenAI 的 GPT-4 模型&#xff0c;这是 ChatGPT 中的付费功能 - 发布微软将 Bing Chat 更名为 Copilot 您是否尝试…

Nature Perspective | LLMs 作为角色扮演引擎

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 随着对话智能体的表现越来越像人&#xff0c;我们必须开发出有效的方法&#xff0c;在不陷入拟人化陷阱的情况下&#xff0c;用高层次的术语描述它们的…

ARP协议分析实验

实验目的&#xff1a; &#xff08;1&#xff09;理解ARP协议的作用&#xff1b; &#xff08;2&#xff09;理解ARP协议的工作方式。 实验器材&#xff1a; Cisco packet 实验内容&#xff1a; 实验步骤&#xff1a; 布置拓扑&#xff1a; &#xff08;2&#xff09;实验…