开发者社区测试报告(功能测试+性能测试)

功能测试

测试相关用例

开发者社区功能背景

在当今数字化时代,编程已经成为一项核心技能,越来越多的人开始学习编程,以适应快速变化的科技 环境。基于这一需求,我设计开发了一个类似博客的论坛系统,专注于方便程序员与学习编程者之间的交流和 学习,旨在创建一个开放、友好且充满活力的社区。

测试用例思维导图

测试页面

以下是要测试的页面:

页面排版渲染与需求一致,同时按钮能够进行正确点击

登录页面

注册页面

主界面

用户个人信息

帖子详情

短信页面

测试用例

设置了部分基础的测试用例,尽可能的全覆盖,这里只展示部分用例(篇幅有限)

登录界面

  • 正确输入用户名和密码

  • 输入密码为空

注册页面

  • 正确注册

  • 用户名为空

  • 用户已存在

  • 密码为空

个人页面

  • 邮箱修改失败

  • 电话号码失败

  • 密码修改失败

帖子页面

  • 创建帖子失败

  • 回复帖子失败

站内信页面

回复失败

代码编写

基础配置

先进行驱动配置以及截图配置

public class InitUtils {
    public static WebDriver webDriver ;
    public static WebDriver createDriver(){
        if(webDriver==null){
            System.setProperty("webdriver.chrome.driver", "C:\\学习使我快乐\\测试\\demo\\chromedriver-win64\\chromedriver.exe");
            ChromeOptions options = new ChromeOptions();
            options.addArguments("--remote-allow-origins=*");
            webDriver=new ChromeDriver(options);
            webDriver.manage().timeouts().implicitlyWait(Duration.ofMillis(5));
        }
        return webDriver;
    }

    public InitUtils(String url){
        webDriver = createDriver();
        webDriver.get(url);
    }

    //截图
    public static void getImage(String str) throws IOException {
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HH_mm_ss_SSS");
        String dirTime = sim1.format(System.currentTimeMillis());
        String pngTime = sim2.format(System.currentTimeMillis());

        //名字
        String fileName = "./src/test/image/"+dirTime+"/"+str+"_"+pngTime+".png";

        File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(file,new File(fileName));
    }
}

登录页面

public class LoginPageTest extends InitUtils {
    public static String url = "http://127.0.0.1:58080/sign-in.html";

    public LoginPageTest() {
        super(url);
    }

    //登录成功
    public void LoginSuc() throws InterruptedException, IOException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        //先找到输入框,输入正确的用户名和密码
        getImage(str);//用方法名进行命名
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("123123");
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        getImage(str);
        //webDriver.quit();
    }

    //退出登录
    public void logout() throws IOException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        getImage(str);
        webDriver.findElement(By.cssSelector("#index_user_logout")).click();
        getImage(str);
        //webDriver.quit();
    }

    //登录失败
    public void LoginFail() throws IOException, InterruptedException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        //先找到输入框,输入错误的用户名和密码
        getImage(str);
//        webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");
//        webDriver.findElement(By.cssSelector("#password")).sendKeys("123456111");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("");
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        getImage(str);
        //webDriver.quit();
    }
}

注册页面

public class RegisterTest extends InitUtils {
    public static String url = "http://127.0.0.1:58080/sign-up.html";
    public RegisterTest() {
        super(url);
    }

    //注册成功
    public void registerSuc() throws IOException, InterruptedException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#username")).sendKeys("小喜");
        webDriver.findElement(By.cssSelector("#nickname")).sendKeys("happiness");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");
        webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");
        webDriver.findElement(By.cssSelector("#policy")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        getImage(str);
        //webDriver.quit();
    }

    //注册失败
    public void fail() throws IOException, InterruptedException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        //webDriver.findElement(By.cssSelector("#username")).sendKeys("");//用户名为空
        //webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");//用户名重复
        webDriver.findElement(By.cssSelector("#username")).sendKeys("明明");
        webDriver.findElement(By.cssSelector("#nickname")).sendKeys("mingming");
        //webDriver.findElement(By.cssSelector("#password")).sendKeys("");//密码为空
        //webDriver.findElement(By.cssSelector("#password")).sendKeys("123");//密码小于6位
        webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");
        //webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");//两次密码输入不一样
        webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");
        //不点击同意信息
        //webDriver.findElement(By.cssSelector("#policy")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        getImage(str);
    }
}

