网页聊天——测试报告——Selenium自动化测试

news2024/11/13 20:24:47

一,项目概括

1.1 项目名称

网页聊天

1.2 测试时间

2024.9

1.3 编写目的

对编写的网页聊天项目进行软件测试活动,揭示潜在问题,总结测试经验

二,测试计划


2.1 测试环境与配置

服务器:云服务器 ubuntu_22
PC机:机械师T58-V
平台:Windows 10
浏览器:Chrome、FireFox、Edge
自动化测试工具:Selenium

2.2 提取测试点

 2.3 设计测试用例

所有的测试用例绑定在这个帖子上了,需要自取

Selenium自动化执行测试用例

文件分类-- 功能进行分块

 main函数

    public static void main(String[] args) throws IOException, InterruptedException {
        noLoginTest noLogin=new noLoginTest();
        noLogin.NoLoginOpen();

        registerTest register_test=new registerTest();
        register_test.registerTest();

        LoginTest login_test=new LoginTest();
        login_test.loginTest();

        friendListTest friendList_test=new friendListTest();
        friendList_test.ListTest();

        addFriendTest addFriendTest =new addFriendTest();
        addFriendTest.addFriendTest();

        chatTest chat=new chatTest();
        chat.chatTest();

        driver.quit();
    }

Utils--所有公共模块

public class Utils {
    public static WebDriver driver;
    public static WebDriver createDriver(){//创建驱动
        if(driver!=null){
            return driver;
        }
        WebDriverManager.edgedriver().setup();//自动下载配置驱动程序
        EdgeOptions edgeOptions=new EdgeOptions();
        edgeOptions.addArguments("--allow-remote-origins=*");
        driver=new EdgeDriver(edgeOptions);//用option创建驱动
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));//隐式等待
        return driver;
    }


    public static void getScreenShot(String str) throws IOException {//截图
        SimpleDateFormat simple1=new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat simple2=new SimpleDateFormat("hhmmssSS");
        String format = simple1.format(System.currentTimeMillis());
        String format2 = simple2.format(System.currentTimeMillis());
        String fileName="./src/test/image/"+format+"/"+str+"-"+format2+".png";
        File screenshotAs = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenshotAs,new File(fileName));//将截图放到新建的文件里
    }
    public static String getTime(){//用来做测试数据
        SimpleDateFormat simple1=new SimpleDateFormat("hh:mm:ss");
        return simple1.format(System.currentTimeMillis())+"test";
    }
}

 registerTest--注册测试

    public void registerFailAll() throws IOException {
        //注册失败
        String alertTest = register("zhangsan", "123");
        assertEquals("用户名被占用!",alertTest);//断言判断

        alertTest=register("","123");
        assertEquals("用户名和密码不能为空! ",alertTest);

        alertTest=register("zhangsan","");
        assertEquals("用户名和密码不能为空! ",alertTest);

        alertTest=register("","");
        assertEquals("用户名和密码不能为空! ",alertTest);
    }
    public void registerSucAll() throws IOException {
        //注册成功
        String alertTest = register(testUserName, "123");
        assertEquals("注册成功",alertTest);

        driver.get("http://localhost:8080/login.html");
        driver.findElement(By.cssSelector("#submit2")).click();
        
        alertTest=register(testUserName+1,"123");
        assertEquals("注册成功",alertTest);

    }
    public String register(String username,String password) throws IOException {//注册
        driver.findElement(By.cssSelector("#userName")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#userName")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        getScreenShot(getClass().getName());
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());

        Alert alert = driver.switchTo().alert();
        String text = driver.switchTo().alert().getText();
        alert.accept();
        return text;


    }

