网页聊天——测试报告——Selenium自动化测试
一,项目概括
1.1 项目名称
网页聊天
1.2 测试时间
2024.9
1.3 编写目的
对编写的网页聊天项目进行软件测试活动,揭示潜在问题,总结测试经验
二,测试计划
2.1 测试环境与配置
服务器:云服务器 ubuntu_22
PC机:机械师T58-V
平台:Windows 10
浏览器:Chrome、FireFox、Edge
自动化测试工具:Selenium
2.2 提取测试点
2.3 设计测试用例
所有的测试用例绑定在这个帖子上了,需要自取
Selenium自动化执行测试用例
文件分类-- 功能进行分块
main函数
public static void main(String[] args) throws IOException, InterruptedException {noLoginTest noLogin=new noLoginTest();noLogin.NoLoginOpen();registerTest register_test=new registerTest();register_test.registerTest();LoginTest login_test=new LoginTest();login_test.loginTest();friendListTest friendList_test=new friendListTest();friendList_test.ListTest();addFriendTest addFriendTest =new addFriendTest();addFriendTest.addFriendTest();chatTest chat=new chatTest();chat.chatTest();driver.quit();}
Utils--所有公共模块
public class Utils {public static WebDriver driver;public static WebDriver createDriver(){//创建驱动if(driver!=null){return driver;}WebDriverManager.edgedriver().setup();//自动下载配置驱动程序EdgeOptions edgeOptions=new EdgeOptions();edgeOptions.addArguments("--allow-remote-origins=*");driver=new EdgeDriver(edgeOptions);//用option创建驱动driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));//隐式等待return driver;}public static void getScreenShot(String str) throws IOException {//截图SimpleDateFormat simple1=new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat simple2=new SimpleDateFormat("hhmmssSS");String format = simple1.format(System.currentTimeMillis());String format2 = simple2.format(System.currentTimeMillis());String fileName="./src/test/image/"+format+"/"+str+"-"+format2+".png";File screenshotAs = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(screenshotAs,new File(fileName));//将截图放到新建的文件里}public static String getTime(){//用来做测试数据SimpleDateFormat simple1=new SimpleDateFormat("hh:mm:ss");return simple1.format(System.currentTimeMillis())+"test";}
}
registerTest--注册测试
public void registerFailAll() throws IOException {//注册失败String alertTest = register("zhangsan", "123");assertEquals("用户名被占用!",alertTest);//断言判断alertTest=register("","123");assertEquals("用户名和密码不能为空! ",alertTest);alertTest=register("zhangsan","");assertEquals("用户名和密码不能为空! ",alertTest);alertTest=register("","");assertEquals("用户名和密码不能为空! ",alertTest);}public void registerSucAll() throws IOException {//注册成功String alertTest = register(testUserName, "123");assertEquals("注册成功",alertTest);driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#submit2")).click();alertTest=register(testUserName+1,"123");assertEquals("注册成功",alertTest);}public String register(String username,String password) throws IOException {//注册driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(username);driver.findElement(By.cssSelector("#password")).sendKeys(password);getScreenShot(getClass().getName());driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.alertIsPresent());Alert alert = driver.switchTo().alert();String text = driver.switchTo().alert().getText();alert.accept();return text;}
loginTest--登录测试
public void LoginFailAll() throws IOException, InterruptedException {//登录失败String alertTest = loginUtil("zhang", "123");assertEquals("用户名或密码错误! ",alertTest);alertTest=loginUtil("zhangsan","1");assertEquals("用户名或密码错误! ",alertTest);alertTest=loginUtil("zhangsan","");assertEquals("当前输入用户名或密码为空! ",alertTest);alertTest=loginUtil("","123");assertEquals("当前输入用户名或密码为空! ",alertTest);alertTest=loginUtil("","");assertEquals("当前输入用户名或密码为空! ",alertTest);}public void LoginSucAll() throws IOException, InterruptedException {//成功loginSucUtil("zhangsan", "123");loginSucUtil("wangwu","123");loginSucUtil("lisi","123");}public void loginSucUtil(String username,String password) throws IOException, InterruptedException {driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys("zhangsan");driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));getScreenShot(getClass().getName());//截图最好放在最后一步,不然容易卡driver.navigate().back();}public String loginUtil(String username,String password) throws IOException, InterruptedException {driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(username);driver.findElement(By.cssSelector("#password")).sendKeys(password);driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.alertIsPresent());String text = driver.switchTo().alert().getText();driver.switchTo().alert().accept();getScreenShot(getClass().getName());return text;}
登录和注册的自动化效果展示
friendListTest--主页和好友列表测试
主要检查主页点击用户是否会跳转到聊天页
好友列表点击是否会跳到聊天页
@Slf4j
public class friendListTest extends Utils {public static WebDriver driver=Utils.createDriver();WebDriverWait wait=new WebDriverWait(driver,Duration.ofSeconds(5));public void ListTest() throws IOException {openWeb();ChatListUI();FriendListUI();}public void openWeb() throws IOException {driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys("lisi");driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button"));getScreenShot(getClass().getName());log.info("打开主页");}public void ChatListUI() throws IOException {wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));driver.findElement(By.cssSelector("#session-list"));//String friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).getText();driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).click();String friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(2) > h3")).getText();driver.findElement(By.cssSelector("#session-list > li:nth-child(2) > h3")).click();friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(3) > h3")).getText();driver.findElement(By.cssSelector("#session-list > li:nth-child(3) > h3")).click();friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());log.info("主页用户点击切换到聊天测试");}public void FriendListUI() throws IOException {//查看是否点击可以跳转driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();driver.findElement(By.cssSelector("#friend-list"));String friendName = driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).getText();driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).click();String friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());log.info("好友列表点击跳转测试");}
addFriendTest--搜索好友,发送申请,新好友聊天测试
主页加载完整
搜索好友功能测试
发送申请功能测试
收到申请测试
同意申请,拒绝申请测试
新好友聊天测试
public class addFriendTest extends Utils {public static WebDriver driver=Utils.createDriver();public String addRequest=getTime()+"addFriend";WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));public void addFriendTest() throws IOException {openWeb();addFriendSend(registerTest.testUserName);//搜索刚注册的账号addFriendAccept(registerTest.testUserName);addFriendChat();addFriendSend("test");//模糊搜索addFriendSend("0000");addFriendSend("");addFriendSend(" ");addFriendSend("lisi");//搜本人}public void openWeb() throws IOException {driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys("lisi");driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button"));getScreenShot(getClass().getName());System.out.println("加好友UI");}public void addFriendSend(String user) throws IOException {//搜索刚刚注册的账号driver.findElement(By.cssSelector("#userNmae")).clear();driver.findElement(By.cssSelector("#userNmae")).sendKeys(user);driver.findElement(By.cssSelector("#sumbit")).click();
// driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div"));try{//查看搜到的用户是否正确
// System.out.println(registerTest.testUserName+"查看搜到的用户是否正确");
// assertEquals(register_test.testStr,driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/div[2]/div/span")).getText());driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div>input")).sendKeys(addRequest);driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:nth-child(1) > button")).click();assertEquals(driver.switchTo().alert().getText(),"添加成功");driver.switchTo().alert().accept();getScreenShot(getClass().getName());System.out.println("添加好友请求发送成功");}catch (Exception e){System.out.println("没找到好友:"+user);}}public void addFriendAccept(String user) throws IOException {//切号//登录聊天对象账号查看短信发送情况driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();
// System.out.println(receiver+" login");driver.findElement(By.cssSelector("#userName")).sendKeys(user);driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();System.out.println("切号查看请求是否正确");//提示好友申请发来了driver.findElement(By.cssSelector("#session-list > li"));//发送申请的对象是对的assertEquals("lisi",driver.findElement(By.cssSelector("#session-list > li > h3")).getText());//发送申请的话是对的,因为展示的是部分内容所以不能断言
// assertEquals(addRequest,driver.findElement(By.cssSelector("#session-list > li > p")).getText());//接受申请driver.findElement(By.cssSelector("#session-list > li > button:nth-child(3)")).click();//添加成功提示正确assertEquals("添加成功",driver.switchTo().alert().getText());driver.switchTo().alert().accept();System.out.println("添加好友成功");getScreenShot(getClass().getName());}public void addFriendChat() throws IOException {System.out.println("发短信测试");//测试新好友发短信//找到列表里的那个driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();//可以Xpath选择好友列表页的指定对象driver.findElement(By.xpath("//ul[@id='friend-list']/li[h4[text()='"+"lisi"+"']]")).click();//点击发短信String testChat = getTime();//点击聊天输入框driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).click();//发送方String sender = driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();//接收方String receiver = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys(testChat);driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();driver.navigate().refresh();driver.findElement(By.cssSelector("#session-list > li:first-child")).click();String checkTest = driver.findElement(By.cssSelector("div.message-show div.message:last-child div.box p")).getText();assertEquals(testChat,checkTest);getScreenShot(getClass().getName());}
chat---给好友发短信和接收短信的功能测试
测发送不同的内容
测试能否接收到
public class chatTest extends Utils {WebDriver driver=Utils.createDriver();WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));public void chatTest() throws IOException {driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(testUserName);//发送方driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));//发短信功能,选择最上面的聊天对象,编辑,发送,刷新(必须,加载新短信)重新选择最上面的聊天对象,// 选择最下面最新的短信,注意父类包含多个子类情况下,可以问ai
// String testChat = getTime();
// System.out.println(testChat);
// System.out.println(testChat);//点击好友列表第一位driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).click();chat("哈哈哈哈");chat("hhhhha");chat("111112");chat("!@#$%^&*蛤ha");String longStr ="在思想上,我具有较高的政治觉悟,积极向党组织靠拢,始终保持着进取之心,以坚定的信念追求进步。 在学习上,我态度严谨认真,勤奋刻苦。凭借不懈的努力,连续两年荣获国家励志奖学金,并且在英语赛事中多次获奖,扎实的专业功底让我能够自信地应对各种学业挑战。";String receiver=chat(longStr);driver.navigate().back();//退出登录checkMessage(longStr,receiver);//检查短信是否收到}public String chat(String message) throws IOException {//发送短信并返回接受方driver.findElement(By.cssSelector("#session-list > li")).click();//找到好友列表第一个,点击聊天并记录String receiver = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();//编辑短信发送,并返回接受短信的用户driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys(message);driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();log.info("发送短信并刷新");return receiver;}public void checkMessage(String message,String receiver) throws IOException {//登录接收方账号,检查短信是否正确driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(receiver);driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();//点击好友列表driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();//可以Xpath选择好友列表页的指定对象driver.findElement(By.xpath("//ul[@id='friend-list']/li[h4[text()='"+testUserName+"']]")).click();//报错无效选择器,前端找到对应的元素后再次查找发现是元素不可交互导致的log.info("切换账号查看短信是否收到");String test2 = driver.findElement(By.cssSelector("div.message-show div.message:last-child div.box p")).getText();//查看短信assertEquals(message,test2);//断言一下getScreenShot(getClass().getName());log.info("短信成功收到");}
noLoginTest--没有登录测试
查看没有登录直接访问是否会强制返回
public class noLoginTest {public void NoLoginOpen() throws IOException {WebDriver driver= Utils.createDriver();driver.get("http://localhost:8080/client.html");WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));wait.until(ExpectedConditions.alertIsPresent());assertEquals("当前用户未登录!",driver.switchTo().alert().getText());driver.switchTo().alert().accept();getScreenShot(getClass().getName());}
}
整个自动化测试展示
网页自动化测试
相关文章:

网页聊天——测试报告——Selenium自动化测试
一,项目概括 1.1 项目名称 网页聊天 1.2 测试时间 2024.9 1.3 编写目的 对编写的网页聊天项目进行软件测试活动,揭示潜在问题,总结测试经验 二,测试计划 2.1 测试环境与配置 服务器:云服务器 ubuntu_22 PC机&am…...
mysql5.7常用操作命令手册
文章目录 前言一、关闭mysql服务1.mha节点,关闭MHA高可用2.主节点,摘掉vip,停掉mysql服务3.从节点,停掉mysql服务 二、启动mysql1.启动数据库顺序2.主节点,登陆数据库检查主库状态,将主库改成读写状态3.从节点启动配置数据库&…...

前端组件库Element UI 的使用
一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…...

【C++ 基础数学 】2121. 2615相同元素的间隔之和|1760
本文涉及的基础知识点 基础数学 LeetCode2121. 相同元素的间隔之和 难度分:1760 令2165,和此题几乎相等。 给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。 arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和…...

从手动测试菜鸟,到自动化测试老司机,实现自动化落地
虽然许多伙伴是一个测试老人了,但是基本上所有的测试经验都停留在手工测试方面,对于自动化测试方面的实战经验少之又少。 其实,究其原因:一方面是,自动化方面不求上进,觉得会手工测试就可以了,自…...
docker zookeeper集群启动报错:Cannot open channel to * at election address /ip:3888
下面几点需要注意的: 1、确认在每个$zookeeper_home/data/myid中有对应数字 2、是否关闭防火墙:systemctl stop firewalld,systemctl disable firewalld 3、zoo.cfg中的server需要写成以下形式的: 假如有两台机器,1…...

【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇
前言: 在进入Linux学习之前,我们首先要先做好以下两点:1、已经基本掌握C语言或C,2、已经配置好了Linux的环境,做完以上两点后我们就开始Linux的学习,今天我们首先要学习的就是Linux中最基础的操作ÿ…...
3.Vue2结合element-ui实现国际化多语言i18n
1.安装vue-i18n npm install vue-i18n8.2.1说明:Vue2使用vue-i18n是8.x,Vue3使用的版本是9.x以上,使用错了会导致报错 2.创建多语言文件 在src/下创建src/lang/langs/zh.js和src/lang/langs/en.js两个文件,里面内容如下&#x…...

整数二分算法和浮点数二分算法
整数二分算法和浮点数二分算法 二分 现实中运用到二分的就是猜数字的游戏 假如有A同学说B同学所说数的大小,B同学要在1~100中间猜中数字65,当B同学每次说的数都是范围的一半时这就算是一个二分查找的过程 二分查找的前提是这个数字序列要有单调性 基…...

智能回收箱的功能和使用步骤介绍
智能回收箱是现代城市环保与资源循环利用领域的一项创新技术,它通过集成各种智能化功能,提高了垃圾回收的效率和准确性,促进了垃圾分类与减量。随着全球对环境保护意识的增强和智慧城市概念的推广,智能回收箱的发展前景非常广阔&a…...

Remix在SPA模式下,出现ErrorBoundary错误页加载Ant Design组件报错,不能加载样式的问题
Remix是一个既能做服务端渲染,又能做单页应用的框架,如果想做单页应用,又想学服务端渲染,使用Remix可以降低学习成本。最近,在学习Remix的过程中,遇到了在SPA模式下与Ant Design整合的问题。 我用Remix官网…...

ADB ROOT开启流程
开启adb root 选项后,执行如下代码: packages/apps/Settings/src/com/android/settings/development/AdbRootPreferenceController.java mADBRootService new ADBRootService(); Override public boolean onPreferenceChange(Preference preference…...

传输层协议 —— TCP协议(上篇)
目录 1.认识TCP 2.TCP协议段格式 3.可靠性保证的机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 1.认识TCP 在网络通信模型中,传输层有两个经典的协议,分别是UDP协议和TCP协议。其中TCP协议全称为传输控制协议(Tra…...

YOLOv8改进,YOLOv8的Neck替换成AFPN(CVPR 2023)
摘要 多尺度特征在物体检测任务中对编码具有尺度变化的物体非常重要。多尺度特征提取的常见策略是采用经典的自上而下和自下而上的特征金字塔网络。然而,这些方法存在特征信息丢失或退化的问题,影响了非相邻层次的融合效果。一种渐进式特征金字塔网络(AFPN),以支持非相邻…...

学习大数据DAY59 全量抽取和增量抽取实战
目录 需求流程: 需求分析与规范 作业 作业2 需求流程: 全量抽取 增量抽取 - DataX Kettle Sqoop ... 场景: 业务部门同事或者甲方的工作人员给我们的部门经理和你提出了新的需 求 流程: 联系 > 开会讨论 > 确认需求 > 落地 需求文档( 具体…...

YOLOv8——测量高速公路上汽车的速度
引言 在人工神经网络和计算机视觉领域,目标识别和跟踪是非常重要的技术,它们可以应用于无数的项目中,其中许多可能不是很明显,比如使用这些算法来测量距离或对象的速度。 测量汽车速度基本步骤如下: 视频采集&#x…...

在线相亲交友系统:寻找另一半的新方式
在这个快节奏的时代里,越来越多的单身男女发现,传统意义上的相亲方式已经难以满足他们的需求。与此同时,互联网技术的迅猛发展为人们提供了新的社交渠道——在线相亲交友系统作者h17711347205。本文将探讨在线相亲交友系统如何成为一种寻找另…...

MySQL 中存储过程参数的设置与使用
《MySQL 中存储过程参数的设置与使用》 在 MySQL 数据库中,存储过程是一组预先编译好的 SQL 语句集合,可以接受参数并返回结果。使用存储过程可以提高数据库的性能和可维护性,同时也可以减少网络流量和代码重复。那么,如何在 MyS…...

2k1000LA 调试HDMI
问题: 客户需要使用HDMI 接口,1080p 的分辨率。 ---------------------------------------------------------------------------------------------------------------- 这里需要看看 龙芯派的 demo 版 的 硬件上的连接。 硬件上: 官方的demo 板 , dvo1 应该是 HDMI的…...

24年蓝桥杯及攻防世界赛题-MISC-1
2 What-is-this AZADI TOWER 3 Avatar 题目 一个恐怖份子上传了这张照片到社交网络。里面藏了什么信息?隐藏内容即flag 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/outguess] └─$ outguess -r 035bfaa85410429495786d8ea6ecd296.jpg flag1.txt Reading 035bf…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...
第14节 Node.js 全局对象
JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局…...
软件工程教学评价
王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中,您通过丰富的实例,将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻,让这些理论不再是停留在纸面的名词,而是可以指导…...