帖子页面

public class ListPageTest extends InitUtils {
    public static String url = "http://127.0.0.1:58080/index.html";
    public ListPageTest() {
        super(url);
    }

    //点击帖子
    public void listDetail() throws IOException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
        //因为是外部的文件 MD输入,所以一般是找不到的
        webDriver.findElement(By.cssSelector("#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll")).sendKeys("这是自动化测试内容");
        getImage(str);
        webDriver.findElement(By.cssSelector("#details_btn_article_reply")).click();
        getImage(str);
        //webDriver.quit();
    }

    //点击板块
    public void listBoard() throws IOException, InterruptedException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        webDriver.findElement(By.cssSelector("#topBoardList > li:nth-child(5) > a > span.nav-link-title")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.findElement(By.cssSelector("#topBoardList > li:nth-child(8) > a > span.nav-link-title")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.quit();
    }

    //发布新帖子
    public void createNewText() throws IOException, InterruptedException{
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
        getImage(str);
        webDriver.findElement(By.cssSelector("#article_post_borad > option:nth-child(6)")).click();//选择板块
        webDriver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll")).sendKeys("自动化测试内容");
        Thread.sleep(2000);
        getImage(str);
        webDriver.findElement(By.cssSelector("#article_post_submit")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.quit();
    }
}

用户页面

public class UserTest extends InitUtils {
    //用户有两个页面,所以需要进行跳转
    public static String url="http://127.0.0.1:58080/index.html";
    public UserTest() {
        super(url);
    }

    //获取当前用户帖子
    public void myText() throws InterruptedException, IOException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        webDriver.findElement(By.cssSelector("#index_user_profile")).click();
        Thread.sleep(2000);
        getImage(str);
        //点击帖子
        webDriver.findElement(By.cssSelector("#profile_article_body > li > div.card.timeline-event-card > div > div > div > div > div.text-truncate > a > strong")).click();
        getImage(str);
        webDriver.quit();
    }

    //修改个人信息成功
    public void updateInfoSuc() throws IOException, InterruptedException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        webDriver.findElement(By.cssSelector("#index_user_settings")).click();
        Thread.sleep(2000);
        //修改个人信息
        //修改之前要先清空
        //修改头像
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > div.row.align-items-center > div:nth-child(2) > a")).sendKeys("C:\\Users\\asus\\Desktop\\证件照压缩版.jpg");

        //修改昵称
//        webDriver.findElement(By.cssSelector("#setting_input_nickname")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_nickname")).sendKeys("NickName");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_nickname")).click();
//
//        //修改邮箱
//        webDriver.findElement(By.cssSelector("#setting_input_email")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_email")).sendKeys("qweqwe123@qq.com");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_email")).click();
//
//        //修改电话号码
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).sendKeys("15136698733");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_phoneNum")).click();
//
//        //修改密码
//        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");
//        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("1123456");
//        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");
//        webDriver.findElement(By.cssSelector("#settings_submit_password")).click();
//
//        //修改个人简介
//        webDriver.findElement(By.cssSelector("#settings_textarea_remark")).clear();
//        webDriver.findElement(By.cssSelector("#settings_textarea_remark")).sendKeys("这是自动化测试");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#settings_submit_remark")).click();
        Thread.sleep(2000);
        getImage(str);
        Thread.sleep(2000);
        webDriver.quit();
    }


    //修改个人信息失败
    public void updateInfoFail()throws IOException, InterruptedException{
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        getImage(str);
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        webDriver.findElement(By.cssSelector("#index_user_settings")).click();
        Thread.sleep(2000);
        //修改个人信息

        //修改邮箱
//        webDriver.findElement(By.cssSelector("#setting_input_email")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_email")).sendKeys("qweqwe123");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_email")).click();
//        getImage(str);

//        //修改电话号码
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).sendKeys("15136698");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_phoneNum")).click();
//        getImage(str);

        //修改密码
//        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");
//        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("1123456");//前后密码不一致
//        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");
//        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("");//没有输入旧密码
//        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("123456");
//        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");
        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");
        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("123456");
        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("");//没有输入确认密码
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#settings_submit_password")).click();
        Thread.sleep(1000);
        getImage(str);
        webDriver.quit();
    }
}

短信页面

public class MessageTest extends InitUtils {
    public static String url = "http://127.0.0.1:58080/index.html";
    public MessageTest() {
        super(url);
    }

