【连珠云弈】网页五子棋版项目测试报告

news2025/3/8 20:32:16

目录

一、项目背景

1.1、项目起源

1.2、市场需求

1.3、项目目标

二、项目功能

2.1 用户管理功能

2.2 游戏对战功能

三、测试报告

3.1.功能测试

​编辑

3.1.1注册功能测试

解决bug:

测试总结:

3.1.2登录功能测试

测试总结:

3.1.3.匹配和落子测试

3.2.界面测试

bug:

测试总结

3.3.性能测试​编辑

总体测试框架:

3.3.1.利用BeanShell解决乱码问题

3.3.2.添加保存cookie信息

3.3.3.添加CSV格式的用户信息

3.3.4.添加同步定时器

3.3.5.创建梯度压测线程组

3.3.6.生成测试报告

TIP:

3.4.自动化测试

3.4.1.测试框架:

3.4.2.utils工具类的实现

3.4.3.注册界面自动化测试

3.4.4.登录界面自动化测试

3.4.5.游戏大厅界面自动化测试

3.4.6.集成测试:

3.4.7.测试总结:

自动化测试盲点难点解决方法:

1.注意弹窗只能是用强制等待或者是显示等待!、

2.隐式等待为什么要写在utils文件中,不能写在后面的文件里面吗

四.总结:

一、项目背景

1.1、项目起源

随着互联网的飞速发展和普及,网络娱乐方式日益多样化。五子棋作为一种传统而经典的棋类游戏,深受广大棋迷的喜爱。然而,传统的五子棋游戏方式往往受限于地点和时间,无法满足人们随时随地进行游戏的需求。因此,开发一款网页版五子棋项目,旨在打破这种限制,让棋迷们能够随时随地通过网络享受五子棋的乐趣。

1.2、市场需求

  1. 便捷性需求:现代人生活节奏加快,对于娱乐方式的需求也更加注重便捷性。网页版五子棋无需下载和安装,只需打开浏览器即可进行游戏,极大地方便了用户。

  2. 社交性需求:网络游戏的社交属性日益凸显,玩家们不仅追求游戏本身的乐趣,还希望在游戏中结交新朋友。网页版五子棋可以提供在线对战功能,满足玩家的社交需求。

  3. 普及性需求:五子棋作为一种传统文化,其普及和传承具有重要意义。网页版五子棋项目的开发,有助于将这一传统文化以更现代化的方式呈现给更多人,推动五子棋的普及和发展。

1.3、项目目标

  1. 开发一款易用的网页版五子棋游戏:游戏界面简洁明了,操作方便快捷,让玩家能够轻松上手并享受游戏乐趣。

  2. 实现在线对战功能:支持玩家在线匹配对手,进行实时对战,增强游戏的互动性和趣味性。

  3. 优化游戏性能和用户体验:通过不断优化游戏算法和界面设计,提高游戏的运行速度和稳定性,为玩家提供更加流畅、舒适的游戏体验。

二、项目功能

2.1 用户管理功能

用户注册与登录:用户可以通过注册页面注册账号,填写用户名、密码等信息进行注册,注册成功后可在登录页面输入账号密码登录。

用户信息管理:系统能够记录用户的相关信息,如用户id、用户名、密码、天梯分数、排位总场次和胜场总场次等,并提供修改密码、查看个人信息等功能。

用户状态管理:通过session管理模块实现用户登录状态的维护,使用户在游戏过程中保持登录状态,直到用户主动退出或超时自动退出。

2.2 游戏对战功能

匹配对战:系统根据用户的天梯分数等信息进行匹配,为玩家找到合适的对手,进入游戏房间进行对战。

实时对战:在游戏房间内,玩家可以进行实时的五子棋对战,双方轮流落子,通过点击棋盘上的空位放置棋子。

胜负判断:系统能够实时检测当前落子位置在横、纵、斜四个方向是否有连续五个相同的棋子,以判断胜负。

三、测试报告

全部的测试用例:

3.1.功能测试

3.1.1注册功能测试

注册已经存在的用户:

