web自动化笔记(二)
文章目录
- 一、参数化测试
- 1.pytest命令
- 2.实现参数化测试
- 3.填写地址测试
- 4.生成Allure测试报告
- 5.关键字驱动
- 二、案例
- 1.实现后台登录
- 1.1登录
- 1.2.处理验证码
- 1.3.封装识别验证码函数
- 2.通过cookie保持登录
- 2.1给页面添加cookie
- 2.2获取页面的cookie
- 2.3自动化获取cookie
- 三、excel进行数据加载
- 1.安装第三方工具
- 2.封装函数
- 3.使用数据
- 注
一、参数化测试
对于相似的测试用例,实现代码重用,减少代码量,提高维护性。
让一份代码,执行多个用例,每组参数都独立执行一次。
1.pytest命令
#查看版本
pytest --version
#运行特定的测试函数
(1)显式指定函数名,通过::标记,比如命令pytest test_a.py::test_b,则只会运行test_a.py中的test_b函数
(2)使用模糊匹配,使用 -k 选项标识,比如命令pytest -k sqrt test_a.py
(3)使用pytest.mark在函数上进行标记。
#使用装饰器跳过指定的测试函数
@pytest.mark.skip()
#使用装饰器实现预见错误功能
@pytest.mark.xfail()
#参数
-v #输出详细信息
-m #选择标记的测试函数
2.实现参数化测试
import pytest
def test_a():print("这是一个测试用例")@pytest.mark.parametrize("i", #参数名range(5), #参数值
)
def test_b(i):print(f"这是{i}个测试用例")
3.填写地址测试
import pytest
from webdriver_helper import get_webdriverfrom pages import *
from test_a import driver#整个测试会话只执行一次
@pytest.fixture(scope='session')
def user_driver():#完成登录操作driver=get_webdriver()driver.maximize_window()driver.get('登录页面网址(自己填)')#login_page函数在上次已完成,在这里直接使用login_page=LoginPage(driver)login_page.login("账号","密码")assert login_page.msg.text =='登录成功'yield driverdriver.quit()@pytest.mark.parametrize("name,tel,sheng,shi,qu,address,msg"[["", "", "", "", "", "", "提示信息"],["姓名", "", "省", "市", "区", "地址", "提示信息"],["姓名", "电话", "", "市", "区", "地址", "提示信息"],["姓名", "电话", "省", "", "区", "地址", "提示信息"],["姓名", "电话", "省", "市", "", "地址", "提示信息"],["姓名", "电话", "省", "市", "区", "", "提示信息"],["姓名", "电话", "省", "市", "区", "地址", "操作成功"],],
)
def test_new_address(user_driver,name,tel,sheng,shi,qu,address,msg):user_driver.get("新增地址页面网址")page=AddressPage(user_driver)page.click_new()page.input_info(name,tel,sheng,shi,qu,address,)page.click_save()assert page.msg.text ==msg
4.生成Allure测试报告
安装
pip install allure-pytest
启用插件
创建pytest.ini文件
写入:[pytest]addopts= --alluredir=./.allure_resultslog_file_level =info
执行用例,生成结果
pytest
生成测试报告
截图
allure.attach(self._driver.get_screenshot_as_png(),)
5.关键字驱动
页面的样式和功能无线,但是用户操作有限,配合excel完成测试。
1.流程
1.1在excel列出用户动作(关键字)
2.框架读取,执行关键字
3.加载其他插件,实现并行测试,失败重试,HTML报告。
二、案例
1.实现后台登录
1.1登录
import time
from os import timesfrom selenium import webdriver
from selenium.webdriver.common.by import By#创建驱动对象
driver=webdriver.Chrome()
#访问被测页面
driver.get("网址")
#页面最大化
driver.maximize_window()
#登录
driver.find_element(By.XPATH,'账号的xpath').send_keys("账号")
driver.find_element(By.XPATH,'密码的xpath').send_keys("密码")
driver.find_element(By.XPATH,'验证码的xpath').send_keys("验证码")
driver.find_element(By.XPATH,'登录按钮xpath').click()
time.sleep(5)
#关闭驱动
driver.quit()
1.2.处理验证码
验证码常用处理方式:
(1)关闭验证码功能
(2)设置万能验证码
(3)通过第三方
3.1获取验证码图片:使用selenium提供的截图方法获取验证码图片。
3.2通过第三方接口发送请求识别验证码内容。
3.3从返回结果的字典中提取验证码结果。
admin_login.py:
import time
from importlib.metadata import files
from os import timesimport requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from urllib3 import request#创建驱动对象
driver=webdriver.Chrome()
#访问被测页面
driver.get("网址")
#页面最大化
driver.maximize_window()
#截图验证码图片
driver.find_element(By.XPATH,'验证码xpath').screenshot("截图名称.png")#通过第三方接口发送请求识别验证码内容
url="第三方链接"
#传递参数信息:用户名、密码、用户id、验证码编号
data={"user":"用户名","pass":"密码","sofid":"用户id","codetype":1902
}
#提取验证码图片
files={"userfile":open("截图名称.png","rb")}
#发送接口请求识别验证码
resp=requests.post(url,data=data, files=files)
#查看响应结果:
res=resp.json()
print(res)
if res["err_no"]==0:code=res["pic_str"]
else:print("验证码识别失败")#登录
driver.find_element(By.XPATH,'账号的xpath').send_keys("账号")
driver.find_element(By.XPATH,'密码的xpath').send_keys("密码")
driver.find_element(By.XPATH,'验证码的xpath').send_keys("code")
driver.find_element(By.XPATH,'登录按钮xpath').click()
time.sleep(5)
#关闭驱动
driver.quit()
1.3.封装识别验证码函数
在utils模块中定义一个函数进行识别验证码:
1.发送接口请求,携带对应的参数信息
2.获取返回结果,提取验证码信息
3.返回验证码实际值
utils.py:
import requestsdef img_code():url = "第三方链接"data = {"user": "用户名","pass": "密码","sofid": "用户id","codetype": 1902}files = {"userfile": open("截图名称.png", "rb")}resp = requests.post(url, data=data, files=files)res = resp.json()if res["err_no"] == 0:code = res["pic_str"]print(f"验证码识别成功:{code}")return codeelse:print("验证码识别失败")return False
进行调用函数使用验证码的值:(admin_login.py:)
#调用验证码识别函数获取验证码
code=img_code()
2.通过cookie保持登录
需要保持登录状态的方式:
1.通过cookie信息的唯一标识符id进行验证
2.让标识符id一直保持登录的状态,那么再次访问就是已登录状态
3.通过cookie的机制原理先获取已登录的id,然后在未登录的页面进行使用并且刷新清除缓存
需要退出登录状态方式:
1.关闭整个浏览器:自动清除cookie信息
2.删除已登录的标识符id:刷新页面,自动退出登录状态
注意点:cookie值修改完成之后,一定要进行清除缓存才能生效
2.1给页面添加cookie
使用selenium提供的方法,需要添加的cookie的内容是键值对的方式。
通过手动添加已登录的cookie信息,绕过登录操作流程,直接保持登录状态。
#给页面添加cookie
driver.add_cookie({"name":"cookie名称","value":"值"}
)
#刷新页面清除缓存
driver.refresh()
2.2获取页面的cookie
cookies=driver.get_cookies()
for i in cookies:print(i)
2.3自动化获取cookie
在第一次登录完成之后,把页面的已登录的cookie信息进行保存,后续直接使用已登录的cookie信息。
获取和使用cookie信息:
#保存cookie信息
def save_cookies(driver):cookies=driver.get_cookies()#将cookies的信息转换成json的格式写入到cookies.json文件中with open("cookies.json","w") as f:f.write(json.dumps(cookies))#使用cookie信息
def load_cookies(driver):#从cookies.json文件中读取cookie信息:#将JSON格式的字符串解析为Python对象try:with open("cookies.json") as f:cookies=json.loads(f.read())#获取cookie信息for cookie in cookies:driver.add_cookie(cookie)else:#刷新driver.refresh()except:pass
判断是否登录:
def is_login(driver):if "管理员登录" in driver.title:print("未登录")return Trueelse:print("已登录")
优化代码:
#自己导入
#创建驱动对象
driver=webdriver.Chrome()
#访问被测页面
driver.get("网址")
#页面最大化
driver.maximize_window()#使用cookie信息
load_cookies(driver)if is_login(driver):#截图验证码图片driver.find_element(By.XPATH,'验证码xpath').screenshot("截图名称.png")#调用验证码识别函数获取验证码code=img_code()#登录driver.find_element(By.XPATH,'账号的xpath').send_keys("账号")driver.find_element(By.XPATH,'密码的xpath').send_keys("密码")driver.find_element(By.XPATH,'验证码的xpath').send_keys("code")driver.find_element(By.XPATH,'登录按钮xpath').click()#保存cookie信息save_cookies(driver)time.sleep(5)#关闭驱动driver.quit()
三、excel进行数据加载
1.安装第三方工具
#安装
pip install openpyxl
#查看
pip list
2.封装函数
from openpyxl import load_workbook#读取excel数据
def read_excel(path):#打开文件wb=load_workbook(path)#获取默认的工作表:第二行开始为数据ws=wb.activefor d in ws.iter_rows(min_row=2,values_only=True):yield dif __name__=='__main__':#路径如果抛出unicodeescape错误,使用双反斜杠\\,或者使用正斜杠/,或者加rdata=read_excel('excel表格路径')for d in data:print(d)
3.使用数据
@pytest.mark.parametrize(("wd","count"),read_excel('D:\\installer\\Python\\xm\\pythonProject3\\ddt.xlsx'))
注
内容学自b站 码尚软件测试平台 和 巨量质量管理平台
相关文章:
web自动化笔记(二)
文章目录 一、参数化测试1.pytest命令2.实现参数化测试3.填写地址测试4.生成Allure测试报告5.关键字驱动 二、案例1.实现后台登录1.1登录1.2.处理验证码1.3.封装识别验证码函数 2.通过cookie保持登录2.1给页面添加cookie2.2获取页面的cookie2.3自动化获取cookie 三、excel进行数…...