    //打开站内信板块,点击站内信
    public void getMessage() throws InterruptedException, IOException {
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        webDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a > svg")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span:nth-child(2)")).click();
        Thread.sleep(2000);
        getImage(str);
        //webDriver.quit();
    }

    //回复站内信
    public void responseMsg()throws InterruptedException, IOException{
        String str = Thread.currentThread().getStackTrace()[1].getMethodName();
        webDriver.findElement(By.cssSelector("#btn_index_message_reply")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.findElement(By.cssSelector("#index_message_reply_receive_content")).sendKeys("用来测试一下");
        Thread.sleep(2000);
        getImage(str);
        webDriver.findElement(By.cssSelector("#btn_index_send_message_reply")).click();
        Thread.sleep(2000);
        getImage(str);
        webDriver.quit();
    }
}

性能测试

对部分接口进行了性能测试,设置了600个线程

总结

  • 总体性能

    • 总请求数为6000,所有请求均成功执行,错误率为0.00%。

    • 平均响应时间为5.20毫秒,最小响应时间为0毫秒,最大响应时间为133毫秒。

    • 网络吞吐量为512.30 KiB/s,接收数据量为4521.95 KiB,发送数据量为113.35 KiB。

  • 各请求类型的性能

    • 发起帖子:平均响应时间为10.06毫秒,最大响应时间为32毫秒。

    • 点赞帖子:平均响应时间为5.10毫秒,最大响应时间为13毫秒。

    • 登出:平均响应时间为1.06毫秒,是所有请求中最快的。

    • 登录:平均响应时间为2.83毫秒,最大响应时间为36毫秒。

    • 获取帖子内容:平均响应时间为32.46毫秒,是所有请求中最慢的,最大响应时间为63毫秒。

    • 获取帖子详情:平均响应时间为5.24毫秒,最大响应时间为31毫秒。

    • 获取板块:平均响应时间为2.47毫秒,最大响应时间为8毫秒。

    • 获取用户帖子:平均响应时间为16.25毫秒,最大响应时间为44毫秒。

    • 获取用户详情:平均响应时间为1.17毫秒,最大响应时间为6毫秒。

    • 获取短信内容获取站内信列表:平均响应时间均为4.44毫秒,最大响应时间为133毫秒。

    • 获取站内:平均响应时间为3.39毫秒,最大响应时间为14毫秒。

  • APDEX指数

    • 所有请求的APDEX指数均为1.000,表示所有请求的响应时间都在用户可接受的范围内(容忍阈值500毫秒,沮丧阈值1.5秒)。

  • 网络使用情况

    • 接收数据量最大的是“获取帖子内容”和“获取用户帖子”,分别为4450.46 KiB和4290.84 KiB。

    • 发送数据量最大的是“发起帖子”和“登录”,分别为21.53 KiB和15.27 KiB。

  • 结论

    • 系统整体性能良好,所有请求的响应时间都在可接受范围内,且没有错误发生。

    • “获取帖子内容”和“获取用户帖子”是系统中响应时间较长的操作,可能需要进一步优化。

    • 网络吞吐量和数据传输量在合理范围内,没有明显的瓶颈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pyecharts 中设置 ​Map 图表的宽高

在 pyecharts 中设置 ​Map 图表的宽高,需要通过 InitOpts 初始化参数实现。以下是具体方法: 🎯 完整代码示例 from pyecharts import options as opts from pyecharts.charts import Map# 创建地图时设置宽高 map_chart (Map(init_optsopt…

FPGA|Verilog-SPI驱动

最近准备蓝桥杯FPGA的竞赛,因为感觉官方出的IIC的驱动代码思路非常好,写的内容非常有逻辑并且规范。也想学习一下SPI的协议,所以准备自己照着写一下。直到我打开他们给出的SPI底层驱动,我整个人傻眼了,我只能说&#x…

python语言总结(持续更新)

本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…

NO.26十六届蓝桥杯备战|字符数组七道练习|islower|isupper|tolower|toupper|strstr(C++)

P5733 【深基6.例1】自动修正 - 洛谷 小写字母 - 32 大写字母 大写字母 32 小写字母 #include <bits/stdc.h> using namespace std;const int N 110; char a[N] { 0 };int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> a;int i 0;while (a…

