当前位置: 首页 > news >正文

test——自动化测试

目录

一概念

1自动化

2回归测试 

3自动化分类 

3.1接口自动化

3.2UI自动化

4自动化测试金字塔

5web自动化测试 

6工作原理

二函数

1元素定位

1.1cssSelector

​编辑1.2xpath

语法

2操作对象

2.1click()

2.2send_keys()

2.3clear() 

2.4text

2.5get_attribute()

2.6title

2.7current_url

3窗口

3.1current_window_handle

3.2window_handles

3.3switch_to.window(新页面)

3.4close()

3.5窗口大小设置

3.6save_screenshot(路径)

3.7弹窗

4等待

4.1强制等待

4.2隐式等待

 4.3显示等待

5浏览器 

5.1常见操作

5.2文件上传

5.3无头模式

5.4页面加载方式

三实战

1结构设计

2屏幕截图

3测试报告

3.1测试计划 

3.2Bug描述 

3.3遗留问题 

3.4测试结论


一概念

1自动化

        关于自动化的例子在生活中比比皆是:自动洒水机,自动洗手器

        软件中的自动化也是如此:让机器帮助我们进行自动化测试,提高效率

2回归测试 

        自动化测试主要使用的测试阶段是:回归测试:在软件即将推出新版本时,要对原来的旧版本的功能重新测试一遍,避免新旧版本发生冲突,也避免新版本上线旧版本不能使用;

自动化测试可以代替人工测试吗?

        自动化测试不一定比人工测试测试的更加有保障,自动化测试由测试人员手动编写,后续的更新维护需要测试人员进行;也就是说自动化测试就取决于测试人员的开发技术能力

3自动化分类 

3.1接口自动化

        接口指的是:前端(服务器)请求后端数据的接口,通常包括:请求头部,请求体;后端处理完后返回的请求响应内容,状态码... 接口包含的所有内容我们都需要进行测试

3.2UI自动化

        UI自动化有两种:web前端(浏览器打开的页面)客户端(软件打开的页面):

        第一种需要编写脚本,让机器模拟人的行为自动打开浏览器,输入内容进行测试; 第二种要通过模拟器才能进行如上动作

4自动化测试金字塔

        一种是理想化的自动化测试:在单元测试中花费较少的时间的精力获得更高的回报;

        实际企业中的自动化测试:前期花费大量时间开发脚本,后期逐渐解放双手获取更大的收益

5web自动化测试 

        进行web自动化测试的前提是:要驱动机器打开浏览器;那什么是驱动呢?车子有了驱动才能让车跑起来;计算机与外设进行交互,就需要安装驱动程序才能实现

        搭建web自动化环境就需要安装:webdriver-manager 管理web驱动程序(避免浏览器升级后web驱动程序需要手动去下载新的web驱动程序的麻烦),还要下载selenium = 4.0.0 库让我们编写自动化脚本(前提先安装python和pycharm后,打开pycharm进行配置)

        以edge浏览器为例测试当前环境

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
# 1. 自动下载对应版本的驱动
driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
# 2. 访问百度
driver.get("https://www.baidu.com")
# 3. 找到输入框并输入“迪丽热巴” 
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
# 4. 点击“百度一下”按钮
driver.find_element(By.CSS_SELECTOR, "#su").click()
# 5. 关闭浏览器
driver.quit()

        程序运行之后退出码为0就说明测试通过

6工作原理

二函数

1元素定位

  • web自动化测试通过定位元素(搜索框)进行操作;
  • 主要的元素有:id,classname,tagname,xpath,cssSelector

1.1cssSelector

  • 主要通过ID选择器子类选择器进行定位

上面的百度搜索框使用的是ID选择器

从百度下面热搜中的其中一条信息进行定位时选择的是子类选择器 进行元素定位时除了定位一个元素,还能定位多个元素:find_elements() 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManagerdriver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
driver.get("https://www.baidu.com")#列表的多个元素进行定位
ret = driver.find_elements(By.CSS_SELECTOR, "#hotsearch-content-wrapper")
for i in ret:print(i.text)
driver.quit()

1.2xpath

  • 不仅可以在XML⽂件中查找信息,还可以在HTML中选取节点
