【软件测试】随笔系统测试报告
- 博主简介:想进大厂的打工人
- 博主主页:@xyk:
- 所属专栏: 软件测试
随笔系统采用 SSM 框架前后端分离的方法实现,本文主要针对功能:登录,注册,注销,写随笔,删除随笔,随笔详情页等编写测试用例并进行手工测试和自动化测试,测试环境为Windows11操作系统,使用 Google Chrome 浏览器进行测试。
测试方法:本文主要采用黑盒测试方法,不关注代码内部实现,通过一些科学的手段,发起测试数据,关注测试执行结果。测试人员通过模拟真实用户的操作,对系统功能进行测试。
目录
文章目录
一、系统测试用例
二、自动化测试
2.1 引入依赖
2.2 测试前驱动准备
2.3 登录页面
2.4 随笔列表页测试
2.5 随笔详情页测试
2.6 写随笔&写草稿测试
2.7 检验发布是否成功测试
2.8 删除新增的随笔测试
2.9 注销测试
2.10 注册测试
三、测试结果
四、兼容性测试
PC
Pad
手机
浏览器
密码保存是否安全
SQL注入
六、网络测试
有网
弱网
断网
七、性能测试
写在最后
一、系统测试用例
测试用例如果有需要,请联系我~~
二、自动化测试
2.1 引入依赖
<dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->// selenium依赖<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency>// 保存截图的包<!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->// 添加junit5依赖<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version></dependency>// 添加junit5参数包<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->// 测试套件<dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.1</version></dependency></dependencies>
2.2 测试前驱动准备
public class InitAndEnd {static WebDriver webDriver;@BeforeAllstatic void SetUp(){webDriver = new ChromeDriver();}@AfterAllstatic void TearDown(){webDriver.quit();}
}
新建一个类创建驱动,用测试类继承它,并且测试测试完成之后要进行页面关闭,驱动要进行释放,这里用到了@BeforeAll和@AfterAll注解
2.3 登录页面
登录自动化测试代码:
/*** 输入正确的账号,密码登录成功*/@Order(1)@ParameterizedTest@CsvFileSource(resources = "login.csv")void LoginSuccess(String username,String password,String blog_list_url) throws InterruptedException {System.out.println(username + password + blog_list_url);// 打开随笔登录界面webDriver.get("http://127.0.0.1:8080/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 输入账号adminwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 输入密码webDriver.findElement(By.cssSelector("#password")).sendKeys(password);webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 点击提交按钮webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);// 跳转到列表页// 获取当前页面urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 如果url=http://127.0.0.1:8080/myblog_list.html,测试通过,否则测试不通过Assertions.assertEquals(blog_list_url,cur_url);webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 列表页展示用户信息是admin// 用户名是admin测试通过,否则测试不通过webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_admin = webDriver.findElement(By.cssSelector("#username")).getText();Assertions.assertEquals(username,cur_admin);}
login.csv文件
admin,123456,http://127.0.0.1:8080/myblog_list.html
① 创建驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常登录:多参数测试
④ 测试异常登录:用户名/密码错误的情况
⑤ 注意测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
⑥ 注意清空内容后才能再次输入用户名以及密码⑦测试验证码可以使用白名单进行测试,还可以将代码注释再进行测试
测试结果:可以正常登录并且对格式校验合理,布局合理,使用白名单进行验证码正确处理,高并发可能会导致响应速度慢,但不影响用户体验
2.4 随笔列表页测试
草稿列表和随笔列表测试步骤相似~~
自动化测试代码:
/*** 随笔列表页博客数量不为0*/@Order(2)@Testvoid BlogList(){// 打开播客列表页webDriver.get("http://127.0.0.1:8080/myblog_list.html");// 获取页面上所有播客标题对应的元素webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);int title_num = webDriver.findElements(By.cssSelector(".title")).size();// 如果元素数量不为0,测试通过Assertions.assertNotEquals(0,title_num);}
① 测试随笔列表页是否可以正常打开
② 测试随笔列表页的标题和内容是否可以正常显示且不为0
③ 同样注意执行顺序
测试结果:可以正确显示所有随笔,并且分页功能可以正常使用,布局合理,易于用户使用,随笔加载速度适中,可以优化
2.5 随笔详情页测试
自动化测试代码:
/*** 随笔详情页校验* url* 博客标题* 页面title是“随笔详情页”*/@Order(4)@ParameterizedTest@MethodSource("Generator")void BlogDetail(String expected_url,String expected_title,String expected_blog_title) throws InterruptedException {// 找到第一篇随笔对应的查看全文按钮sleep(3000);webDriver.findElement(By.xpath("//*[@id=\"artDiv\"]/div[1]/a[1]")).click();// 获取当前页面urlwebDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 获取当前页面titleString cur_title = webDriver.getTitle();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 获取随笔标题String cur_blog_title = webDriver.findElement(By.cssSelector("#title")).getText();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);Assertions.assertEquals(expected_title,cur_title);Assertions.assertEquals(expected_blog_title,cur_blog_title);if (cur_url.contains(expected_url)){System.out.println("测试通过");}else {System.out.println(cur_url);System.out.println("测试不通过");}}
① 测试点击查看全文之后详情页的正确打开
② 测试当前页面的url和title,并且测试随笔的标题是不是新发布的标题
③ 执行顺序
测试结果:可以正确的查看详情,布局合理,展示效果明确,并且可以正确提交评论并且显示评论区,用户体验好
2.6 写随笔&写草稿测试
自动化测试代码:
/**** 写随笔*/@Order(3)@Testvoid EditBlog() throws InterruptedException {webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 找到写随笔按钮,点击webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 通过JS将标题进行输入((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title\").value=\"自动化测试\"");sleep(3000);// 点击发布webDriver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button:nth-child(2)")).click();sleep(3000);webDriver.switchTo().alert().accept();sleep(3000);webDriver.switchTo().alert().dismiss();sleep(3000);// 获取当前页面urlString cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://127.0.0.1:8080/myblog_list.html",cur_url);}
① 测试编辑页是否可以正确打开
② 测试随笔是否可以正常发布:元素齐全 or 部分元素
③ 测试“写随笔”按钮是否可以正常使用
④ 执行顺序⑤随笔发布之后能否跳转到我的随笔列表页
测试结果:可以正确发表随笔&发表草稿,布局合理,用户体验感好,点击发布之后可以继续添加,也可以跳转到我的随笔列表页,保存草稿与其一致
2.7 检验发布是否成功测试
自动化测试代码:
/*** 校验已发布随笔标题* 校验已发布随笔时间*/@Order(5)@Testvoid BlogInfoChecked(){webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);webDriver.get("http://127.0.0.1:8080/blog_list.html");// 获取第一篇随笔标题String first_blog_title = webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.title")).getText();// 获取第一篇随笔发布时间String first_blog_time = webDriver.findElement(By.xpath("//*[@id=\"artListDiv\"]/div[1]/div[2]")).getText();// 检验随笔标题是不是自动化测试Assertions.assertEquals("自动化测试",first_blog_title);// 如果时间是2023-8-10发布的,测试通过if (first_blog_time.contains("2023-08-10")){System.out.println("测试通过");}else {System.out.println("测试不通过");}}
①测试新发布的第一篇随笔是否正确
②测试发布随笔的时间
③执行顺序
测试结果:可以正确检验新发布的随笔
2.8 删除新增的随笔测试
自动化测试代码:
/**** 删除和刚才发布的随笔*/@Order(6)@Testvoid DeleteBlog() throws InterruptedException {webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 打开随笔列表页面webDriver.get("http://127.0.0.1:8080/myblog_list.html");// 点击删除按钮sleep(2000);webDriver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(6)")).click();sleep(3000);webDriver.switchTo().alert().accept();// 播客列表页第一篇随笔标题不是“自动化测试”sleep(2000);webDriver.switchTo().alert().accept();sleep(2000);String first_blog_title = webDriver.findElement(By.xpath("//*[@id=\"artDiv\"]/div[1]/div[1]")).getText();// 校验当前标题不等于“自动化测试”webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);Assertions.assertNotEquals(first_blog_title,"自动化测试");}
①删除按钮是否能点击
②点击删除之后是否真正删除
③测试第一篇随笔的标题是不是跟之前一样
④执行顺序
测试结果:可以正常删除,易于操作,目的明确,易于用户使用
2.9 注销测试
自动化测试代码:
/*** 注销*/@Order(7)@Testvoid Logout() throws InterruptedException {webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(8)")).click();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);webDriver.switchTo().alert().accept();sleep(3000);// 校验urlString cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://127.0.0.1:8080/login.html",cur_url);// 校验提交按钮WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));Assertions.assertNotNull(webElement);}
①测试注销是否能点击
②测试点击注销之后能否跳转到登录页
③测试url和提交按钮
④执行顺序
测试结果:可以成功注销,注销后跳转到登录页,易于用户操作
2.10 注册测试
自动化测试代码:
/*** 注册* @throws InterruptedException*/@Order(8)@Testvoid reg() throws InterruptedException {sleep(3000);webDriver.get("http://127.0.0.1:8080/reg.html");webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);webDriver.findElement(By.cssSelector("#username")).sendKeys("admin2");webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");webDriver.findElement(By.cssSelector("#password2")).sendKeys("123456");webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);webDriver.switchTo().alert().accept();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));Assertions.assertNotNull(webElement);}
①测试页面的元素能否正确显示
②测试输入正确格式的用户名和密码+确认密码点击提交
③能否注册成功跳转到登录页面
④执行顺序
测试结果:可以成功注册,界面合理,格式校验功能合理,提高密码安全,易于用户使用
三、测试结果
所有测试用例通过,如果所示:
测试比较耗时,说明性能还可以优化~~
四、兼容性测试
PC
测试结果:在windows、Linux、Mac系统中使用网页访问效果一致 功能使用正常 兼容测试通过
Pad
测试结果:在安卓、IOS系统中访问浏览器可以进行正常使用 兼容测试通过
手机
测试结果:在安卓、IOS系统中可以进行正常的使用 兼容测试通过
浏览器
测试结果:在Chrom、IE内核中的浏览器使用正常 页面布局显示正确 功能使用正常 兼容性测试通过
五、安全测试
密码保存是否安全
测试用例:保存密码的数据库是否存在风险
测试结果:本系统中使用的数据库使用了MD5加盐算法保存密码在数据库中 安全系数较高
SQL注入
测试用例:在登录时使用sql注入尝试能否正确登录
测试结果:在MyBatis中使用特殊的方法预防了SQL注入 安全系数较高
六、网络测试
有网
测试结果:在2g情况下访问缓慢 在3g、4g、5g、wifi情况下访问快速 体验较好
弱网
测试工具:使用fidder模拟弱网情况
测试结果:弱网情况下访问缓慢 但是加载出的内容与预期结果完全一致
断网
测试结果:在断网情况下无法访问网页 对于网络依赖较高
七、性能测试
测试用例:大量用户访问使用是否流畅
测试工具:LoadRunner
测试结果:服务器性能一般 在高并发的使用下页面加载出现卡顿 使用体验较差 建议提升性能
测试用例:浏览页面、发布随笔、加载全文是否流畅
测试结果:在少量用户使用的情况下效果良好 加载迅速
写在最后
1)一定要关注测试用例的执行顺序问题
2)对于页面的检查一定要到位,如检查元素是否存在确保页面的正确性
3)注意多参数测试的页面导航问题
4)发现:当多参数(多用户登录)时就会出现高并发的服务器错误情况,该情况需要关注,交给开发人员处理。
5)注意:一定要关注执行顺序!
6)因为列表页等的测试是需要在登录成功后才能抵达的,所以在进行登录页面测试的最后一步应该是登录成功的状态,这样子是为了确保列表页等能够正确进入测试。【并不是绝对,但是需要进行关注】
7)使用 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 确定方法的执行顺序
8)测试用例并不是越多越好
祝各位面试顺利~
相关文章:

【软件测试】随笔系统测试报告
博主简介:想进大厂的打工人博主主页:xyk:所属专栏: 软件测试 随笔系统采用 SSM 框架前后端分离的方法实现,本文主要针对功能:登录,注册,注销,写随笔,删除随笔,随笔详情页…...
vue中使用html2canvas+jsPDF实现pdf的导出
导入依赖 html2canvas依赖 npm install html2canvasjspdf依赖 npm install jspdfpdf导出 以导出横向,A4大小的pdf为例 规律:1. html2canvas 中,在保持jsPDF中的宽高不变的情况下,设置html2canvas中的 width 和 height 值越小&a…...

Linux学习之firewallD
systemctl status firewalld.service查看一下firewalld服务的状态,发现状态是inactive (dead)。 systemctl start firewalld.service启动firewalld,systemctl status firewalld.service查看一下firewalld服务的状态,发现状态是active (runni…...
【JS学习】Object.assign 用法介绍
Object.assign 是ES6中的一个方法。该方法能够实现对象的浅复制以及对象合并。Object.assign 并不会修改目标对象本身,而是返回一个新的对象,其中包含了所有源对象的属性。 例1 2个对象合并 const target { a: 1, b: 2 }; const source { b: 3, c: 4…...

【uni-app报错】获取用户收货地址uni.chooseAddress()报错问题
chooseAddress:fail the api need to be declared in …e requiredPrivateInf 原因: 小程序配置 / 全局配置 (qq.com) 解决: 登录小程序后台申请接口 按照流程申请即可 在项目根目录中找到 manifest.json 文件,在左侧导航栏选择源码视图&a…...

机器学习、cv、nlp的一些前置知识
为节省篇幅,不标注文章来源和文章的问题场景。大部分是我的通俗理解。 文章目录 向量关于向量的偏导数:雅可比矩阵二阶导数矩阵:海森矩阵随机变量随机场伽马函数beta分布数学术语坐标上升法协方差训练集,验证集,测试集…...

Steam 灵感的游戏卡悬停效果
先看效果: 再看代码(查看更多): <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Steam 灵感的游戏卡悬停效果</title><style>* {margin: …...
[Openwrt]一步一步搭建MT7981A uboot、atf、openwrt-21.02开发环境操作说明
安装ubuntu-18.04 软件安装包 ubuntu-18.04-desktop-amd64.iso 修改ubuntu管理员密码 sudo passwd [sudo] password for w1804: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 更新ubuntu源 备份源 sudo cp /etc/apt/so…...

Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理
Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理 目录 Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、实现步骤 五、关键代码 一、简…...

安全学习DAY16_信息打点-CDN绕过
信息打点-CDN绕过 文章目录 信息打点-CDN绕过本节思维导图相关链接&工具站&项目工具前置知识:CDN配置:配置1:加速域名-需要启用加速的域名配置2:加速区域-需要启用加速的地区配置3:加速类型-需要启用加速的资源…...

genism word2vec方法
文章目录 概述使用示例模型的保存与使用训练参数详解([原链接](https://blog.csdn.net/weixin_44852067/article/details/130221655))语料库训练 概述 word2vec是按句子来处理的Sentences(句子们) 使用示例 from gensim.models import Word2Vec #sent…...

vue3自定义样式-路由-axios拦截器
基于vue,vite和elementPlus 基于elementPlus自定义样式 history模式的路由 在根目录配置jsconfig.json,添加json的配置项。输入自动联想到src目录,是根路径的别名拦截器 如果存在多个接口地址,可以配置多个axios实例 数据持久化之后&#x…...

【mysql】事务的四种特性的理解
🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…...

C++中List的实现
前言 数据结构中,我们了解到了链表,但是我们使用时需要自己去实现链表才能用,但是C出现了list将这一切皆变为现。list可以看作是一个带头双向循环的链表结构,并且可以在任意的正确范围内进行增删查改数据的容器。list容器一样也是…...

ElementUI 树形表格的使用以及表单嵌套树形表格的校验问题等汇总
目录 一、树形表格如何添加序号体现层级关系 二、树形表格展开收缩图标位置放置,设置指定列 三、表单嵌套树形表格的校验问题以及如何给校验rules传参 普通表格绑定如下:这种方法只能校验表格的第一层,树形需要递归设置子级节点prop。 树…...
解决“Unable to start embedded Tomcat“错误的完整指南
系列文章目录 文章目录 系列文章目录前言一、查看错误信息二、确认端口是否被占用三、检查依赖版本兼容性四、清理临时文件夹五、检查应用程序配置六、检查依赖冲突七、查看异常堆栈信息八、升级或降级Spring Boot版本总结前言 在使用Spring Boot开发应用程序时,有时可能会遇…...

JVS开源基础框架:平台基本信息介绍
JVS是面向软件开发团队可以快速实现应用的基础开发脚手架,主要定位于企业信息化通用底座,采用微服务分布式框架,提供丰富的基础功能,集成众多业务引擎,它灵活性强,界面化配置对开发者友好,底层容…...
C++ - max_element
在C中,要找到一个数组中的最大元素,可以使用 std::max_element 函数。以下是使用步骤: 包含 <algorithm> 头文件,这里定义了 std::max_element 函数。声明一个数组,并初始化它。使用 std::max_element 函数来查找…...

聚隆转债上市价格预测
聚隆转债 基本信息 转债名称:聚隆转债,评级:A,发行规模:2.185亿元。 正股名称:南京聚隆,今日收盘价:16.64元,转股价格:18.27元。 当前转股价值 转债面值 / 转…...

pytest自动生成测试类 demo
一、 pytest自动生成测试类 demo # -*- coding:utf-8 -*- # Author: 喵酱 # time: 2023 - 08 -15 # File: test4.py # desc: import pytest import unittest# 动态生成测试类def create_test_class(class_name:str, test_cases:list) -> type:"""生成测试类…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...