笔记四:C语言中的文件和文件操作

Faye&#xff1a;只要有正确的伴奏&#xff0c;什么都能变成好旋律。 ---------《寻找天堂》 目录 一、文件介绍 1.1程序文件 1.2 数据文件 1.3 文件名 二、文件的打开和关闭 2.1 文件指针 2.2.文件的打开和关闭 2.3 文件读取结束的判定 三、 文件的顺序读写 3.1 顺序读写…

DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)

&#x1f31f;前言: 在软件开发、项目管理和系统设计等领域&#xff0c;图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及&#xff0c;我们现在可以更轻松地创建各种专业图表。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&…

【OneAPI】网页截图API-V2

API简介 生成指定URL的网页截图或缩略图。 旧版本请参考&#xff1a;网页截图 V2版本新增全屏截图、带壳截图等功能&#xff0c;并修复了一些已知问题。 全屏截图&#xff1a; 支持全屏截图&#xff0c;通过设置fullscreentrue来支持全屏截图。全屏模式下&#xff0c;系统…

基于SpringBoot的餐厅点餐管理系统设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Windows Server 2022:赋能未来,打造智能高效的企业数字基座---免费下载

免费下载地址 Windows Server 2022&#xff1a;赋能未来&#xff0c;打造智能高效的企业数字基座‌ 在数字化转型的浪潮中&#xff0c;企业需要更安全、更灵活、更智能的基础设施支撑。‌Windows Server 2022‌作为微软新一代服务器操作系统&#xff0c;以革新性的技术架构和行…

支持向量简要理解

决策方程符合感知机区分理论&#xff0c;我们基于线性代数来看这满足子空间理论&#xff0c;可以获取得到超平面。 支持向量机的目标是寻找最与超平面最近的点的最大距离&#xff0c;而距离计算如上&#xff0c;符合数学上计算点到线&#xff08;面&#xff09;的距离公式。 …

USB2.0 学习(1)字段和包

目录 1 字段 1.1 包识别字段PID 1.2 地址字段 1.3帧号字段 1.4 数据字段 1.5 CRC字段 2 包 2.1令牌包 2.2帧起始包 2.3数据包 2.4SPLIT包(分割事务包) 2.5握手包 参考 USB包的构成是一个逐层的过程,首先这些串行数据按照特定的规则构成字段,字段是构成包的基本…

AI 人工智能深度解析:从基础到前沿,全面掌握未来科技

AI 人工智能深度解析&#xff1a;从基础到前沿&#xff0c;全面掌握未来科技 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 AI 人工智能深度解析…

2025-03-09 学习记录--C/C++-PTA 习题11-1 输出月份英文名

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h>char *getmonth( int n );int main() {int n;char …

【音视频 | AAC】AAC编码库faac介绍、使用步骤、例子代码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

macos 程序 运行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件

JavaWeb后端基础(7)AOP

AOP是Spring框架的核心之一&#xff0c;那什么是AOP&#xff1f;AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实说白了&#xff0c;面向切面编程就是面向特定方法编程。AOP是一种思想&#xff0c;而在Spring框…

STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步

主题内容教学目的/扩展视频OLED显示屏重点课程电路原理&#xff0c;手册分析&#xff0c;驱动程序。初始化&#xff0c;清屏&#xff0c;ASCII字库&#xff0c;显示分区。调用显示函数。做带有加入图形和汉字显示的RTC时钟界面。讲字库的设计原理。 师从洋桃电子&#xff0c;杜…

基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

ctfshow做题笔记—栈溢出—pwn65~pwn68

目录 前言 一、pwn65(你是一个好人) 二、pwn66(简单的shellcode&#xff1f;不对劲&#xff0c;十分得有十二分的不对劲) 三、pwn67(32bit nop sled)&#xff08;确实不会&#xff09; 四、pwn68(64bit nop sled) 前言 做起来比较吃力哈哈&#xff0c;自己还是太菜了&…

【新手指南】pyqt可视化远程部署deepseek7B蒸馏版模型

本地效果&#xff1a;&#xff08;如果想做这个的本科毕设&#xff0c;建议美化界面。&#xff09; 总结&#xff1a;MobaXterm远程连接autodl服务器&#xff0c;在MobaXterm上利用X11转发使pyqt可视化页面在自己的电脑上展现出来。 1. 官网下载MobaXterm MobaXterm free Xse…