IIS部署netcore程序后,出现500.30错误解决方案之一
netcore程序部署到IIS后一直出现错误,访问首页后会跳转到登录页地址,然后看到如下错误 HTTP Error 500.30 - ANCM In-Process Start Failure Common solutions to this issue: The application failed to start The application started but then stopp…...

spring 学习(spring-Dl补充(注入不同类型的数据))
前言 在之前的案例,列举的最多的是注入 对象。本篇博客则是补充说我们不仅可以注入对象 还可以注入其他的数据类型包括基本数据类型,引用数据类型。 注入基本数据类型 常见的基本数据类型有:short char int long float double boolean …...

Docker Desktop之Nginx
安装Nginx 把这个复制 到docker 中执行 即可...
利用ffplay播放udp组播视频流
ffplay -fs -fflags nobuffer -flags low_delay -analyzeduration 0 -probesize 32 -framedrop -sync ext -strict experimental udp://224.1.1.1:5001 -fs : 全屏显示 -fflags nobuffer : 禁用输入缓冲(减少100-200ms缓冲延迟) -an…...

【教程】MySQL数据库学习笔记(七)——多表操作(持续更新)
写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…...
2025.2.14——1400
2025.2.14——1400 A 1400 B 1400 C 1400 D 1400 E 1400 F 1400 G 1400 H 1400 ------------------------------------------------ 思维排序/双指针/二分/队列匹配思维二分/位运算思维数学思维 A 一眼想到的是维护信息计数。维护两个信息同时用长的一半去找短的一半…...
DeepSeek教unity------MessagePack-04
Union 联合 MessagePack for C# 支持序列化接口类型和抽象类类型的对象。它的行为类似于 XmlInclude 或 ProtoInclude。在 MessagePack for C# 中,这些被称为Union。只有接口和抽象类可以被 Union 属性注解。需要唯一的联合键。 /******************************…...
Java异常体系深度解析:从Exception到Error
文章目录 前言一、Java异常体系概览ExceptionError 二、受检异常与非受检异常受检异常(Checked Exception)非受检异常(Unchecked Exception) 三、常见的Error类型四、异常处理机制try-catch-finally结构Throws关键字 五、自定义异…...
【linux】文件与目录命令 - ln
文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项 ln 命令用于在文件系统中创建硬链接或符号链接(软链接),是文件共享和路径引用的常用工具。 1. 基本用法 语法: ln [选项] 源文件 [目标文件/目标目录]功能: 创…...