与预期结果一致,注册失败!并显示用户名以及被占用。

输入的账号或密码超出规定的长度范围:

drop database if exists gobang;
create database if not exists gobang;
use gobang;
create table if not exists user(
    id int primary key auto_increment,
    username varchar(32) unique key not null,
    password varchar(128) not null,
    score int,
    total_count int,
    win_count int
);

根据MySQL定义的数据表中账号的最多长度是32位,而密码是128位,当我输入的账号超出32位时,系统就会报错,与预期结果一致!

异常注册的情况:

账号为空时:

跟预期结果一致,注册失败!

密码为空时:

我们发现当密码为空时居然注册成功了!这明显跟我们预期不符合的,并且我们之前在定义数据表的时候,password明显是有not null属性的,这是为什么呢?!

账号密码都为空时

我勒个豆,竟然也注册成功了!但是我们已经注册账号为空的时候,下一次再注册账号为空会有用户名已经存在的现象。

解决bug:


问题是在于前端给后端传的数据是 空字符串, jsonvalue的 isNull函数判断有点问题。目前是把条件修改了,判断前端传递过来的是不是一个空串。  这个是后端在处理的时候,提前就要判断处理掉的。

有一个疑问是密码为什么是空,数据库还能插入成功。  

是因为前端给后端的是一个空字符串, 并且密码经过md5加密后,并不为空,所以插入是没问题的。  
其次是name为何不写,也能注册成功。是因为不写,向后端传的是空字符串,而不是null

所以,第一个要解决的是,我们用户不写用户名和密码的时候,后端要及时能够检测出来。所以修改了判断条件,得以解决。  第二个疑问是为何不写,sql语句还能执行成功,是由于 空字符串 和 null是有区别的!

当我们在数据库中插入空字符串的账号和密码的时候,插入成功!这也就验证了空字符串和null的区别,也解释了之前账号和密码为空的时候能注册成功的原因。

当我们更改判断条件之后,再来用空账号,密码注册一下(此时已经将数据库中的空账号的用户删除了)

此时,就不能用空账号进行注册了!bug解决完毕!

正常注册:

发现成功跳转到登录页面

与预期结果一致!

测试总结:

通过对注册页面的界面测试和功能测试,得出以下结论:

注册页面的背景图片显示正常,页面中的文字样式,和注册框均能正常显示。除此之外,注册框中的字样、输入框和“提交”按钮也能够正常显示。

正常注册情况,在注册一个并没有注册过的用户名时,可以正常注册成功,并且页面会提示用户“注册成功!
当注册已经注册过的用户时,页面会显示用户名被占用,让用户重新注册!

但是当密码为空时,用户也注册成功了!发现了这个bug。

3.1.2登录功能测试

正确的用户名和密码登录:

登录成功,与预期结果一致!并且账号和密码都能复制粘贴,密码也是隐藏了

异常的用户名和密码登录:

界面会显示用户名密码错误,与预期结果一致!

当跳过登录界面,直接进入游戏房间

预期:找不到用户信息,请重新登录,并跳转到登录界面

测试总结:

通过对登录页面的界面测试和功能测试,得出以下结论:

登录页面的背景图片显示正常,页面中的文字样式,和登录框均能正常显示。

建议:

但当登录失败时,可以具体向用户展示到底是账号错误还是密码错误,便于用户修改

3.1.3.匹配和落子测试

这里匹配和落子测试和界面一起测试

3.2.界面测试

bug:

当用户名字很长的时候 界面就会出现这种重回覆盖的情况

解决措施:
用户名过长最少有两种方式,第一种就是直接截取,比如你的用户名有19位,我只展示10位就行了。剩下的不展示
第二种就是,19位,只展示一部分,当鼠标放上去之后,展示完整的用户名

这里实现了第二种
 

测试总结

通过测试游戏大厅页面的界面显示和匹配功能,得出以下结论:

游戏大厅页面的左上角“五子棋对战”字样正常显示,背景图片正常显示

玩家信息(用户名、分数、比赛场次、获胜场次)正常显示,

