论坛系统测试报告

目录

  • 一、项目背景
  • 二、论坛系统测试用例思维导图
  • 三、论坛系统测试
    • 3.1界面测试
    • 3.2登陆测试
    • 3.3主页测试
    • 3.4个人中心测试
  • 四、自动化测试脚本
    • 4.1配置驱动
    • 4.2创建浏览器类
    • 4.3功能测试
      • 4.3.1登陆测试
      • 4.3.2注册测试
      • 4.3.3主页测试
      • 4.3.4帖子编辑
      • 4.3.5运行主代码
  • 五、BUG分析
    • 六、测试总结

一、项目背景

论坛系统致力于打造一个多元交流社区,吸引各领域专业人士、爱好者及普通用户汇聚一堂。用户可在开放的环境中充分交流。伴随互联网用户群体持续壮大,尤其是年轻一代网民对在线交流和知识获取的需求不断攀升,论坛作为经典且有效的互动平台,蕴藏着巨大发展潜力。通过论坛系统建设,期望满足不同用户的多样化需求,提升信息交流效率与质量,为用户创造更多价值,助力互联网内容生态的健康、持续发展。

二、论坛系统测试用例思维导图

对于论坛系统简单可以分为六类方面进行测试:界面测试、安全测试、易用性测试、兼容性测试、功能测试
在这里插入图片描述

三、论坛系统测试

3.1界面测试

在这里插入图片描述

  • 用户登陆框虽然没有在屏幕正中央,好在用白色和背景板颜色区分更加显眼,并标有黑体“用户登陆”。
  • 用户名及密码输入框大小合适,让用户容易输入。
  • 登陆按钮用蓝色框格包围使得用户能加轻松登陆。
  • “点击注册”字样用蓝色标识,时用户容易找到。
  • 密码框内“小眼睛”有显示密码功能。

3.2登陆测试

  • 用户名及密码为空时输入框下显示红色“用户名不能为空”或“密码不能为空”字样。
    (用户名:zhangsan 密码:12345 为例)
    在这里插入图片描述
  • 输入正确用户名及错误密码,提示用户名或密码错误.
    在这里插入图片描述
  • 输入错误用户名及正确密码.
    在这里插入图片描述
  • 输入正确用户名及正确密码
    进入论坛主页
    在这里插入图片描述

3.3主页测试

  • 1.点击发帖子

在这里插入图片描述

  • 2.选择板块

在这里插入图片描述

  • 3.输入标题及内容

在这里插入图片描述

  • 4.点击发布

在这里插入图片描述

  • 5.发布成功!!!

在这里插入图片描述

  • 6.点击输入框输入论坛测试

在这里插入图片描述
测试发现点击搜索框内的放大镜无法搜索。

  • 7.点击帖子标题

在这里插入图片描述
显示进入帖子

  • 8.点击发私信

在这里插入图片描述

  • 9.发布成功

在这里插入图片描述
测试显示没有查找私信功能

  • 10.点击回复

在这里插入图片描述
回复成功!!!

3.4个人中心测试

  1. 点击主页头像

在这里插入图片描述

  1. 进入个人中心

在这里插入图片描述

  1. 点击修改昵称/邮箱地址/电话号码

在这里插入图片描述
测试结果发现无法修改

  1. 点击修改密码

在这里插入图片描述

  1. 修改成功

在这里插入图片描述

四、自动化测试脚本

4.1配置驱动

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。
WebDriverManager 是一个开源的 Java 库,用于自动管理 Selenium WebDriver 所需的驱动程序(如 ChromeDriver、GeckoDriver、EdgeDriver 等)。它可以自动下载、设置和维护这些驱动程序,从而简化了 Selenium 测试的配置过程

在pycharm软件的设置中观察是否安装这两个软件包,如果没有可能无法正常驱动打开本地浏览器
在这里插入图片描述

4.2创建浏览器类

  • 每个功能都需要pycharm驱动浏览,若每个功能都有一份浏览器驱动,功能过多可能导致软件崩溃,将驱动器类放入一个common文件,功能测试则放入test文件,image用于保存截屏图片