Xilinx kintex-7系列 FPGA支持PCIe 3.0 吗?
Xilinx kintex-7系列资源如下图 Xilinx各系列的GT资源类型和性能 PCIe Gen1/2/3的传输速率对比 K7上面使用的高速收发器GTX最高速率为12.5GT/s, PCIe Gen2 每个通道的传输速率为 5 GT/s。 PCIe Gen3 每个通道的传输速率为 8 GT/s。 所以理论上硬件支持PCIe3.0&#…...
无人机遥感技术在农业中的具体应用:株数和株高、冠层覆盖度、作物倒伏检测、叶面积指数、病虫害监测、产量估算、空间数据综合制图
近年来,随着无人机技术的飞速发展,其在智慧农业领域的应用越来越广泛。无人机遥感作为一种高效的空间大数据获取手段,能够为农业生产提供多时相、多维度、大面积的农情信息,为实现精准农业和智慧农业提供了有力支持。今天…...
前端框架React知识回顾
首先,得确定用户的需求,可能是一个准备面试的前端开发者,想要系统复习React相关知识点。接下来要考虑React的核心概念,比如组件、生命周期、Hooks这些肯定是必须的。然后,面试中常问的问题,比如虚拟DOM、状…...
坑多多之ac8257 i2c1 rtc-pcf8563
pcf85163 ordering information Ordering information Package Description Version Marking code PCF85163T/1 SO8 ① SOT96-1 PF85163 PCF85163TS/1 TSSOP8 ② SOT505-1 85163 ①plastic small outline package; 8 leads;body width 3.9 mm ②plastic thin…...