loginTest--登录测试

   public void LoginFailAll() throws IOException, InterruptedException {
        //登录失败
        String alertTest = loginUtil("zhang", "123");
        assertEquals("用户名或密码错误! ",alertTest);

        alertTest=loginUtil("zhangsan","1");
        assertEquals("用户名或密码错误! ",alertTest);

        alertTest=loginUtil("zhangsan","");
        assertEquals("当前输入用户名或密码为空! ",alertTest);

        alertTest=loginUtil("","123");
        assertEquals("当前输入用户名或密码为空! ",alertTest);

        alertTest=loginUtil("","");
        assertEquals("当前输入用户名或密码为空! ",alertTest);
    }

    public void LoginSucAll() throws IOException, InterruptedException {
        //成功
        loginSucUtil("zhangsan", "123");

        loginSucUtil("wangwu","123");

        loginSucUtil("lisi","123");


    }

    public void loginSucUtil(String username,String password) throws IOException, InterruptedException {
            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("123");
            driver.findElement(By.cssSelector("#submit")).click();
            wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));
            getScreenShot(getClass().getName());//截图最好放在最后一步,不然容易卡
            driver.navigate().back();
    }

    public String loginUtil(String username,String password) throws IOException, InterruptedException {

        driver.findElement(By.cssSelector("#userName")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#userName")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        String text = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
        getScreenShot(getClass().getName());
        return text;

    }

 登录和注册的自动化效果展示

friendListTest--主页和好友列表测试

        主要检查主页点击用户是否会跳转到聊天页

        好友列表点击是否会跳到聊天页

@Slf4j
public class friendListTest extends Utils {
    public static WebDriver driver=Utils.createDriver();
    WebDriverWait wait=new WebDriverWait(driver,Duration.ofSeconds(5));

    public void ListTest() throws IOException {
        openWeb();
        ChatListUI();
        FriendListUI();
    }
    public void openWeb() throws IOException {
        driver.get("http://localhost:8080/login.html");
        driver.findElement(By.cssSelector("#userName")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#userName")).sendKeys("lisi");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));

        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button"));
        getScreenShot(getClass().getName());
        log.info("打开主页");
    }

    public void ChatListUI() throws IOException {
        wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));

        driver.findElement(By.cssSelector("#session-list"));//
        String friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).getText();

        driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).click();
        String friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();
        assertEquals(friendName,friendChat);//断言一下
        getScreenShot(getClass().getName());

         friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(2) > h3")).getText();
        driver.findElement(By.cssSelector("#session-list > li:nth-child(2) > h3")).click();
         friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();
        assertEquals(friendName,friendChat);//断言一下
        getScreenShot(getClass().getName());

         friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(3) > h3")).getText();
        driver.findElement(By.cssSelector("#session-list > li:nth-child(3) > h3")).click();
         friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();
        assertEquals(friendName,friendChat);//断言一下
        getScreenShot(getClass().getName());
        log.info("主页用户点击切换到聊天测试");

    }

    public void FriendListUI() throws IOException {//查看是否点击可以跳转
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        driver.findElement(By.cssSelector("#friend-list"));

        String friendName = driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).getText();
        driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).click();

        String friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();
        assertEquals(friendName,friendChat);//断言一下
        getScreenShot(getClass().getName());
        log.info("好友列表点击跳转测试");
    }

addFriendTest--搜索好友,发送申请,新好友聊天测试

主页加载完整

搜索好友功能测试

发送申请功能测试

收到申请测试 

同意申请,拒绝申请测试

新好友聊天测试