在这里插入图片描述

  • 驱动器类
    Lunta实例化出Driver类,每次测试功能时调用类对象driver,防止每个功能模块都创建一个新的驱动器。
import datetime
import os
import sys
import time

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager


class Driver:
    driver=""
    def __init__(self):
        #打开edge驱动管理
        EdsIns=EdgeChromiumDriverManager().install()
        options=webdriver.EdgeOptions()
        #创建edge浏览器对象
        self.driver=webdriver.Edge(service=Service(EdsIns),options=options)

        # 截屏功能

    def getScreenShot(self):
        dirname = datetime.datetime.now().strftime('%Y-%m-%d')
        if not os.path.exists("../images/" + dirname):
            os.mkdir("../images/" + dirname)
        filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S') + ".png"
        self.driver.save_screenshot(f'../images/{dirname}/' + filename)
Lunta=Driver()

4.3功能测试

4.3.1登陆测试

  1. 函数find_element()分别找出用户名及密码输入框
  2. send_keys输入内容
  3. click模拟用户点击登陆按钮
  4. find_element找出主页信息判断是否登陆成功
import time

from selenium.webdriver.common.by import By

from common.untils import Lunta

class LunTaLgoin:
    url=""
    driver=""
    def __init__(self):
        self.url="http://127.0.0.1:9580/sign-in.html"
        self.driver=Lunta.driver
        self.driver.get(self.url)

    #成功登陆
    def LTLoginTest(self):
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        time.sleep(2)
        #查找头像是否登陆成功
        self.driver.find_element(By.CSS_SELECTOR,"#index_nav_avatar")
        #截屏登陆成功页面
        Lunta.getScreenShot()
        # self.driver.find_element(By.CSS_SELECTOR,"#index_nav_avatar").click()
        # self.driver.find_element(By.CSS_SELECTOR,"#index_user_logout").click()
        # Lunta.getScreenShot()

    #登陆失败
    def LTFailTest(self):
        #密码错误
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(1)
        Lunta.getScreenShot()
        #检测是否出现密码错误弹窗
        self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")

        #清空内容
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
        # 用户名错误
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhang")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(1)
        Lunta.getScreenShot()
        # 检测是否出现密码错误弹窗
        self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")

        # 清空内容
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        # 用户名为空
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(1)
        Lunta.getScreenShot()
        # 检测是否出现用户名不能为空提示
        text=self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-3 > div").text
        assert text=="用户名不能为空"

        # 清空内容
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        # 用户名为空
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhang")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(1)
        Lunta.getScreenShot()
        # 检测是否出现用户名不能为空提示
        text = self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").text
        assert text == "密码不能为空"

4.3.2注册测试

  1. click模拟点击注册按钮
  2. find_element找出用户名,昵称,密码及确认密码输入框
  3. send_keys输入内容
  4. 注册失败是否有弹窗提示
  5. 注册成功返回登陆界面是否能登陆
import time

from selenium.webdriver.common.by import By