语法
  • //*      获取HTML所有节点
  • //[指定节点]     获取HTML指定节点
  •      获取节点中的直接子节点
  • ..      获取节点中的父节点
  • [@...]    节点属性的匹配

 案例:

2操作对象

        前提:元素定位找到后才能进行操作对象

2.1click()

  • 点击/提交对象

//找到百度按钮后进行点击(推荐)
driver.find_element(By.CSS_SELECTOR, "#su").click()
//分开写
else = driver.find_element(By.CSS_SELECTOR, "#su")
else.click()

2.2send_keys()

  • 模拟键盘输入信息
//找到百度的搜索框输入迪丽热巴
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")

2.3clear() 

  • 输⼊⽂本后⼜想换⼀个新的关键词,这⾥就需要⽤到它
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("蔡徐坤")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,"#kw").clear()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("小黑子")

2.4text

  • 获取文本信息
tt = driver.find_element(By.XPATH,'//*[@id="hotsearch-content-wrapper"]/li[1]/a/span[2]').text
print(tt)

         那获取百度一下按钮的文本信息能不能做到呢?

tt = driver.find_element(By.XPATH,'//*[@id="su"]').text
print(tt)

        结果是什么都没打印: 

        为什么?因为百度一下是value属性,不是文本信息

2.5get_attribute()

  • 获取指定的属性信息

        打印百度一下的文本信息需要用到它

tt = driver.find_element(By.XPATH,'//*[@id="su"]').get_attribute("value")
print(tt)

2.6title

  • 获取当前页面的标题

2.7current_url

  • 获取当前页面的路径

3窗口

        我们在百度页面打开百度图片后,打印百度图片的标题与url,与百度页面的标题与url

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManagerdriver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
driver.get("https://www.baidu.com/")
te=driver.title
ul=driver.current_url
print("before " + te)
print("before " + ul)
driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(6)").click()
time.sleep(2)
te=driver.title
ul=driver.current_url
print("after " + te)
print("after " + ul)driver.quit()

        打印结果:

怎么是一样的?难道是我们的代码写错了吗?

        不是的!主要原因是:我们打开新的窗口时driver变量还是停留在之前的百度页面,我们要进行页面调整

3.1current_window_handle

  • 获取当前页面的句柄(通过它来定位页面)

3.2window_handles

  • 获取打开所有页面的句柄

3.3switch_to.window(新页面)

  • 切换页面

        将三者结合起来进行页面切换:

#保存当前页面的handle
BeforeHandle=driver.current_window_handle
driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(6)").click()#获取所有页面的handle
AllHandle=driver.window_handles#发现页面更改要及时更新
for handle in AllHandle:if handle != BeforeHandle:driver.switch_to.window(handle)#再来进行获取
print("after " + driver.title)
print("after " + driver.current_url)driver.quit()

        输出结果: 

        但也可能存在着点击跳转后页面不修改的情况:要注意区分

3.4close()

  • 关闭当前页面

        如果只有一个页面,关闭整个浏览器;如果有多个页面,它只会关闭当前所在的页面,不会影响其他窗口

3.5窗口大小设置

#窗⼝最⼤化
driver.maximize_window()
#窗⼝最⼩化
driver.minimize_window()
#窗⼝全屏
driver.fullscreen_window()
#⼿动设置窗⼝⼤⼩
driver.set_window_size(大小,高度)

3.6save_screenshot(路径)

  • 进行屏幕截图,生成的图片保存到指定路径中
# 图片保存在当前路径
driver.save_screenshot("./test.png")

        当我们进行多次屏幕截图:生成的图片文件路径不唯一,新的会覆盖旧的图片;如果想要知道多次测试后的图片保存都保存下来,就要用时间生成文件路径

# AutoTest-年-月-日-时.分.秒.png
filename="AutoTest-"+datetime.datetime.now().strftime('%Y-%m-%d-%H.%M.%S')+'.png'
driver.save_screenshot('./'+filename)

3.7弹窗