public class addFriendTest extends Utils {
    public static WebDriver driver=Utils.createDriver();
    public String addRequest=getTime()+"addFriend";
    WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));

    public void addFriendTest() throws IOException {
        openWeb();
        addFriendSend(registerTest.testUserName);//搜索刚注册的账号
        addFriendAccept(registerTest.testUserName);
        addFriendChat();

        addFriendSend("test");//模糊搜索
        addFriendSend("0000");
        addFriendSend("");
        addFriendSend(" ");
        addFriendSend("lisi");//搜本人
    }

    public void openWeb() throws IOException {
        driver.get("http://localhost:8080/login.html");
        driver.findElement(By.cssSelector("#userName")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#userName")).sendKeys("lisi");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));

        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button"));
        getScreenShot(getClass().getName());
        System.out.println("加好友UI");
    }

    public void addFriendSend(String user) throws IOException {
        //搜索刚刚注册的账号
        driver.findElement(By.cssSelector("#userNmae")).clear();
        driver.findElement(By.cssSelector("#userNmae")).sendKeys(user);
        driver.findElement(By.cssSelector("#sumbit")).click();
//        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div"));

        try{
            //查看搜到的用户是否正确
//            System.out.println(registerTest.testUserName+"查看搜到的用户是否正确");
//        assertEquals(register_test.testStr,driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/div[2]/div/span")).getText());
            driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div>input")).sendKeys(addRequest);
            driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:nth-child(1) > button")).click();

            assertEquals(driver.switchTo().alert().getText(),"添加成功");
            driver.switchTo().alert().accept();
            getScreenShot(getClass().getName());
            System.out.println("添加好友请求发送成功");
        }catch (Exception e){
            System.out.println("没找到好友:"+user);
        }
    }
    public void addFriendAccept(String user) throws IOException {

        //切号
        //登录聊天对象账号查看短信发送情况
        driver.get("http://localhost:8080/login.html");
        driver.findElement(By.cssSelector("#userName")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
//        System.out.println(receiver+" login");
        driver.findElement(By.cssSelector("#userName")).sendKeys(user);
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        System.out.println("切号查看请求是否正确");
        //提示好友申请发来了
        driver.findElement(By.cssSelector("#session-list > li"));
        //发送申请的对象是对的
        assertEquals("lisi",driver.findElement(By.cssSelector("#session-list > li > h3")).getText());
        //发送申请的话是对的,因为展示的是部分内容所以不能断言
//        assertEquals(addRequest,driver.findElement(By.cssSelector("#session-list > li > p")).getText());
        //接受申请
        driver.findElement(By.cssSelector("#session-list > li > button:nth-child(3)")).click();
        //添加成功提示正确
        assertEquals("添加成功",driver.switchTo().alert().getText());
        driver.switchTo().alert().accept();
        System.out.println("添加好友成功");
        getScreenShot(getClass().getName());
    }

    public void addFriendChat() throws IOException {
        System.out.println("发短信测试");
        //测试新好友发短信
        //找到列表里的那个
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        //可以Xpath选择好友列表页的指定对象
        driver.findElement(By.xpath("//ul[@id='friend-list']/li[h4[text()='"+"lisi"+"']]")).click();
        //点击发短信
        String testChat = getTime();
        //点击聊天输入框
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).click();
        //发送方
        String sender = driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();
        //接收方
        String receiver = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();

        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys(testChat);
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#session-list > li:first-child")).click();

        String checkTest = driver.findElement(By.cssSelector("div.message-show div.message:last-child div.box p")).getText();
        assertEquals(testChat,checkTest);
        getScreenShot(getClass().getName());

    }

chat---给好友发短信和接收短信的功能测试

测发送不同的内容

测试能否接收到

public class chatTest extends Utils {
    WebDriver driver=Utils.createDriver();
    WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));
    
    public void chatTest() throws IOException {
        driver.get("http://localhost:8080/login.html");
        driver.findElement(By.cssSelector("#userName")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#userName")).sendKeys(testUserName);//发送方
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));
        //发短信功能,选择最上面的聊天对象,编辑,发送,刷新(必须,加载新短信)重新选择最上面的聊天对象,
        // 选择最下面最新的短信,注意父类包含多个子类情况下,可以问ai