from common.untils import Lunta
class LunTareg:
    driver=""
    url=""
    def __init__(self):
        self.url = "http://127.0.0.1:9580/sign-in.html"
        self.driver = Lunta.driver
        self.driver.get(self.url)

    def LTreg(self):
        time.sleep(2)
        self.driver.implicitly_wait(2)
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()
        #注册成功
        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangs")
        self.driver.find_element(By.CSS_SELECTOR,"#nickname").send_keys("zhangs")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        time.sleep(2)
        Lunta.getScreenShot()
        self.driver.back()
        #登陆
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangs")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(2)
        # 查找头像是否登陆成功
        self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar")
        # 截屏登陆成功页面
        Lunta.getScreenShot()
        time.sleep(2)
        self.driver.back()

    def LTrefaii(self):
        time.sleep(2)
        self.driver.implicitly_wait(2)
        #点击注册
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()
        # 注册失败(用户已存在)
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangs")
        self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("zhangs")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()

        #是否弹窗提示
        self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
        Lunta.getScreenShot()

        # 注册失败(用户名为空)
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()

        # 是否提示
        text=self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(2) > div").text
        assert text=="用户名不能为空"
        Lunta.getScreenShot()

        # 注册失败(昵称为空)
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangs")
        self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()

        # 是否提示
        text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(3) > div").text
        assert text == "昵称不能为空"
        Lunta.getScreenShot()

        # 注册失败(密码为空)
        self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("zhangs")
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(2)
        # 是否提示
        text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(4) > div").text
        assert text == "密码不能为空"
        Lunta.getScreenShot()

        # 注册失败(确认密码错误)
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("12345")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        text=self.driver.find_element(By.CSS_SELECTOR,"#signUpForm > div > div:nth-child(5) > div > div").text
        assert text=="请检查确认密码"


        #未点击同意
        self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
        # 是否弹窗提示
        self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
        Lunta.getScreenShot()
        self.driver.back()

4.3.3主页测试

1.click点击发帖子内容
2.send_keys输入标题
3.send_keys输入内容(编辑框外置无法完成交互)
4.Action链模拟点击(click无法点击)

import time

from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

from common.untils import Lunta