匹配功能正常,两个同级别玩家点击匹配按钮后,会匹配在一起。

并且当有一方五星连珠时,界面会显示游戏胜利/失败

通过对游戏大厅页面的界面测试和功能测试,并未在游戏大厅页面发现bug。

3.3.性能测试

下面我来使用 JMeter 对五子棋项目的登录接口和获取用户信息接口进行简单的性能测试,下面就来介绍五子棋项目性能测试的一个测试流程。

总体测试框架:

3.3.1.利用BeanShell解决乱码问题

3.3.2.添加保存cookie信息

因为用户在登录之后,我们需要从info接口读取消息,所以需要自动保存用户登录的cookie信息

这里直接选择standard即可

3.3.3.添加CSV格式的用户信息

我们为了更加真实的模拟用户登录场景,我们在CSV文件中添加了用户信息以供模拟真实的用户登录场景。

下面的是配置,用username和password表示账号密码,后续直接在body中引用即可。

如下面的登录接口就调用了CSV文件中的账号和密码。

3.3.4.添加同步定时器

我们为了保证线程是并发执行的,我们添加了同步定时器。

3.3.5.创建梯度压测线程组

这里我们创建一个梯度压测线程组(Stepping Thread Group),来慢慢增大我们对这两个接口的并发请求的数量,以达到性能测试的目的。

3.3.6.生成测试报告

我们发现有一小部分测试用例出现的bug,进行具体分析:

发现都是网络超时,这跟网络情况相关,或者我的服务器稳定性比较差~

TIP:

JMeter从CSV读取数据并不只适用于数据存放在URL参数里面。

  1. 不仅限于URL参数:虽然CSV数据常用于URL参数化,但JMeter也支持将CSV中的数据用于其他类型的请求参数,如POST请求的body、请求头等。

我们现在做的就是将数据存放在body中。

3.4.自动化测试

3.4.1.测试框架:

在common这个软件包中主要存放的是utils这个工具类,这个工具类里面具体实现了创建浏览器对象和截图工具,避免每次测试都需要写一份工具,避免了代码的冗余。

在images这个文件夹中存放的是每次截图生成的图片,并且以天为单位生成小的文件夹,每份文件夹又有用时间进行格式化和生成该图片的类名。

在tests这个软件包中存放的是各个页面的自动化测试代码,并且RunTest文件进行总体的一个测试。

3.4.2.utils工具类的实现

import os
import sys
import datetime

from selenium import webdriver
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager


#创建一个浏览器对象

class Driver:
    driver = ""
    def __init__(self):
        options = webdriver.ChromeOptions()
        self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)

    def getScreeShot(self):
        # 创建屏幕截图
        # 图片文件名称:./2024-05-08-173456.png
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")

        # 判断dirname文件夹是否已经存在,若不存在则创建文件夹
        # ../images/2024-05-08
        if not os.path.exists("../images/" + dirname):
            os.mkdir("../images/" + dirname)
        # 2024-05-08-173456.png
        # 图片路径:../images/调用方法-2024-05-08/2024-05-08-173456.png
        # 图片路径:../images/LoginSucTest-2024-05-08/2024-05-08-173456.png
        # 图片路径:../images/LoginFailTest-2024-05-08/2024-05-08-173456.png
        filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime(
            "%Y-%m-%d-%H%M%S") + ".png"
        self.driver.save_screenshot("../images/" + dirname + "/" + filename)
BlogDriver = Driver()

其中截图的工具类别出心裁:

  1. sys._getframe().f_back.f_code.co_name
    通过调用栈获取调用该代码的函数名,作为文件名的一部分。这样可以动态地根据函数名为截图命名。

  2. datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")
    获取当前时间,并将其格式化为“年-月-日-时分秒”的形式,作为文件名中的时间戳部分。

  3. filename
    将函数名和时间戳拼接成一个完整的文件名,后缀为“.png”。

  4. self.driver.save_screenshot("../images/" + dirname + "/" + filename)
    使用 Selenium 的 save_screenshot 方法,将当前浏览器窗口的截图保存到指定路径中。路径由 ../images/dirname(某个子目录名)以及生成的文件名组成。