弹窗类型共有三种:(弹窗不是页面的元素,无法进行定位

alert = driver.switch_to.alert # 区分:driver.switch_to_alert
//确认
alert.accept()
//取消
alert.dismiss()

alert = driver.switchTo.alert
alert.send_keys("cxk")
alert.accept()
#alert.dismiss()

4等待

        通过百度搜索输入数据后打开页面时,想点击页面的任意元素(如图片时):

driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
driver.get("https://www.baidu.com/")
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("cxk")
driver.find_element(By.CSS_SELECTOR,"#su").click()#time.sleep(2)driver.find_element(By.CSS_SELECTOR,"#s_tab_inner > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic").click()driver.quit()

        代码报错:没有找到对应的元素 

        解决:添加等待时间(页面还没渲染出来,找不到对应元素

4.1强制等待

  • 强制等待设置的时间(这段时间进程阻塞),时间过后才继续进行以下代码
time.sleep() #单位为秒
  • 优点:使用简单,方便调试;
  • 缺点:程序运行浪费大量时间 

4.2隐式等待

  • 设置的时间内不断查找元素:找到了就继续往下执行;直到超时没找到就报错;
  • 作用在driver创建到退出之间的全部元素(一般driver创建就进行设置) 
driver.implicitly_wait() #单位为秒

 4.3显示等待

        与隐式等待类似:指定的时间找到元素后进行往下执行;相较于隐式等待:它需要传方法与指定元素:使得等待元素的情况更为具体;实现演示等待先创建对象:WebDriverWait ;再去 expected_conditions 调用对应的方法

方法链接:expected_conditions

显示等待看起来与隐式等待一样:但显示等待可以等待当前页面有无弹窗

driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
#隐式等待弹窗 -> 判断不出有无弹窗(弹窗不是页面元素)
# driver.implicitly_wait(3)
driver.get("file:///C:/Users/29096/Desktop/JS/%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B62024-C++/selenium-html/alert.html#")
driver.find_element(By.CSS_SELECTOR,"#tooltip")
# alert = driver.switch_to.alert
#显示等待弹窗 -> 无弹窗会判断出来
WebDriverWait(driver,3).until(expected_conditions.alert_is_present())driver.switch_to.alert.accept()
driver.quit()

5浏览器 

5.1常见操作

        浏览器常见功能: 

#要访问的网址
driver.get("https://tool.lu/") 
#后退
driver.back()
#前进
driver.forward()
#刷新
driver.refresh()

5.2文件上传

        找到文件上传元素后进行点击,接下来的操作是不是还是要定位元素进行后续操作?不用:定位到上传文件的元素后后面输入:直接填写文件路径 + 文件名 就能实现文件上传

driver.get("路径")
driver.find_element(By.CSS_SELECTOR,"复制Select").sent_keys("填写文件路径和文件名")

5.3无头模式

        执行自动化时浏览器默认会打开浏览器页面进行,我们也可以设置无头默认让打开操作在后端进行;设置无头模式要通过创建Option对象进行设置,后面创建驱动时把该对象传进去

from selenium.webdriver.edge.options import OptionsOptions = Options()
Options.add_argument("-headless")driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()),options=Options)

5.4页面加载方式

        使用 get() 访问网址时通过是要等页面全部加载完成才进行自动化测试;但有时我们又不想等待页面图片视频加载完成,才进行自动化测试:所以我们可以去设置页面加载方式

options.page_load_strategy = '加载⽅式'
加载方式作用
normal默认等全部内容加载完成
eagerDOM访问以就绪,不会等待其它资源加载完成
none直接进行测试(不推荐)

三实战

1结构设计

        进行写测试脚本之前,我们可以先创建一个common软件包:在这个软件包路径下创建ultils的python文件,在这个python文件下创建Driver类:进行驱动下载,提供方法等;再把这个对象在当前python文件中定义出来(类似单例模式),此后我们直接使用我们创建好的对象进行测试即可

#common/ultils.pyfrom selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManagerclass Driver:driver=""def __init__(self):option =Options() #后面有需要就在这里设置self.driver=webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()),options=option)self.driver.implicitly_wait(3)#单例模式
BlogDriver=Driver()

        在Test软件包中创建py文件:编写测试用例脚本

#Test/test.py
from common.Ultils import BlogDriverclass bloglogin:url=""driver=""def __init__(self):self.url="https://www.baidu.com/"self.driver=BlogDriver.driverself.driver.get(self.url)def Test(self):BlogDriver.SaveScreem()# 一起测试完再退出#self.driver.quit()#调用测试函数(不建议)
# BlogLogin=bloglogin()
# BlogLogin.Test()

       但是有些测试用例需要借助前面的测试用例来实现,比如:测试博客网站时要测试在登录的场景下博客内容的提交,就要借助前面测试登录成功的用例;所以关于测试模块建议写在同一个py文件中,测试脚本写完后统一在这个文件进行测试