class LunTahome():
    driver=""
    url=""
    def __init__(self):
        # 登陆状态url
        self.driver=Lunta.driver
        self.url="http://127.0.0.1:9580/index.html"
        self.driver.get(self.url)



    def LTPuTest(self):
        self.driver.implicitly_wait(5)
        #点击发布帖子
        self.driver.find_element(By.CSS_SELECTOR,"#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()
        #选择板块
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_borad").click()
        #编辑框外置无法完成交互
        # 输入标题,若能交互则完成以下命令
        # self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("如何年薪百万")
        #self.driver.find_element(By.CSS_SELECTOR,"article_post_submit").click()
        # # Action链模拟点击
        # element = self.driver.find_element(By.XPATH, '//*[@id="article_post_submit"]')
        # ActionChains(self.driver).move_to_element(element).click().perform()
        # # 提示帖子内容不能为空
        # self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
        # Lunta.getScreenShot()

        #输入标题
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").send_keys("如何年薪百万")
        #Action链模拟点击
        element=self.driver.find_element(By.XPATH,'//*[@id="article_post_submit"]')
        ActionChains(self.driver).move_to_element(element).click().perform()
        #提示帖子内容不能为空
        self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
        Lunta.getScreenShot()

        # 不输入标题
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").clear()
        # Action链模拟点击
        element = self.driver.find_element(By.XPATH, '//*[@id="article_post_submit"]')
        ActionChains(self.driver).move_to_element(element).click().perform()
        # 提示输入标题不能为空
        self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
        Lunta.getScreenShot()

        self.driver.back()

4.3.4帖子编辑

  • click点击发帖子>私信>send_keys输入内容>click点击回复>find_element搜索"回复成功弹窗">click点击回复>send_keys输入内容>click点击回复>find_element搜索“回复成功弹窗”>click点击点赞
import time

from selenium.webdriver.common.by import By

from common.untils import Lunta

class LunTaser:
    driver=""
    url=""
    def __init__(self):
        self.url="http://127.0.0.1:9580/index.html"
        self.driver=Lunta.driver
        self.driver.get(self.url)

    #搜索
    def LTaser(self):
        self.driver.implicitly_wait(5)
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input").send_keys("1234")
        #点击搜索
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input").click()
        #搜索第一篇文章
        time.sleep(3)
        text=self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
        Lunta.getScreenShot()
        #断言是否搜索成功
        #assert text=="1234"

    #私信
    def LTiss(self):
        self.driver.implicitly_wait(5)
        Lunta.getScreenShot()
        self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
        self.driver.find_element(By.CSS_SELECTOR,"#btn_details_send_message").click()
        self.driver.find_element(By.CSS_SELECTOR,"#index_message_receive_content").send_keys("上转转回收了吧")
        self.driver.find_element(By.CSS_SELECTOR,"#btn_index_send_message").click()
        Lunta.getScreenShot()
        #是否发布成功弹窗
        self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
        Lunta.getScreenShot()

    #回复
    def LTreply(self):
        self.driver.implicitly_wait(5)
        time.sleep(5)
        self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
        self.driver.find_element(By.CSS_SELECTOR,"#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll").send_keys("哇哈哈")
        self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply > span").click()
        #内容为空无法发送
        Lunta.getScreenShot()
        #提示请输入内容
        self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")

    #点赞
    def LTlike(self):
        self.driver.implicitly_wait(5)
        self.driver.find_element(By.CSS_SELECTOR,
                                 "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
        self.driver.find_element(By.CSS_SELECTOR,"#details_btn_like_count").click()
        #提示点赞成功
        self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div > h2")
        time.sleep(1)
        Lunta.getScreenShot()

4.3.5运行主代码

from test import LunTaLgoin
from test import LunTahome
from test import LunTareg
from test import LunTaser



if __name__ == '__main__':
    # 注册失败
    LunTareg.LunTareg().LTrefaii()
    # 注册成功
    LunTareg.LunTareg().LTreg()
    #登陆失败
    LunTaLgoin.LunTaLgoin().LTFailTest()
    #登陆成功
    LunTaLgoin.LunTaLgoin().LTLoginTest()

    #主页测试
    LunTahome.LunTahome().LTPuTest()
    # 帖子测试
    LunTaser.LunTaser().LTaser()
    LunTaser.LunTaser().LTiss()
    LunTaser.LunTaser().LTreply()
    LunTaser.LunTaser().LTlike()

五、BUG分析

  1. 搜索框输入内容无法点击搜索

在这里插入图片描述

  1. 主页板块内容显示不完全

在这里插入图片描述

  1. 昵称、邮箱地址、电话号码、个人简介无法修改

在这里插入图片描述
在这里插入图片描述

六、测试总结

本次论坛系统测试旨在全面验证系统功能的完整性、稳定性及用户体验,确保系统能够满足用户在信息交流、内容发布等方面的需求。测试范围涵盖了前台用户操作功能以及后台管理功能,采用了多种测试方法,包括功能测试、性能测试、兼容性测试等。

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

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

相关文章

C++ std::vector 超详细指南:基础实践(手搓vector)

目录 一.基本概念 二.类的常用接口说明 1.类对象的常见构造 2. vector类空间变化 1).size()(获取数据个数) 2).capacity()(获取容量大小) 3).empty()(判断是否为空&#xff0…

文件上传漏洞:upload-labs靶场11-20

目录 pass-11 pass-12 pass-13 pass-14 pass-15 pass-16 pass-17 pass-18 pass-19 pass-20 pass-11 分析源代码 ,发现上传文件的存放路径可控 if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],st…

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 一、简单介绍 二、Docker 下载安…

Redis的持久化-RDBAOF

文章目录 一、 RDB1. 触发机制2. 流程说明3. RDB 文件的处理4. RDB 的优缺点 二、AOF1. 使用 AOF2. 命令写⼊3. 文件同步4. 重写机制5 启动时数据恢复 一、 RDB RDB 持久化是把当前进程数据生成快照保存到硬盘的过程,触发 RDB 持久化过程分为手动触发和自动触发。 …

常见网络协议考察知识点

说说http,https协议; HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议: 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息,它使用安全套接字层(SSL)…

上海市闵行区数据局调研云轴科技ZStack,共探数智化转型新路径

为进一步深化人工智能、大模型技术的应用,推动区域数字经济高质量发展,2025年2月27日,上海市闵行区数据局局长吴畯率队赴上海云轴科技股份有限公司(以下简称“云轴科技ZStack”)开展专题调研。此次调研旨在深入了解企业…

数据结构秘籍(四) 堆 (详细包含用途、分类、存储、操作等)