//        String testChat = getTime();
//        System.out.println(testChat);
//        System.out.println(testChat);
        //点击好友列表第一位
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).click();

        chat("哈哈哈哈");
        chat("hhhhha");
        chat("111112");
        chat("!@#$%^&*蛤ha");
        String longStr ="在思想上,我具有较高的政治觉悟,积极向党组织靠拢,始终保持着进取之心,以坚定的信念追求进步。 在学习上,我态度严谨认真,勤奋刻苦。凭借不懈的努力,连续两年荣获国家励志奖学金,并且在英语赛事中多次获奖,扎实的专业功底让我能够自信地应对各种学业挑战。";
        String receiver=chat(longStr);

        driver.navigate().back();//退出登录
        checkMessage(longStr,receiver);//检查短信是否收到
    }


    public String chat(String message) throws IOException {//发送短信并返回接受方
        driver.findElement(By.cssSelector("#session-list > li")).click();//找到好友列表第一个,点击聊天并记录
        String receiver = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();
        //编辑短信发送,并返回接受短信的用户
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys(message);
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
        log.info("发送短信并刷新");
        return receiver;
    }
    public void checkMessage(String message,String receiver) throws IOException {//登录接收方账号,检查短信是否正确
        driver.findElement(By.cssSelector("#userName")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#userName")).sendKeys(receiver);
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        //点击好友列表
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        //可以Xpath选择好友列表页的指定对象
        driver.findElement(By.xpath("//ul[@id='friend-list']/li[h4[text()='"+testUserName+"']]")).click();

        //报错无效选择器,前端找到对应的元素后再次查找发现是元素不可交互导致的
        log.info("切换账号查看短信是否收到");
        String test2 = driver.findElement(By.cssSelector("div.message-show div.message:last-child div.box p")).getText();//查看短信
        assertEquals(message,test2);//断言一下

        getScreenShot(getClass().getName());
        log.info("短信成功收到");
    }

noLoginTest--没有登录测试

查看没有登录直接访问是否会强制返回 

public class noLoginTest {

    public void NoLoginOpen() throws IOException {
        WebDriver driver= Utils.createDriver();
        driver.get("http://localhost:8080/client.html");
        WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));
        wait.until(ExpectedConditions.alertIsPresent());
        assertEquals("当前用户未登录!",driver.switchTo().alert().getText());
        driver.switchTo().alert().accept();
        getScreenShot(getClass().getName());
    }
}

整个自动化测试展示

网页自动化测试

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

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

相关文章

十六、电压比较电路

电压比较电路 1、电压比较器的作用和工作过程 2、比较器的输入-输出特性曲线, 3、如何构成迟滞比较器。

Transformer模型-7- Decoder

概述 Decoder也是N6层堆叠的结构,每层被分3层: 两个注意力层和前馈网络层,同Encoder一样在主层后都加有Add&Norm,负责残差连接和归一化操作。 Encoder与Decoder有三大主要的不同: 第一层 Masked Multi-Head Attention: 采用…

SpringCloud Alibaba 工程搭建详细教程

使用 Spring Cloud Alibaba 的主要目的是解决单体应用的痛点,并利用微服务架构的优势来构建高扩展性、可靠的分布式系统。 1. 单体应用的痛点 单体应用虽然在小型项目中优势明显,但随着业务复杂性增加,逐渐暴露出许多问题: 代码…

Python | Leetcode Python题解之第420题强密码检验器

题目: 题解: class Solution:def strongPasswordChecker(self, password: str) -> int:n len(password)has_lower has_upper has_digit Falsefor ch in password:if ch.islower():has_lower Trueelif ch.isupper():has_upper Trueelif ch.isdi…

Datawhale X 南瓜书 task02学习笔记

算法原理引入 样本点通常应该在模型的2侧,原因:在实际中,因为某种不可控的因素,测出来的样本点肯定是有误差的。如果样本数据点都在模型上,则说明在建立模型时,把误差也考虑进去了,这就是我们说…

Linux使用常见问题指南

普通用户sudo权限问题 我在普通用户Sun下,编写了一个.cc文件,然后用sudo权限安装gcc/g去运行该文件,却提示我如下: 原因 当前的用户没有加入到sudo的配置文件里 #切换到root用户 su #编辑配置文件 vim /etc/sudoers #增加配置, 在打开的配置文件中,找到root ALL(A…

波分技术基础 -- FEC

信号在传输过程中,不可避免的会出现劣化、误码,FEC (Forward error correction) 技术确保通信系统在噪声和其他损伤的影响下,依然能够实现无错误传输。 应用场景:长途密集波分系统(DWDM)实现方式&#xff…

AI赋能篇:万物皆可播,AI视频直播新趋势,轻松打造24h不间断开播!