# RoundMain.pyfrom common.Ultils import BlogDriver
from BlogLogin import blogloginif __name__ == "__main__":bloglogin().Test()BlogDriver.driver.quit()

2屏幕截图

        有时候测试用例很多,一不小心就会出现错误,进行错误排查时就要使用到屏幕截图;但我们在函数里讲到的屏幕截图仅仅解决了可以多次保存图片的问题,并不能有效定位到是哪里出现问题,如:那个测试函数写错了,错误产生的时间是在什么时候;所以我们就要来再次进行优化(编写屏幕截图的方法在Driver类中设计,测试时直接调接口)

   #先创建../image 文件夹  def SaveScreem(self):#每天截图放在同一个日期文件夹上dirname=datetime.datetime.now().strftime("%Y-%m-%d")#image文件夹没有日期文件夹就继续创建if not os.path.exists("../image/"+dirname):os.mkdir("../image/"+dirname)# 图片格式: 测试方法-日期.pngfilename=sys._getframe().f_back.f_code.co_name+"-" + 、        datetime.datetime.now().strftime("%Y-%m-%d-%H.%M.%S")+".png"# 路径: ../image/日期文件夹/测试方法-日期.pngself.driver.save_screenshot("../image/"+dirname+"/"+filename)

3测试报告

        完成项目测试后,认为项目已经测试完成时就可以编写测试报告,测试报告主要内容:测试计划,Bug描述,遗留问题,测试结论

3.1测试计划 

功能后端开发前端开发提测日期测试测试日期测试结果
登录界面XXXXXX4.19XXX4.20通过
内容界面XXXXXX4.20XXX4.21通过

 ...

        所谓提测日期:项目开发完成,提交给测试的日期;那如果各个页面耦合度比较高的话,就需要进行先整体提测,再分开提测;

        耦合度不高就每个页面进行独立测试的,最后进行集成测试,将页面整体测试一遍;

3.2Bug描述 

       统计测试计划中发现了多少Bug,有多少崩溃级别的Bug,有多少严重的Bug,有多少一般级别的Bug

bug报告人是否修复
bug描述链接XXX修复
bug描述链接XXX

修复

...

3.3遗留问题 

        例如:需求变更:本次由于XXX原因,推迟到下一个版本进行更新;低优先级的Bug不影响用户使用,推迟到下一个版本上线之后修复;...

3.4测试结论

        本次测试通过,测试耗时多久,修复Bug耗时多久...

        以上便是测试报告中的主要内容,但我们在写项目和对项目编写测试用例进行测试时,负责各个模块的都是自己来做,学习阶段建议把测试内容更充实些,包括但不限于:

项目背景为什么要做这个项目(意义,解决了什么问题)
项目简介项目有哪些功能,每个功能要怎么设计
测试计划XXX
测试工具用到了哪些功能,如WebDriverManager ,selenium
设计的测试类型包含:功能测试,性能测试,自动化测试:覆盖了哪些功能,发现了什么问题
自动化测试测试用例,编写测试化脚本
Bug描述有多少Bug被发现
测试结论测试耗时多久,结果怎么样

相关文章:

test——自动化测试

目录 一概念 1自动化 2回归测试 3自动化分类 3.1接口自动化 3.2UI自动化 4自动化测试金字塔 5web自动化测试 6工作原理 二函数 1元素定位 1.1cssSelector ​编辑1.2xpath 语法 2操作对象 2.1click() 2.2send_keys() 2.3clear() 2.4text 2.5get_attribu…...

Kubernetes相关的名词解释CoreDNS插件(2)

为什么需要DNS服务? service发现是k8s中的一个重要机制,其基本功能为:在集群内通过服务名对服务进行访问,即需要完成从服务名到ClusterIP的解析。 k8s主要有两种service发现机制:环境变量和DNS。没有DNS服务的时候&am…...

【记录】服务器用命令开启端口号

