博客系统--测试报告
博客系统--测试报告
- 项目背景
- 项目功能
- 功能测试
- ①登录功能测试
- ②发布博客功能测试
- ③删除文章功能测试
- ④功能测试总结:
- 自动化测试
- 自动化脚本执行界面:
- 性能测试
本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试,并记录总结
项目背景
博客系统采用前后端不分离的方法来实现,同时使用了数据库来存储相关的数据,且已将其部署到云服务器上。前端主要有五个页面构成:登录页,文章列表页,文章详情页,文章编辑(修改)页和文章发布页。以上模拟实现了最简单的博客系统。其实现了以下的主要功能:登录、新增文章、对自己文章的删改查、查看他人文章、注销登录并使用Jwt完成了令牌登录校验等功能。
但该项目没有注册账号,点赞文章,筛选文章等功能,且用户没法自行设置头像
项目功能
该博客系统主要实现了以下几个功能:登录、注销、回到主页(文章列表页)、写文章、修改/删除自己的文章、查看文章详情、且支持MD编辑器。
- 登录功能:由于没有注册功能,用户名以及密码只能在数据库写死,直接输入给出的用户名和密码登录即可。但是在未登录(如:Token过期)情况下按下点击任意按钮或刷新页面均会跳转到登录页面。
- 注销功能:用户在任意界面点击右上角“注销”按钮,回到登录页面。
- 回到主页(文章列表页)功能:用户在任意界面点击右上角“主页”按钮,进入文章列表页。
- 写博客功能:用户在任意界面点击右上角“写文章”按钮,进入写文章页面。
- 修改/删除博客功能:用户在查看自己写的文章时会显示“编辑”和“删除”按钮,点击“编辑”按钮会进入编辑页面,点击“更新文章”按钮会提示“修改成功”,再点击“确认”按钮后会自动跳转至文章列表页并展示更新的内容;点击“删除”按钮会提示“删除成功”,再点击“确认”按钮后会自动跳转至文章列表页,且刚才查看的文章已不再展示。
- 查看博客功能:用户在文章列表页可以看到每篇文章下面都有“查看全文>>”按钮,点击该按钮进入文章详情页,页面包括文章作者信息,文章第一次发布的时间等。
功能测试
①登录功能测试
由于没有实现注册功能,所以我们的用户名和密码都是在数据库里写死的,所以只能用系统原始的数据进行登录
执行步骤: 访问网站-> 输入用户名及密码 ->单击"提交"
测试过程部分截图:
输入用户名为空:
输入不存在的用户:
②发布博客功能测试
不填写标题,发布失败:
③删除文章功能测试
从前端看的话,如果我们登录的用户并不是该篇博客的作者,是不会显示 编辑 和 删除 这两个按钮的,但是此处可以进行思维扩展:我们也是可以通过其他工具去向后端发送请求执行删除文章操作的,此处就发现了一处bug。
可以看到此处我们登录的是 lisi 用户,在前端展示和我们预期的一样,隐藏了编辑和删除按钮,但是当我们用Postman进行后端接口测试的时候却发现了问题:
我们用 lisi 账户登录后所携带的令牌去删除作者是 zhangsan 的博客,后端居然请求成功了,再到数据库里查看数据,发现博客已经被逻辑删除了,这样的情况相当于我拿着自己家的钥匙开了别人家的门,所以此处肯定是不安全的,应该进行代码层面上的逻辑校验
④功能测试总结:
用户登录测试用例表
用例名称 | 用户登录功能 |
---|---|
测试目的 | 测试用户能通过系统给定的的用户名和密码进行登录 |
测试前提 | 用户处于博客系统登录页 |
测试流程 | 1)进入登录页面 2)输入事先准备的测试数据(用户名和密码) |
预期结果 | 输入正确的用户名和密码时,成功跳转至博客列表页,反之则弹出相应的错误对用户进行提示 |
实际结果 | 与预期结果基本一致 |
发布文章测试用例表
用例名称 | 发布文章功能 |
---|---|
测试目的 | 测试用户能通过在登陆后进行博客的编写及发布 |
测试前提 | 用户已登录 |
测试流程 | 1)登录博客系统 2)进入博文编辑页 3)输入事先准备的测试数据 (博文内容) 4)单击发布博文 |
预期结果 | 如果输入了标题内容,就能进行发布,反之则发布失败,对用户进行弹窗提示 |
实际结果 | 与预期结果基本一致,提示信息需要补全 |
删除文章测试用例表
用例名称 | 删除文章功能 |
---|---|
测试目的 | 测试用户在登录后能够删除自己的文章 |
测试前提 | 用户已登录,并且已经发表该文章 |
测试流程 | 1)登录博客系统 2)进入个人主页 3)单击查看全文4)单击删除博文 2. 使用postman工具调用删除博文接口 |
预期结果 | 用户只能对自己的博客进行删除操作 |
实际结果 | 与预期结果不一致,此处代码逻辑需进行更改 |
自动化测试
现采用Selenium搭配Junit一些Api对博客系统设计UI自动化测试用例,
主要针对核心功能: 用户登录、博文的查看及删除、用户注销登录 功能进行测试
自动化代码 码云:
由于该项目很早前就部署在服务器上了,并且服务器配置实在过低,会导致我们在进行自动化时有些资源很难加载完全,但经过很多遍测试发现在执行自动化测试的时候只要代码逻辑正确,代码还是能够跑的通的
本次自动化测试主要执行以下逻辑:用户错误登录->用户正确登录->用户发表博客->用户查看博客->用户删除博客用户注销
①前置准备
//工具类封装
public class Utils {public static WebDriver driver;public static WebDriver createDriver(){if (driver == null){//浏览器配置WebDriverManager.edgedriver().setup();EdgeOptions options = new EdgeOptions();//允许访问所有链接options.addArguments("--remote-allow-origins=*");options.setPageLoadStrategy(PageLoadStrategy.NORMAL);driver = new EdgeDriver(options);//设置隐式等待WebDriver.Timeouts wait = driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));}return driver;}public Utils(String url){driver = createDriver();driver.get(url);}}
package tests;import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.UnhandledAlertException;import java.io.IOException;
//博客测试类
public class BlogTest extends Utils {private static String blog_system = "http://120.26.87.94:8080/blog_list.html";public BlogTest() {super(blog_system);}/*** 失败登录* @throws IOException* @throws UnhandledAlertException* @throws InterruptedException*/public void LoginFail() throws IOException, UnhandledAlertException, InterruptedException {driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");driver.findElement(By.cssSelector("#password")).sendKeys("1234");driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);String alertText = "";Alert alert = driver.switchTo().alert();alertText = alert.getText();Thread.sleep(2000);alert.accept();assert alertText.equals("密码错误");driver.navigate().refresh();}/*** 成功登录* @throws IOException*/public void LoginSuccess() throws IOException {//清空输入框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("123456");driver.findElement(By.cssSelector("#submit")).click();//查看注销按钮driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)"));//查看urlString expect = driver.getTitle();assert expect.equals("博客列表页");}/*** 编辑博客* @throws InterruptedException*/public void EditSuc() throws InterruptedException {driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();String blogTitle = "Edit Test";driver.findElement(By.cssSelector("#title")).sendKeys(blogTitle);Thread.sleep(2000);driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);String title = driver.getTitle();assert title.equals("博客列表页");}/*** 查看博客*/public void ViewBlog() throws InterruptedException {driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();Thread.sleep(2000);}/*** 注销用户*/public void Logout(){driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();driver.quit();}/*** 删除博客* @throws InterruptedException*/public void DeleteBlog() throws InterruptedException {driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();Thread.sleep(2000);Alert alert = driver.switchTo().alert();alert.accept();}}
执行我们编写的自动化代码
自动化脚本执行界面:
博客系统自动化测试
性能测试
我们此处使用Jmeter提供的梯度压测功能对博客系统进行压测,由于服务器实在过于脆弱,此处将只设置20个线程数,以及一分钟的持续压测时间,对我们系统的 登录、查询博客列表、查询用户信息、查询作者信息以及添加博客这几个接口进行压测
配置好线程组之后我们在使用命令提示符,启动我们保存好的 .jmx
格式文件,并将其输出的测试报告文件及日志保存到我们指定的目录
按回车键执行以后,我们过一会就能在指定目录下查看其生成的性能测试报告了
双击生成的html文件,查看jmeter生成的性能测试报告了
可以看到我们发送的很多请求都调用失败了
可以看到基本都是一种异常
后来翻阅网上资料找到了解决方法:https://javaziliao.com/post/5948.html
相关文章:
博客系统--测试报告
博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结: 自动化测试自动化脚本执行界面: 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试࿰…...
打造个人知识库(Page Assist版)- 私人专属AI-本地化部署deepseek
上篇介绍了实现浏览器交互Ai Web Ui - chrome浏览器插件-Page Assist,安装即可使用,实现最简单的本地化部署AI使用。 实现浏览器交互Ai Web Ui-本地化部署的deepseek Ollama Page Assist 本编介绍使用 Page Assist 构建个人知识库,利用个…...
7zip安装与使用
在 Linux 上安装 7zip(7z) 取决于你的操作系统发行版。以下是不同系统的安装方法: 📌 1. Ubuntu / Debian 直接使用 p7zip: sudo apt update sudo apt install -y p7zip-full p7zip-rarp7zip-full → 支持 .7z 压缩和…...
蓝桥杯第15届真题解析
由硬件框图可以知道我们要配置LED 和按键、lcd,解决lcd引脚冲突 LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 按键 按键配置,由原理图按键所对引…...
springboot gradle 多项目创建
1.背景2.创建父项目3.配置gradlew4.创建子项目 1.背景 1.用IDE创建一个父项目(school_project),两个子项目(student_project,teacher_project)。子项目是两个springboot工程 2.使用gradle kotlin进行管理,…...
Protocol Buffers在MCU上的nanopb介绍及使用详解
在嵌入式系统和资源受限的环境中,传统的Protocol Buffers 可能显得过于庞大。因此,nanopb 应运而生,它是一个轻量级的 Protocol Buffers 生成器,专为嵌入式系统设计c语言设计。本文将介绍如何安装和使用 nanopb,以及通…...
leetcode日记(74)扰乱字符串
很有难度的一题,一开始真的绕了很多思维上的弯路。 最开始的想法是递归,看到题目的时候想到动态规划但是完全没有思路应该怎么用,结果确实是递归动态规划。 最开始的想法是构建树,每一层包含这一步划分的方法(实际会…...
Blazor-根级别级联值
根级别级联值注册 using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting;namespace BlazorApp1 {public class Program{public static async Task Main(string[] args){var builder WebAssemblyHostBuilder.CreateDefault…...
懒加载能够解决Spring循环依赖吗
懒加载本身并不能直接解决 Spring 循环依赖问题,但它可以在一定程度上缓解或绕过循环依赖带来的问题,下面详细分析: 1. 什么是 Spring 循环依赖 循环依赖指的是两个或多个 Bean 之间相互依赖,形成一个闭环。例如,Bea…...
Matlab中使用GUIDE工具开发图形用户界面(GUI)
文章目录 1. 初识GUIDE工具1.1 .m 和 .fig的区别和联系1.2 GUIDE工具的详细介绍1.3 GUI控件的属性1.4 自动生成的 .m 文件1.5 回调函数 2. GUI中常见的函数2.1 get 和 set 函数2.2 handles.Tag2.3 OpeningFcn 和 OutputFcn2.4 Callback2.5 CreateFcn 和 DeleteFcn2.6 ButtonDow…...
[通俗易懂C++]:引用返回和地址返回
在之前的文章中已经提到过,当使用按值传递时会创建参数的一个副本到函数中。对于基本类型(复制成本较低),这是可以的。但对于类类型(如 std::string ),复制通常成本较高。我们可以通过使用(const)引用传递(或按地址传递)来避免进行昂贵的复制。 这篇文章主要介绍一些…...
基于 MySQL 数据库对三级视图(用户视图、DBA视图、内部视图)的详细解释
基于 MySQL 数据库对三级视图(用户视图、DBA视图、内部视图)的详细解释,结合理论与实际操作说明: 一、三级视图核心概念 数据库的三级视图是 ANSI/SPARC 体系结构的核心思想,MySQL 的实现逻辑如下: …...
LLM - Attention Is All You Need 的理解
一:概述 当前主流的序列转换(sequence transduction)模型主要基于复杂的循环神经网络(Recurrent Neural Networks, RNNs)或卷积神经网络(Convolutional Neural Networks, CNNs),这些模型通常包含编码器(encoder)和解码器(decoder)。 性能最优的模型通常通过“ 注意…...
究竟什么是AI提示词?深入解析与实战应用
随着人工智能技术的飞速发展,AI提示词(AI Prompt)逐渐成为自然语言处理(NLP)领域的热门话题。无论是GPT-3、ChatGPT还是其他大型语言模型,提示词都扮演着至关重要的角色。那么,究竟什么是AI提示…...
deep-research开源框架 Agentic Reasoning
Agentic-Reasoning是由牛津大学团队开源的推理框架. 该框架在GPQA博士级科学题库上准确率提升35%,生物学问题得分从62%跃升至79%,显著优于DeepSeek-R1等闭源模型。 特色:Agentic-Reasoning在定义和实现code agent上做的非常出色。可以借鉴。…...
解锁智能变革密码:浙江大学2025年DeepSeek行业应用案例集深度解析
引言:AI技术驱动的时代浪潮 2025年,人工智能技术已从实验室走向千行百业,成为推动社会经济发展的核心引擎。在这一背景下,浙江大学联合DeepSeek团队推出的《2025年DeepSeek行业应用案例集》(以下简称“案例集”&#…...
C# Unity 唐老狮 No.5 模拟面试题
本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...
《2025软件测试工程师面试》功能测试篇
什么是功能测试? 功能测试是通过验证产品功能是否满足用户需求的过程,主要关注软件的功能是否符合需求规格说明,包括软件的各种功能、特性、性能、安全性和易用性等。 功能测试的流程包括哪些步骤? 需求分析:明确软件需求,确定测试范围。测试计划:制定详细的测试计划,…...
DeepSeek如何快速开发PDF转Word软件
一、引言 如今,在线工具的普及让PDF转Word成为了一个常见需求,常见的PDF转Word工具有收费的WPS,免费的有PDFGear,以及在线工具SmallPDF、iLovePDF、24PDF等。然而,大多数免费在线转换工具存在严重隐私风险——文件需上…...
ROS环境搭建
ROS首次搭建环境 注:以下内容都是在已经安装好ros的情况下如何搭建workplace 一、创建工作空间二、创建ROS包三、注意 注:以下内容都是在已经安装好ros的情况下如何搭建workplace 如果没有安装好,建议鱼香ros一步到位:鱼香ROS 我也是装了好久…...
深入探索DeepSeek开源之旅:开源Week全程解析
摘要 在农历新年刚刚结束之际,DeepSeek以卓越的开源精神,连续六天举办了开源Week活动。这一系列活动不仅展示了DeepSeek在技术领域的活跃度和影响力,还彰显了其对开源社区的贡献。通过这次活动,DeepSeek吸引了众多开发者和技术爱好…...
Redis是什么?如何使用Redis进行缓存操作?
Redis(Remote Dictionary Server)是一款高性能的内存键值存储系统,广泛用于缓存、消息队列、会话存储和实时数据处理等场景。它基于内存存储,支持多种数据结构,如字符串、列表、集合、有序集合和哈希表等,具…...
Unity学习笔记之——ugui的性能优化
在Unity中UI优化的核心问题就是重绘和批处理之间的平衡 一、Canvas优化要点 1.优化原因: (1)Unity为了性能优化,会合并Canvas下的所有元素; (2)如果把所有面板放到一个Canvas下,会…...
【三.大模型实战应用篇】【2.智能学员辅导系统:与大模型的深度交互】
早上七点半,初三学生小林打开数学辅导APP,发现AI老师准确指出了他昨晚作业中三次跳步计算的坏习惯——这比他亲妈观察得还细致。这背后是一场发生在代码深处的"脑力风暴",让我们潜入智能辅导系统与大模型深度交互的"暗室",看看那些让教育产生化学反应的…...
【vue-echarts】——04.配置项---legend
文章目录 一、配置项-legend图例二、显示结果一、配置项-legend图例 图例组件展现了不同系列的标记,颜色和名字。可以通过点击图例控制哪些系列不显示。 代码如下 Demo4View.vue <template><div class="about">...
面试题02.02.返回倒数第k个节点
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k 2 输出: 4 说明: 给定的 k 保证是有效的。 题解ÿ…...
剑指 Offer II 041. 滑动窗口的平均值
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20041.%20%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E7%9A%84%E5%B9%B3%E5%9D%87%E5%80%BC/README.md 剑指 Offer II 041. 滑动窗口的平均值 题目描述 给定一个整数…...
OCR PDF 文件是什么?它包含什么内容?
有些 PDF 文件是通过扫描纸质书页生成的,这类文件有其独特的特点。有时,原始书籍是唯一可用的版本,因此只能通过扫描的方式获取内容。 如何识别 OCR PDF 文件? 你通常可以从外观上辨别 OCR PDF 文件——页面上的文本看起来像“锯…...
什么是最终一致性,它对后端系统的意义是什么
最终一致性(Eventual Consistency)是分布式系统中的一种一致性模型。与传统的强一致性模型不同,最终一致性并不要求系统在任何时刻都保持一致,而是保证在足够的时间后,所有节点的数据最终会达到一致的状态。换句话说,系统允许短时间内出现数据的不一致性,但最终会通过某…...
CSS3中布局方式说明
CSS3 提供了多种灵活的布局方式,适用于不同的场景和需求。以下是主要的布局方式及其特点: 1. Flexbox 布局(弹性盒子) 用途:一维布局(水平或垂直方向排列元素)。特点: 通过 display…...
【开源-常用开源c/c++日志管理模块对比】
[TOC](开源-常用开源c/c日志管理模块对比) 项目名称语言优点缺点适用场景开源代码链接spdlogC高性能,支持异步日志;丰富的格式化功能;跨平台;易于集成。依赖C11或更高版本;不适合嵌入式系统。高…...
基于log4j的自定义traceid实现
思路就是spring 做切面拦截请求,切面入口时生成traceId,然后放到MDC里面(就是threadLocal,MDC是log框架提供的工具类,能方便在配置文件里面引用插入的值)。 切面结束时traceId。 import com.sing.monitor…...
如何在网页上显示3D CAD PMI
在现代制造业中,3D CAD模型已成为产品设计和制造的核心。为了更有效地传达设计意图和制造信息,产品和制造信息(PMI)被嵌入到3D模型中。然而,如何在网页上清晰、准确地显示这些3D CAD PMI,成为了一个重要的技…...
LLMR: Real-time Prompting of Interactive Worldsusing Large Language Models
LLMR-使用大型语言模型的交互式世界实时建模 ABSTRACT 我们提出了混合现实的大语言模型(LLMR),一个使用LLM实时创建和修改交互式混合现实体验的框架。LLMR利用新颖的策略来解决理想训练数据稀缺的困难情况,或者设计目标需要综合内…...
使用 OpenLIT 对 LLM 应用进行可观测
大规模语言模型(LLM)的可观测性 随着大规模语言模型(LLM)在各个领域的广泛应用,确保这些模型的稳定性和性能变得至关重要。为了实现这一目标,可观测性(Observability)成为了一个关键…...
C与C++的区别
C 深度剖析:对比 C 语言的显著差异 在编程的浩瀚宇宙中,C 和 C 堪称两颗耀眼的巨星,各自绽放出独一无二的光彩。C 语言作为经典的结构化编程语言,多年来在系统开发、嵌入式编程等领域始终占据着举足轻重的地位。而 C 作为 C 语言…...
【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
https://time.geekbang.org/column/article/118826 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的? 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段,2.6讲解渲染流水线后面的阶段…...
开放鸿蒙认证,OpenHarmony兼容性认证介绍
Ⅰ、OpenHarmony开放鸿蒙兼容性测试认证:使用官方测试套件,对照PCS自检表中的必测项,在本地搭建的环境中对伙伴设备进行预测,直至取得合格的兼容性测试报告。 注:2025年01月01日起,不支持新产品基于老分支…...
磁盘空间不足|如何安全清理以释放磁盘空间(开源+节流)
背景: 最近往数据库里存的东西有点多,磁盘不够用 查看磁盘使用情况 df -h /dev/sda5(根目录 /) 已使用 92% 咱们来开源节流 目录 背景: 一、开源 二、节流 1.查找 大于 500MB 的文件: 1. Snap 缓存…...
【2】好未来JAVA开发工程师部分笔试题解析
编程题 1.降序的子数组最大元素和 给你一个正整数组成的数组nums,返回nums中一个降序子数组的最大可能元素和。 子数组是数组中的一个连续数字序列。 已知子数组[nums l, nums l1, … , nums r-1, nums r],若对所有l (1<i<r),nums …...
LeetCode 21. 合并两个有序链表(Python)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 [] 输出:[] 示例 3: 输…...
Y3学习打卡
网络结构图 YOLOv5配置了4种不同大小的网络模型,分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中 YOLOv5s 是网络深度和宽度最小但检测速度最快的模型,其他3种模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大,在增强…...
2025-3-3 二叉树的存储结构
一、二叉树的存储结构( 顺序存储,链式存储) 1.顺序存数--(用数组) (完全二叉树)常考的基本操作: i 的左孩子 -----2i 右孩子-----2i1 i的父节点-----[i/2] 向下取整 i所在的层…...
RK3588V2--ES8388声卡适配记录
RK3588V2--ES8388声卡适配记录 1. ES8388声卡简单介绍2. 适配过程2.1 设备树配置 3. 问题分析与解决3.1 现声卡平台设备, 最终注册失败3.2 系统查看 I2C 设备3.3 怀疑是没有上拉电阻? 4. 测试阶段4.1 耳机接口测试--OK4.2 MIC测试--无法使用 5. 分析总结 1. ES8388声…...
【http://noi.openjudge.cn/】4.3算法之图论——1538:Gopher II
[【http://noi.openjudge.cn/】4.3算法之图论——1538:Gopher II] 题目 查看提交统计提问 总时间限制: 2000ms 内存限制: 65536kB 描述 The gopher family, having averted the canine threat, must face a new predator. The are n gophers and m gopher holes, each at di…...
PySide(PyQT)的视图(QGraphicsView)范例(一) 基本框架
最近学习了视图(QGraphicsView)的知识,总结一下,做一个demo以备忘。在demo中使用了场景(QGraphicsScene)、矩形框(QGraphicsRectItem)等构件,以及演示了常用的设置方法和…...
opencv 模板匹配方法汇总
在OpenCV中,模板匹配是一种在较大图像中查找特定模板图像位置的技术。OpenCV提供了多种模板匹配方法,通过cv2.matchTemplate函数实现,该函数支持的匹配方式主要有以下6种,下面详细介绍每种方法的原理、特点和适用场景。 1. cv2.T…...
_mm_shuffle_epi32解析
一 概述 _mm_shuffle_epi32和_MMSHUFFLE是与SSE指令集相关的开发工具,主要用于SIMD向量操作。 二 _mm_shuffle_epi32 函数 功能:对128位整数向量(__m128i)中的四个32位整数进行重排序 原型:__m128i _mm_shuffle_epi32 (__m128i a, int imm…...
Tauri+React+Ant Design跨平台开发环境搭建指南
TauriReactAnt Design跨平台开发环境搭建指南 一、环境配置与工具链搭建 1.1 基础环境准备 必备组件: Rust工具链(v1.77): curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh Node.js LTS(v20.11.1&a…...
《基于Selenium的论坛系统自动化测试实战报告》
一、项目背景与技术选型 项目简介 目标系统:论坛系统 核心功能:用户注册/登录、会话框发送信息、好友列表、信息发送 技术栈:html Springboot MySQL数据库 为什么选择Selenium 支持多浏览器兼容性测试(Chrome/Firefox/Edge&…...