AI赋能篇:万物皆可播,AI视频直播新趋势,轻松打造24h不间断开播! 在数字化浪潮的推动下,人工智能(AI)正以前所未有的速度渗透到我们生活的每一个角落,其中,AI视频直播作为…

基于vue框架的储蓄卡业务管理系统的设计与实现28g6t(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:客户,银行账户,存款记录,取款记录,转账记录,经理,柜员,贷款产品,贷款申请,放款信息,还款信息,离职申请,通知公告,用户反馈,开户申请 开题报告内容 基于Vue框架的储蓄卡业务管理系统设计与实现开题报告 一、项目背景与意义 随着金融科…

智慧园区:解析集成运维的未来之路

随着科技的进步和社会的发展,智慧园区已经成为了城市建设的重要方向。作为一个集信息技术、通信技术、能源技术等多种技术于一体的综合性项目,智慧园区的建设具有极高的科技含量和产业复杂度。而在智慧园区的运维管理中,更是需要集成化的处理…

unity3d入门教程八-飞机大战

unity3d入门教程八-飞机大战 19.2竖屏设置19.3主控脚本19.4制作子弹19.5制作飞机19.6制作怪物19.7击中目标19.8随机生成怪物19.9预制体怪物随机更换头像19.10怪物相关优化19.11游戏背景19.12游戏最终优化一、 HP显示二、怪物预制体三、分值显示四、背景音乐 19.2竖屏设置 切换到…

信息安全工程师(8)网络新安全目标与功能

前言 网络新安全目标与功能在当前的互联网环境中显得尤为重要,它们不仅反映了网络安全领域的最新发展趋势,也体现了对网络信息系统保护的不断加强。 一、网络新安全目标 全面防护与动态应对: 目标:建立多层次、全方位的网络安全防…

安装黑群晖系统,并使用NAS公网助手访问教程(好文)

由于正版群晖系统的价格不菲,对于预算有限的用户来说,安装黑群晖系统成为了一个不错的选择(如果您预算充足,建议选择白群晖)。如您对宅系科技比较感兴趣,欢迎查看本文,将详细介绍如何安装黑群晖…

PAT甲级-1083 List Grades

题目 题目大意 学生有姓名,编号和分数,给定分数区间,输出在这个区间内的人名和编号。输出顺序按照分数从高到低,没有重复的分数。 思路 非常简单的结构体排序题,定义一个结构体,按照题目条件sort就可以了…

2--SpringBoot项目中员工管理、分类管理 详解(一)

目录 员工管理 新增员工 需求分析和设计 代码开发 实体类 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 通过接口文档测试 代码完善 问题一 解决 问题二 解决 员工分页查询 需求分析和设计 代码开发 设计DTO类 封装PageResult Controlle…

微服务架构---Ribbon\Feign

Ribbon(负载均衡) Ribbon概述 在 SpringCloud 中, Nacos⼀般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Nacos中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。 Ribbon作…

Arthas vmoption(查看和修改 JVM里诊断相关的option)

文章目录 二、命令列表2.1 jvm相关命令2.1.6 vmoption(查看和修改 JVM里诊断相关的option)举例1:vmoption 查看所有的选项举例2:vmoption MinHeapFreeRatio 查看指定的选项 二、命令列表 2.1 jvm相关命令 2.1.6 vmoption&#x…

精选写作技巧!分享4款ai写毕业论文可以写出公式表格的软件

在撰写毕业论文时,AI写作工具可以极大地提高效率和质量。以下是四款值得推荐的AI软件,它们不仅能够帮助生成高质量的论文初稿,还能处理公式和表格等复杂内容。 传送门:https://www.aipaperpass.com?piclLGw 千笔-AIPassPaper是一…

基于SpringBoot+Vue的私人牙科诊所管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

大模型学习记录之Agent部署

首先,需要明确大模型的概念,通过百度的文心一言的结果,我们得到如下概念: 大模型的特点 大模型(Large Models) 在人工智能和机器学习领域,特别是深度学习领域,指的是那些具有大量参…