这里记录下如何在服务器上开启适用于外界访问的端口号。 方法 1 使用防火墙 1 su ,命令 输入密码 切换到root节点 2 开启防火墙 systemctl start firewalld3 配置开放端口 firewall-cmd --zonepublic --add-port8282/tcp --permanent4 重启防火墙 firewall-cmd…...

代码审计入门 原生态sql注入篇

前置知识: 漏洞形成的原因: 1、可控的参数 2、函数缺陷 代码审计的步骤: 1、全局使用正则搜索 漏洞函数 ,然后根据函数看变量是否可控,再看函数是否有过滤 2、根据web的功能点寻找函数,然后根据函数看…...

数据结构0基础学习堆

文章目录 简介公式建立堆函数解释 堆排序O(n logn)topk问题 简介 堆是一种重要的数据结构,是一种完全二叉树,(二叉树的内容后面会出), 堆分为大小堆,大堆,左右结点都小于根节点,&am…...

分析虚幻引擎编辑器中使用 TAA 或 TSR 时角色眨眼导致的眼睛模糊问题

1. 引言 用户反馈在使用虚幻引擎编辑器时,当抗锯齿方法设置为时间性抗锯齿 (TAA) 或时间性超级分辨率 (TSR) 时,角色的眼睛在眨眼时会出现模糊现象。时间性抗锯齿和时间性超级分辨率是现代游戏引擎(包括虚幻引擎)中常用的抗锯齿和…...

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个,都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …...

【java实现+4种变体完整例子】排序算法中【堆排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是堆排序的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格: 一、堆排序基础实现 原理 基于二叉堆结构(最大堆),通过以下步骤实现排序: 构建最大堆:将…...

量化交易 - RSRS(阻力支撑相对强度)策略研究 - 源码

一、介绍 RSRS(阻力支撑相对强度)是一种基于价格阻力位与支撑位动态变化的市场择时技术指标,由光大证券在2017年提出。其核心原理是通过量化最高价与最低价之间的线性关系,预测市场趋势变化。 原理: 线性回归建模&a…...

从FPGA实现角度介绍DP_Main_link主通道原理

DisplayPort(简称DP)是一个标准化的数字式视频接口标准,具有三大基本架构包含影音传输的主要通道(Main Link)、辅助通道(AUX)、与热插拔(HPD)。 Main Link:用…...

数据库备份-docker配置主从数据库

创建 Docker Compose 文件 创建一个 docker-compose.yml 文件,定义两个 MySQL 容器(一个主库,一个从库) services:mysql:image: mysql:8.0.27container_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiM…...

YOLO11改进-Backbone-使用MobileMamba替换YOLO backbone 提高检测精度

轻量化模型的技术瓶颈 CNN 的局限性:传统 CNN(如 MobileNet)依赖局部感受野,难以捕捉长距离依赖关系,在高分辨率任务(如语义分割)中需通过增加计算量提升性能,效率低下。 Transforme…...

JavaScript学习教程,从入门到精通,DOM 操作语法知识点及案例代码(20)

DOM 操作语法知识点及案例代码 一、DOM 介绍 1. 什么是 DOM DOM (Document Object Model,文档对象模型) 是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表示,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结…...

Vue3 + TypeScript中defineEmits 类型定义解析

TypeScript 中 Vue 3 的 defineEmits 函数的类型定义&#xff0c;用于声明组件可以触发的事件。以下是分步解释&#xff1a; 1. 泛型定义 ts <"closeDialog" | "getApplySampleAndItemX"> 作用&#xff1a;定义允许的事件名称集合&#xff0c;即组…...

Git命令归纳

初始化git git config --global user.name xxx&#xff1a;设置全局用户名&#xff0c;信息记录在~/.gitconfig文件中git config --global user.email xxxxxx.com&#xff1a;设置全局邮箱地址&#xff0c;信息记录在~/.gitconfig文件中git init&#xff1a;先创建一个目录&am…...

Oracle Recovery Tools修复ORA-600 6101/kdxlin:psno out of range故障