3.4.3.注册界面自动化测试

代码:

#测试注册界面
import time
from distutils.command.register import register

from selenium.webdriver.common.by import By

from common.Utils import BlogDriver


class GobangRegister:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://123.249.125.60:8085/register.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)
    #成功注册的测试用例
    def RegisterSucTest(self):
        self.driver.find_element(By.CSS_SELECTOR,"#user_name").send_keys("lisi9")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        #强制等待
        time.sleep(3)
        #此时需要点击弹窗里面的确定,才能跳转页面
        alert = self.driver.switch_to.alert
        alert.accept()
        #能够找到登录界面中的登录二字,说明注册成功,否则注册失败
        self.driver.find_element(By.CSS_SELECTOR,"body > div.login-container > div > h3")
    #异常注册的测试用例
    def RegisterFailTest(self):
        #若连续多次的send_keys会出现关键词的拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR,"#user_name").clear()
        self.driver.find_element(By.CSS_SELECTOR,"#password").clear()
        self.driver.find_element(By.CSS_SELECTOR,"#user_name").send_keys("lisi")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        time.sleep(3)
        #self.driver.quit()

_register = GobangRegister()
_register.RegisterSucTest()
#_register.RegisterFailTest()

3.4.4.登录界面自动化测试

#测试登录页面
import time

from common.Utils import BlogDriver
from selenium.webdriver.common.by import By


class GobangLogin:
    url = ''
    driver = ''
    def __init__(self):
        self.url = "http://123.249.125.60:8085/login.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)

    #登录失败的测试用例
    def LoginFailTest(self):
        #隐式等待
        #self.driver.implicitly_wait(3)
        self.driver.find_element(By.CSS_SELECTOR,'#user_name').send_keys('lisi8')
        self.driver.find_element(By.CSS_SELECTOR,'#password').send_keys('123456')
        self.driver.find_element(By.CSS_SELECTOR,'#submit').click()
        time.sleep(3)
        #此时需要点击弹窗里面的确定,才能跳转页面
        alert = self.driver.switch_to.alert
        alert.accept()
        time.sleep(3)

    #成功登录的测试用例
    def LoginSucTest(self):
        self.driver.find_element(By.CSS_SELECTOR,'#user_name').send_keys('lisi')
        self.driver.find_element(By.CSS_SELECTOR,'#password').send_keys('123456')
        self.driver.find_element(By.CSS_SELECTOR,'#submit').click()

        time.sleep(3)
        #此时需要点击弹窗里面的确定,才能跳转页面
        alert = self.driver.switch_to.alert
        alert.accept()
        time.sleep(3)

        # self.driver.find_element(By.CSS_SELECTOR,'#match-button')
        # #截图
        # BlogDriver.getScreeShot()
        # #self.driver.quit()
        # #强制等待
        # time.sleep(3)
        # #此时需要点击弹窗里面的确定,才能跳转页面
        # alert = self.driver.switch_to.alert
        # alert.accept()
        # time.sleep(3)
        #time.sleep(3)
        #此时需要点击弹窗里面的确定,才能跳转页面
        alert = self.driver.switch_to.alert
        alert.accept()
        time.sleep(3)

# _login = GobangLogin()
# # _login.LoginFailTest()
# _login.LoginSucTest()

3.4.5.游戏大厅界面自动化测试

#测试游戏大厅页面
import time

from common.Utils import BlogDriver
from selenium.webdriver.common.by import By

class GobangHall:
    url = ' '
    driver = ' '
    def __init__(self):
        self.url = "http://123.249.125.60:8085/game_hall.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)
    #测试游戏大厅匹配和停止匹配按钮
    def HallTest(self):
        time.sleep(3)
        #此时需要点击弹窗里面的确定,才能跳转页面
        alert = self.driver.switch_to.alert
        alert.accept()
        #点击开始匹配
        self.driver.find_element(By.CSS_SELECTOR,'#match-button').click()
        #点击停止匹配
        self.driver.find_element(By.CSS_SELECTOR,'#match-button').click()
        time.sleep(3)
        #重新匹配
        self.driver.find_element(By.CSS_SELECTOR,'#match-button').click()
        #截图
        BlogDriver.getScreeShot()