webpack构建流程
文章目录 [TOC](文章目录) 运行流程初始化流程编译构建流程compile编译make 编译模块build module 完成模块编译 输出流程seal输出资源emit输出完成 小结 运行流程 是一个串行的过程,它的工作流程就是将各个插件串联起来 在运行过程中会广播事件,插件只…...

React - 组件之props属性
在 React 中,props(即属性)是组件之间传递数据的一种方式。它是 React 组件的基础,用于将数据从父组件传递到子组件。 一、类组件中 1. props 的作用 数据传递: props 允许父组件向子组件传递数据。子组件可以使用这些数据来渲…...
PMTUD By UDP
通过UDP探测MTU,并实现udp echo server // Description: UDP echo server. // g udp_echo_server.cc -o udp_echo_server #include <iostream> #include <cstring> #include <arpa/inet.h> #include <unistd.h>#define PORT …...
Hutool - BloomFilter:便捷的布隆过滤器实现
1. 布隆过滤器简介 布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否存在于一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,但缺点是有一定的误判率,即判断元素存在…...

【学习资源】时间序列数据分析方法(1)
时间序列数据分析是一个有趣的话题,让我们多花一些时间来研究。此篇为第一篇文章。主要介绍特征提取方法、深度学习时序数据分析模型、参考资源。期望能帮助大家解决工业领域的相关问题。 1 特征提取方法:信号处理 (来源:INTELLIGENT FAULT DIAGNOSIS A…...

盛铂科技SWFA100捷变频频率综合器:高性能国产射频系统的关键选择
在现代射频系统中,频率综合器是实现精确频率控制和快速跳频的核心组件。盛铂科技推出的SWFA100捷变频频率综合器凭借其卓越的性能和小型化设计,成为高性能射频系统中的理想选择。 SWFA100捷变频频率综合器 高速跳频与宽频覆盖 SWFA100捷变频频率综合器能…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...