1 引言 什么是堆? 堆是一种满足以下条件的树:(树这一篇可以参考我的文章数据结构秘籍(三)树 (含二叉树的分类、存储和定义)-CSDN博客) 堆中的每一个结点值都大于等于&#xff08…

MySQL增量更新数据:高效同步策略与PanguSync实战指南

Mysql增量更新数据软件下载https://pan.baidu.com/s/1WesHaKGO7uQMhPNE-BTDmg?pwdabcd#list/path%2F 在数据驱动的商业环境中,实时数据同步已成为企业数字化转型的关键。本文将深入探讨MySQL增量更新的核心技术,并详细解析如何通过PanguSync工具实现高…

【Wireshark 02】抓包过滤方法

一、官方教程 Wireshark 官网文档 : Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如,源ip地址作为过滤选项,右击源ip->prepare as filter-> 选中 点击选中完,显示过滤器&#…

run方法执行过程分析

文章目录 run方法核心流程SpringApplicationRunListener监听器监听器的配置与加载SpringApplicationRunListener源码解析实现类EventPublishingRunListener 初始化ApplicationArguments初始化ConfigurableEnvironment获取或创建环境配置环境 打印BannerSpring应用上下文的创建S…

前端知识一

(ref函数)1.为什么vue3中使用ref来创建响应式数据,而不是直接声明一个变量 import { ref } from "vue";const count ref(0); // 创建一个响应式的计数器,初始值为0function increment() {count.value; // 增加计数器的…

STM32---FreeRTOS中断管理试验

一、实验 实验目的:学会使用FreeRTOS的中断管理 创建两个定时器,一个优先级为4,另一个优先级为6;注意:系统所管理的优先级范围 :5~15 现象:两个定时器每1s,打印一段字符串&#x…

数据结构知识学习小结

一、动态内存分配基本步骤 1、内存分配简单示例: 个人对于示例的理解: 定义一个整型的指针变量p(着重认为它是一个“变量”我觉得可能会更好理解),这个变量用来存地址的,而不是“值”,malloc函…

swift4-汇编分析枚举内存布局

一、枚举的内存原理 1.1 常规case enum TestEnum { case test1, test2, test3 } var t TestEnum.test1 t .test2 t .test3枚举是常规的case的情况-是采取一个字节来存枚举变量通过拿到枚举的内存地址,看地址里面存的枚举值情况窥探枚举内存存储情况 var t Te…

Anolis服务器Arm64架构服务器配置(其他版本服务器解决方式思路一质)

Anolis服务器Arm64架构服务器配置 1.nginx配置1.1.尝试安装nginx1.2.资源准备1.2.1.查看服务器系统版本:1.2.2.下载依赖包:1.3.正式安装nginx1.3.1.下载nginx并上传服务器1.3.2.开始安装nginx1.4.防火墙配置1.4.1.直接关闭防火墙:不推荐,但省事1.4.2.命令介绍1.4.3.配置开启…

threejs:着色器onBeforeCompile给导入的模型添加光带扫描效果

模型材质属性丢失 上一篇博客我们学习了用着色器给模型添加光带扫描效果,今天来学习给导入的模型添加光带扫描效果,目标是给如下图的立筒仓加光带扫描。 首先我们试试原来的方法还是否有效。 import * as THREE from three;// 引入gltf模型加载库GLTFL…

MySQL零基础教程16—表连接进阶

复习表别名 之前已经学习过,查询的时候可以使用as来对检索的列进行重命名,这样可以让sql更加简介,增强易读性(as可以省略) 此外,使用表别名还可以支持在一条select语句中,一个表是被多次使用 …

K8s控制器Deployment详解

回顾 ReplicaSet 控制器,该控制器是用来维护集群中运行的 Pod 数量的,但是往往在实际操作的时候,我们反而不会去直接使用 RS,而是会使用更上层的控制器,比如说 Deployment。 Deployment 一个非常重要的功能就是实现了 Pod 的滚动…

rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流

1. 安装和配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…