3.4.6.集成测试:

#from tests import GobangRegister
from tests import GobangLogin
from tests import GobangHall
from common.Utils import BlogDriver

if __name__ == "__main__":
    #游戏注册页面
    #GobangRegister.GobangRegister().RegisterSucTest()
    #GobangLogin.GobangLogin().LoginFailTest()
    #登陆成功之后就可以调用博客首页测试首页的用例(登陆状态)
    #最终一定是登录状态
    GobangLogin.GobangLogin().LoginSucTest()
    #游戏大厅界面
    GobangHall.GobangHall().HallTest()
    #指定浏览器的退出
    BlogDriver.driver.quit()

3.4.7.测试总结:

 

如上图运行过程所示,我们的自动化测试用例全部通过,当我们执行失败的时候需要截图进行纠错。

自动化测试盲点难点解决方法:

1.注意弹窗只能是用强制等待或者是显示等待!、

为什么?

在Selenium自动化测试中,当遇到弹窗时,通常使用的等待方式主要是显式等待。这是因为弹窗的出现往往是由某些用户操作或页面事件触发的,而这些事件可能不是立即发生的,因此需要等待弹窗确实出现后再进行相应的操作。

注意在前面文件中不需要我们自己退出,我们只用在最后的RunTest一次退出即可,不然前面程序已经退出,将会运行失败

 

2.隐式等待为什么要写在utils文件中,不能写在后面的文件里面吗

解答:

#点击完成之后出现页面的跳转,页面跳转需要加载时间,可能会出现代码执行的速度比页面渲染的速度要快,导致元素查找不到,因此可以添加等待

#添加隐式等待和显示等待都可以,任选择一个

#隐式等待:创建浏览器对象之后就可以加上,因为隐式等待的作用域在driver整个生命周期

#显示等待:可以作用在当前代码中

四.总结:

我们一共进行了功能测试、自动化测试以及性能测试这三种测试方式,在功能测试阶段,我们着重点是测试玩家双方进行五子棋对弈时的过程;在自动化测试阶段,我们主要测试各个页面的相关信息,着重测试了登录与注册的功能;在性能测试阶段,我们着重测试了用户登录与获取用户信息的接口性能,并生成了性能测试报告。

在这期间,发现了不少bug,例如用户注册时,没有账号和密码也能注册成功;当用户的名称过长时,会对前端界面按钮造成覆盖等等。但最终都解决了,不得不说,测试真的很有意思~~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::colorChange 是 OpenCV 中用于调整图像颜色的函数。它允许你通过乘以不同的系数来独立地改变输入图像中红色、绿色和蓝色通道的强度&#xf…

AI视频领域的DeepSeek—阿里万相2.1图生视频

让我们一同深入探索万相 2.1 ,本文不仅介绍其文生图和文生视频的使用秘籍,还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果(我录制的GIF动图) 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…

用Python分割并高效处理PDF大文件

在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

RabbitMQ知识点

1.为什么需要消息队列? RabbitMQ体系结构 操作001:RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management ​ # -d 参数:后台运行 Docker 容器 # --name 参数:设置容器名称 # -p 参数:映射端口号&…

2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>int reverse( int number );int main…

力扣132. 分割回文串 II

力扣132. 分割回文串 II 题目 题目解析及思路 题目要求返回将s切割成若干回文串的最少切割次数 对于子串s[j...i]&#xff0c;若为回文串&#xff0c;则问题变为求s[0...j]的最少切割次数 因此可以考虑动态规划 对于问题s[j...i]是否为回文串&#xff0c;若s[i] s[j]则问…

调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目录 调研&#xff1a;如何实现智能分析助手&#xff08;Agent&#xff09;&#xff08;AutoCoder、FastGPT、AutoGen、DataCopilot&#xff09;一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder&#xff08;知识库变体&#xff09;4.2 FastGPT&#xff08;…

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