数据库异常断电,然后启动异常,我接手该库,尝试recover恢复 SQL> recover database; ORA-10562: Error occurred while applying redo to data block (file# 2, block# 63710) ORA-10564: tablespace SYSAUX ORA-01110: ???????? 2: H:\TEMP\GDLISNET\SYSAUX01.DBF O…...

ISO26262-浅谈用例导出方法和测试方法

目录 1 摘要2 测试方法3 测试用例导出方法4 测试方法与用例导出方法的差异和联系5 结论 1 摘要 ISO26262定义了测试方法和用例导出方法&#xff0c;共同保证产品的开发质量。但在刚开始学习ISO26262的时候&#xff0c;又不是非常清晰地理解它俩的区别和联系。本文主要对它俩的…...

小测验——已经能利用数据集里面的相机外参调整后看到渲染图像

文章目录 .1 外try——牛的显示.2 try——衣服的显示.3 原生R,T但是部分显示.4 在.3的基础上加上可视化界面.5 调参后能看到东西的.6 能看一点东西+可视化(pytorch3d).7 自己的代码可视化——需要调整.1 外try——牛的显示 import numpy as np import matplotlib.pyplot as …...

2024期刊综述论文 Knowledge Graphs and Semantic Web Tools in Cyber Threat Intelligence

发表在期刊Journal of Cybersecurity and Privacy上&#xff0c;专门讲知识图谱技术和语义Web工具在网络威胁情报领域的作用&#xff0c;还把本体和知识图谱放在相同的地位上讨论。 此处可以明确一点&#xff1a;本体和知识图谱都可以用于网络威胁情报的应用&#xff0c;当然也…...

文件上传及验证绕过漏洞

目录 一、文件上传常见点 二、客户端--JS绕过--PASS-01 1、环境安装 2、禁用JS 3、后缀名绕过 4、修改前端代码 三、服务端黑名单绕过 1、特殊可解析后缀--PASS-03 2、大小写绕过--PASS-06 3、点绕过--PASS-08 4、空格绕过--PASS-07 5、::$DATA绕过--PASS-09 6、配…...

stack和queue的使用和模拟实现

1&#xff1a;stack文档 stack文档 stack的使用 2&#xff1a;queue文档 queue文档 queue的使用 1&#xff1a;队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 2&#xff1a;队列作…...

基于Ubuntu2504部署OpenStack E版

OpenStack 初始化环境安装数据库、memcahe、rabbitmq等服务安装keystone服务安装glance服务安装placement服务安装nova服务安装neutron服务安装horizon服务 官网 OpenStack Epoxy 巩固了作为 VMware 替代方案的地位&#xff0c;增强了安全性&#xff0c;并改进了硬件支持 第 3…...

Jsp技术入门指南【七】JSP动作讲解

Jsp技术入门指南【七】JSP动作讲解 前言一、什么是JSP动作&#xff1f;二、核心JSP动作详解1. jsp:include&#xff1a;动态包含其他页面与<% include %>的区别 2. jsp:forward&#xff1a;请求转发到另一个页面3. jsp:param&#xff1a;为动作传递参数4. jsp:useBean&am…...

电脑 访问 github提示 找不到网页,处理方案

1、找到 本机的 host文件 例如 windows 的 一般在 C:\Windows\System32\drivers\etc\hosts 用管理员身份打开 hosts 文件 如果文件中没有 github的配置&#xff0c;需要自己手动添加上去&#xff1b; 如果有&#xff0c;则需要 检查 github.com 与 github.global.ssl.fastly.…...

性能比拼: Elixir vs Go

本内容是对知名性能评测博主 Anton Putra Elixir vs Go (Golang) Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 对比 Elixir 和 Go 简介 许多人长期以来一直要求我对比 Elixir 和 Go。在本视频…...

动手实现文本生成模型:基于 Decoder-only Transformer (PyTorch)

1. 选择框架:PyTorch 我们选择 PyTorch 作为实现框架。PyTorch 提供了灵活的动态图,并且拥有功能强大的 nn.Transformer 模块,方便我们快速构建模型。其社区活跃,资源丰富,是进行深度学习研究和开发的优秀选择。 确保你已经安装了 PyTorch 和其他必要的库: Bash pip i…...

WSL+Ubuntu+miniconda环境配置

安装到指定目录 bash Miniconda3-latest-Linux-x86_64.sh -b -p /usr/local/miniconda3添加环境变量 echo export PATH"/usr/local/miniconda3/bin:$PATH" >> /etc/profile echo export PATH"/usr/local/miniconda3/bin:$PATH" >> ~/.bashrc…...

linux学习 5 正则表达式及通配符

重心应该放在通配符的使用上 正则表达式 正则表达式是用于 文本匹配和替换 的强大工具 介绍两个交互式的网站来学习正则表达式 regexlearn 支持中文 regexone 还有一个在线测试的网址 regex101 基本规则 符号作用示例.匹配任何字符除了换行a.b -> axb/a,b[abc]匹配字符…...

【web服务_负载均衡Nginx】三、Nginx 实践应用与高级配置技巧

一、Nginx 在 Web 服务器场景中的深度应用​ 1.1 静态网站部署与优化​ 在 CentOS 7 系统中&#xff0c;使用 Nginx 部署静态网站是最基础也最常见的应用场景。首先&#xff0c;准备网站文件&#xff0c;在/var/www/html目录下创建index.html文件&#xff1a; sudo mkdir -p…...

详解与HTTP服务器相关操作

HTTP 服务器是一种遵循超文本传输协议&#xff08;HTTP&#xff09;的服务器&#xff0c;用于在网络上传输和处理网页及其他相关资源。以下是关于它的详细介绍&#xff1a; 工作原理 HTTP 服务器监听指定端口&#xff08;通常是 80 端口用于 HTTP&#xff0c;443 端口用于 HT…...

LeetCode 2563.统计公平数对的数目:排序 + 二分查找

【LetMeFly】2563.统计公平数对的数目&#xff1a;排序 二分查找 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-the-number-of-fair-pairs/ 给你一个下标从 0 开始、长度为 n 的整数数组 nums &#xff0c;和两个整数 lower 和 upper &#xff0c;返回 公平…...

Manus技术架构、实现内幕及分布式智能体项目实战

Manus技术架构、实现内幕及分布式智能体项目实战 模块一&#xff1a; 剖析Manus分布式多智能体全生命周期、九大核心模块及MCP协议&#xff0c;构建低幻觉、高效且具备动态失败处理能力的Manus系统。 模块二&#xff1a; 解析Manus大模型Agent操作电脑的原理与关键API&#xf…...

基于springboot的个人财务管理系统的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

新能源汽车动力电池热管理方案全解析:开启电车续航与安全的密码

热管理&#xff1a;新能源汽车的隐形守护者 在新能源汽车飞速发展的今天&#xff0c;热管理系统作为保障车辆核心部件稳定运行的关键&#xff0c;正逐渐成为行业关注的焦点。据市场研究机构的数据显示&#xff0c;近年来新能源汽车的销量持续攀升&#xff0c;而与之相伴的是热…...

Ubuntu开启自启动PostgreSQL读取HDD失败处理思路

前置文章&#xff1a; windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享Ubuntu挂载HDD迁移存储PostgreSQL数据 背景&#xff1a; 启动实体Ubuntu机器后后很大的概率PostgreSQL不会成功启动&#xff0c;查看日志&#xff1a; Ubuntu启动时间&#xff1a; rootPine…...

损失函数总结

目录 回归问题L1损失 平均绝对值误差&#xff08;MAE&#xff09;Smooth L1 LossL2损失 均方误差损失MSE 分类问题交叉熵损失KL 散度损失 KLDivLoss负对数似然损失 NLLLoss 排序MarginRankingLoss 回归问题 L1损失 平均绝对值误差&#xff08;MAE&#xff09; 指模型预测值f(x…...

LeetCode 热题 100:回溯

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#xff…...

Jetson Orin NX 部署YOLOv12笔记

步骤一.创建虚拟环境 conda create -n yolov12 python3.8.20 注意&#xff1a;YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 环境通用 步骤二.激活虚拟环境 conda activate yolov12 #激活环境 步骤三.查询Jetpack出厂版本 Jetson系列平台各型号支持的最高Jetp…...

『Linux_网络』 第二章 UDP_Socket编程

学习了网络的概念了&#xff0c;接下来我们开始实践&#xff0c;本次我们会通过UDP来模拟实现UDP客户端和UDP服务器之间的通信&#xff0c;以及在此基础上扩展几个应用。 下面&#xff0c;我们将使用socket&#xff0c;bind&#xff0c;htons等接口实现UDP网络通信。 v1 版本 …...

【leetcode刷题日记】lc.322-零钱兑换

目录 1.题目 2.代码 1.题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认…...

从GET到POST:HTTP请求的攻防实战与CTF挑战解析

初探HTTP请求:当浏览器遇见服务器 基础协议差异可视化 # 典型GET请求 GET /login.php?username=admin&password=p@ssw0rd HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0# 典型POST请求 POST /login.php HTTP/1.1 Host: example.com Content-Type: application/x…...

实现Azure Data Factory安全地请求企业内部API返回数据

需要配置一个Web Activity组件在Azure云上的Azure Data Factory运行&#xff0c;它需要访问企业内部的API获取JSON格式的数据&#xff0c;企业有网关和防火墙&#xff0c;API有公司的okta身份认证&#xff0c;通过公司的域账号来授权访问&#xff0c;现在需要创建一个专用的域账…...

JDOM处理XML:Java程序员的“乐高积木2.0版“

各位代码建筑师们&#xff01;今天我们要玩一款比原生DOM更"Java友好"的XML积木套装——JDOM&#xff01;它像乐高得宝系列&#xff08;Duplo&#xff09;一样简单易用&#xff0c;却能让你的XML工程稳如霍格沃茨城堡&#xff01;&#xff08;温馨提示&#xff1a;别…...

Grouped Query Attention (GQA) PyTorch实现

个人在网上看到的实现好像都长得奇奇怪怪的&#xff0c;没有简洁的感觉&#xff0c;因此在这里给出一种易读的GQA实现方法&#xff1a; import torch import torch.nn as nn import torch.nn.functional as Fclass GroupedQueryAttention(nn.Module):def __init__(self, embed…...

《AI大模型应知应会100篇》第27篇:模型温度参数调节:控制创造性与确定性

第27篇&#xff1a;模型温度参数调节&#xff1a;控制创造性与确定性 摘要 在大语言模型的使用中&#xff0c;“温度”&#xff08;Temperature&#xff09;是一个关键参数&#xff0c;它决定了模型输出的创造性和确定性之间的平衡。通过调整温度参数&#xff0c;您可以根据任…...

演讲比赛流程管理项目c++

对于一个基本项目&#xff0c;先分析基本的东西有哪些 1.类 演讲管理类:用于编写比赛流程用的功能 演讲者类&#xff1a;包含姓名&#xff0c;分数 创建比赛流程&#xff1a;创建选手12个人&#xff0c;分为两组&#xff0c;6人一组&#xff0c;每组进行两轮比赛&#xff0…...

在小米AX6000中通过米家控制tailscale

由于tailscale占用内存较大&#xff0c;AX6000中的可用内存非常有限&#xff0c;所以需要对AX6000的内存使用进行优化&#xff1a; 1.减小tmpfs内存占用的大小&#xff1a; #从150M -> 90M&#xff0c;由于tailscale下载安装包是27M作用&#xff0c; 解压后50M左右&#xf…...

REC: 引爆全球万亿级市场!Web3+消费革命重塑全球-东南亚-跨境商业未来

在全球数字经济浪潮下&#xff0c;东南亚已成为增长最快的互联网市场之一&#xff0c;其与全球之间蓬勃发展的跨境贸易更是蕴藏着巨大潜力。然而&#xff0c;传统模式下的效率瓶颈、信任壁垒和用户激励难题日益凸显。在此背景下&#xff0c;基于去中心化与消费相结合的 REC 颠覆…...

微服务与事件驱动架构(EDA)

微服务架构 微服务架构核心特征 服务自治&#xff1a;每个服务拥有独立的代码库、数据库和运维流程。轻量级通信&#xff1a;服务间通过API&#xff08;REST/gRPC&#xff09;或消息队列&#xff08;如Kafka&#xff09;交互。去中心化治理&#xff1a;允许技术栈多样化&…...

单片机如何通过串口与上位机进行数据交换

单片机通过串口与上位机进行数据交换是一种常见的方式&#xff0c;广泛应用于嵌入式系统中。以下是实现这一功能的具体步骤和注意事项&#xff1a; 1. 硬件连接 在硬件层面&#xff0c;需要确保单片机和上位机之间的串口连接正确&#xff1a; 信号线连接&#xff1a;通常使用…...