mysql进阶(三)

MySQL架构和存储引擎 1. MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰&#xff1a; 2. 连接层 …

【MYSQL数据库异常处理】执行SQL语句报超时异常

MYSQL执行SQL语句异常&#xff1a;The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 这个错误表明 MySQL 服务器与 JDBC 连接之间的通信超时了。通常由…

深入理解三色标记、CMS、G1垃圾回收器

三色标记算法 简介 三色标记算法是一种常见的垃圾收集的标记算法&#xff0c;属于根可达算法的一个分支&#xff0c;垃圾收集器CMS&#xff0c;G1在标记垃圾过程中就使用该算法 三色标记法&#xff08;Tri-color Marking&#xff09;是垃圾回收中用于并发标记存活对象的核心算…

60页PDF | 四川电信数据湖及数据中台实施方案!(附下载)

一、前言 这份报告是关于四川电信数据湖与数据中台实施方案的详细规划。报告从数据驱动、事件管理、数据湖构建、数据资产管理和数据治理等多个方面展开&#xff0c;介绍了如何通过数据湖与数据中台的建设&#xff0c;实现数据的高效采集、存储、分析与共享&#xff0c;提升数…

短分享-Flink图构建

一、背景 通过简单的书写map、union、keyby等代码&#xff0c;Flink便能构建起一个庞大的分布式计算任务&#xff0c;Flink如何实现的这个酷炫功能呢&#xff1f;我们本次分享Flink做的第一步&#xff0c;将代码解析构建成图 源码基于Flink 2.10&#xff0c;书籍参考《Flink核…

java常见的几种并发安全问题及解决方案

项目场景&#xff1a; 并发的应用场景&#xff0c;在开发过程会经常遇到。 例如&#xff1a;服务应用启动后&#xff0c;需要简单统计接口的总访问量&#xff1b;实时更新订单状态&#xff0c;成交总额。 问题描述&#xff1a; 比如统计接口访问次数&#xff0c;如下的实现&a…

【mysql系】mysql启动异常Can‘t create test file localhost.lower-test

1.查看通过下面命令获取对应mysql配置文件 whereis my.cnf 2.查看日志文件 下面这里是对应的错误日志 2025-03-03T06:33:56.402057Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see …

如何使用 LLM 生成的术语自动在搜索应用程序上构建 autocomplete 功能

作者&#xff1a;来自 Elastic Michael Supangkat 了解如何在 Elastic Cloud 中&#xff0c;通过使用 LLM 生成的词汇&#xff0c;为搜索应用增强自动补全功能&#xff0c;实现更智能、更动态的搜索建议。 自动补全是搜索应用中的一项关键功能&#xff0c;它通过在用户输入时实…

vscode离线配置远程服务器

目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器&#xff0c;并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port&#xff08;vscode报错解决方法&#xff09;-C…

MinIO 容器化快速部署指南

MinIO 容器化快速部署指南 一、快速开始 # 创建网络&#xff08;需提前执行&#xff09; docker network create srebro#创建工作目录 mkdir -p /home/application/Middleware/minio/# 启动服务 docker-compose up -d二、配置说明 docker-compose.yaml 结构 services:minio…

K8S学习之基础十四:k8s中Deployment控制器概述

Deployment控制器概述&#xff1a; Deployment控制器是k8s中最常用的资源对象&#xff0c;为Replicaset和Pod创建提供了一种声明式的定义方法&#xff0c;在Deployment对象中描述一个期望的状态&#xff0c;Deployment控制器就会按照一定的控制速率把实际状态改成期望状态&…

记录Linux安装mysql8

1.mysql8安装 ​​​​​​​yum安装mysql8.0版本_yum 安装mysql8-CSDN博客文章浏览阅读833次&#xff0c;点赞10次&#xff0c;收藏9次。yum安装mysql8.0版本,如果系统中已经安装了旧版本的 MySQL 或者 mariadb&#xff0c;需要先卸载._yum 安装mysql8https://blog.csdn.net/…