云聊天项目测试

前言

以下将对云聊天项目编写测试用例以及主要功能的自动化测试。

1. 测试用例的编写

请添加图片描述

2. 自动化测试

以下进行部分自动化测试用例的执行,检验项目功能是否符合预期。

2.1 登录功能测试

测试代码: 输入非法用户名或密码逻辑相似,不重复描述。

 //输入正确用户名和密码测试登录功能
    @ParameterizedTest
    @CsvSource({"admin,123456"})
    @Order(1)
    public void loginNormalTest(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();

        sleep(3000);
        //点击弹窗确定
        Alert alert = driver.switchTo().alert();
        //测试弹窗提示信息是否正确
        String alertText = alert.getText();
        String expect = "登录成功!";
        Assertions.assertEquals(expect, alertText);
        alert.accept();
        //测试是否跳转到主界面
        sleep(5000);
        String url = "http://124.221.76.124:59091/client2.html";
        Assertions.assertEquals(url,driver.getCurrentUrl());

        // 校验当前登录的用户是不是admin,如果是测试通过,否则测试不通过
        String user_name = driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(username, user_name);
        sleep(5000);
        
    }

预期效果: 输入正确的用户名和密码弹窗提示登陆成功,点击登录成功跳转到主界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实际效果: 页面正确跳转,与预期结果相符。

2.2 注册功能测试

测试代码:

 //注册功能测试
    @ParameterizedTest
    @CsvSource({"test1,123456"})
    @Order(1)
    public void rigisterTest(String username,String password) throws InterruptedException {
        driver.get("http://124.221.76.124:59091/register.html");
        //先清除用户名和密码框
        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();

        sleep(5000);
        //点击弹窗确定
        Alert alert = driver.switchTo().alert();
        //测试弹窗提示信息是否正确
        String alertText = alert.getText();
        String expect = "注册成功是否跳转登陆页面?";
        Assertions.assertEquals(expect, alertText);
        alert.accept();
        //测试是否跳转到主界面
        sleep(5000);
        String url = "http://124.221.76.124:59091/login.html";
        Assertions.assertEquals(url,driver.getCurrentUrl());
    }

预期效果: 输入不存在的用户名和密码弹窗提示注册成功!是否跳转登录页面,点击确定成功跳转到登录页面。

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

实际效果: 页面正确跳转,与预期结果相符。

2.3 主界面测试

2.3.1 用户信息显示

测试代码:

  * 测试登录成功之后主界面用户信息是否正确
     */
    @Test
    public void UserInfoTest() throws InterruptedException {
        sleep(3000);
        String excepted = "admin";
        String actual = driver.findElement(By.xpath("/html/body/div[3]/div/div[1]/div[3]")).getText();
        Assertions.assertEquals(excepted,actual);
    }

预期效果: 当前用户信息是登录用户的信息。
在这里插入图片描述
在这里插入图片描述

实际效果: 用户信息匹配,与预期结果相符。

2.3.2 搜索框功能

预期效果: 输入用户名,点击搜索按钮右侧显示所有与用户名匹配的用户。

 /**
     * 测试搜索框功能
     */
    @ParameterizedTest
    @CsvSource({"zhangsan"})
    public void searchTest(String input) throws InterruptedException {
        sleep(3000);
        //输入搜索内容
        driver.findElement(By.cssSelector("#searchInput")).sendKeys(input);
        sleep(3000);
        //点击搜索
        driver.findElement(By.cssSelector("#searchButton")).click();
        sleep(3000);
        //检查右侧显示是否正确
        String excepted ="zhangsan";
        String actual = driver.findElement(By.cssSelector("#Users > li > div.nameDiv")).getText();
        Assertions.assertEquals(excepted,actual);

    }

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

实际效果: 显示所有相关用户,与预期结果相符。

2.3.3 会话列表

场景一

测试代码:

   /**
     * 测试会话列表功能
     */
    @Test
    public void sessionListTest() throws InterruptedException {
        //场景1,点击会话列表显示所有会话信息
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session")).click();
        sleep(3000);

        //测试用户信息显示是否正确
        String actualName= driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).getText();
        String exceptedName = "tony";
        Assertions.assertEquals(exceptedName,actualName);
        String actualMessage = driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > p")).getText();
        String exceptedMessage = "我们已经是好友啦,快...";
        Assertions.assertEquals(exceptedMessage,actualMessage);

        //场景2,点击好友列表项查看右侧是否正确会话信息
        driver.findElement(By.cssSelector("#session-list > li:nth-child(1)")).click();
        sleep(3000);
        String actualTitle = driver.findElement(By.cssSelector("#right > div.title")).getText();
        String exceptedTitle = "tony";
        Assertions.assertEquals(exceptedTitle,exceptedTitle);
    }

预期效果: 点击会话列表按钮,显示用户的所有会话信息

实际效果: 会话列表显示正确,与预期结果相符。

场景二

预期效果: 点击会话列表项按钮,右侧显示会话的历史信息

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

实际效果: 历史消息加载成功,与预期结果相符。

2.3.4 好友列表

场景一

测试代码:

/**
     * 测试好友列表功能
     */

    @Test
    public void friendlistTest() throws InterruptedException {
        //场景1,点击好友列表显示所有好友信息
        driver.findElement(By.cssSelector("#getFriend")).click();
        sleep(3000);

        //测试用户信息显示是否正确
        String actualName= driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4")).getText();
        String exceptedName = "john";
        Assertions.assertEquals(exceptedName,actualName);

        //场景2,点击好友列表项查看是否跳转到会话列表项,右侧显示对应聊天记录
        driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).click();
        sleep(3000);
        String actualName2= driver.findElement(By.cssSelector("#session-list > li.selected > h3")).getText();
        String exceptedName2 = "john";
        Assertions.assertEquals(exceptedName2,actualName2);
        String actualMessage = driver.findElement(By.cssSelector("#session-list > li.selected > p")).getText();
        String exceptedMessage = "我们已经是好友啦,快...";
        Assertions.assertEquals(exceptedMessage,actualMessage);

        //测试右侧是否显示正确聊天记录
        driver.findElement(By.cssSelector("#session-list > li:nth-child(1)")).click();
        sleep(3000);
        String actualTitle = driver.findElement(By.cssSelector("#right > div.title")).getText();
        String exceptedTitle = "john";
        Assertions.assertEquals(exceptedTitle,actualTitle);
    }

预期效果: 点击好友列表按钮,显示用户的所有好友信息
在这里插入图片描述
在这里插入图片描述

实际效果: 好友列表显示正确,与预期结果相符。

场景二

预期效果: 点击好友列表项按钮,跳转到会话列表并选中与该好友的会话列表项,如果没有就新增一个会话列表项,右侧显示与该好友的聊天记录。
在这里插入图片描述

在这里插入图片描述

实际效果: 跳转到会话列表项成功,与预期结果相符。

2.3.5 添加好友功能

测试代码:

 /**
     * 测试搜索框功能
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource({"zq"})
    public void searchTest(String input) throws InterruptedException {
        sleep(3000);
        //输入搜索内容
        driver.findElement(By.cssSelector("#searchInput")).sendKeys(input);
        sleep(3000);
        //点击搜索
        driver.findElement(By.cssSelector("#searchButton")).click();
        sleep(3000);
        //检查右侧显示是否正确
        String excepted ="zq";
        String actual = driver.findElement(By.cssSelector("#Users > li > div.nameDiv")).getText();
        Assertions.assertEquals(excepted,actual);

    }

    /**
     * 测试添加好友功能
     */
    @Test
    @Order(2)
    public void addFriendTest() throws InterruptedException {

        //在搜索用户测试用例之后,点击添加好友
        driver.findElement(By.cssSelector("#Users > li > div.addDiv")).click();
        sleep(3000);
        //跳转到登录页面登录被添加用户
        driver.get("http://124.221.76.124:59091/login.html");
        //先清除用户名和密码框
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        //输入用户名和密码并点击登录
        driver.findElement(By.cssSelector("#username")).sendKeys("zq");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");

        driver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        Alert alert = driver.switchTo().alert();
        alert.accept();

        //查看申请列表是否有好友申请
        sleep(3000);
        driver.findElement(By.cssSelector("#tab-apply")).click();


    }

预期效果: 在搜索框搜索用户名,右侧显示用户搜索结果,输入备注信息,点击添加按钮,被添加用户收到好友申请。

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

在这里插入图片描述

实际效果: 好友申请发送成功,与预期结果相符。

该功能与搜索框功能还有好友申请列表场景二按顺序执行,可以进一步测试同意或者拒绝好友申请功能。

2.3.6 好友申请列表

测试代码:

    
    /**
     * 测试好友申请列表,并同意好友申请
     */
    @ParameterizedTest
   @Order(3)
    @CsvSource({"admin"})
    public void applListTest(String applyName ) throws InterruptedException {
        //查看申请列表是否有好友申请
        sleep(3000);
        driver.findElement(By.cssSelector("#tab-apply")).click();
        sleep(3000);
        //测试是否是该用户的好友申请
       String actualName =  driver.findElement(By.cssSelector("#Appliers > li > div.applyNameDiv")).getText();
       String exceptedName = applyName;
       Assertions.assertEquals(exceptedName,actualName);
       //同意好友申请
        driver.findElement(By.cssSelector("#Appliers > li > div.agreeTab")).click();
//        //拒绝好友申请
//        driver.findElement(By.cssSelector("#Appliers > li > div.rejectTab")).click();
        sleep(500000);
    }

场景一

预期效果: 点击好友申请列表按钮,右侧显示用户的所有好友申请信息
在这里插入图片描述

实际效果: 好友申请列表显示正确,与预期结果相符。

场景二

预期效果: 在申请列表点击同意按钮,即添加好友成功,并且自动发送一条消息。
在这里插入图片描述

实际效果: 同意好友申请成功,与预期结果相符。

场景三
预期效果: 在申请列表点击拒绝按钮,即清空好友申请列表,忽略申请。
在这里插入图片描述

实际效果: 拒绝好友申请成功,与预期结果相符。

2.3.7 消息传输功能

预期效果: 点击某用户会话列表项,在右侧消息输入区域输入信息,点击发送,该用户收到信息。
在这里插入图片描述
在这里插入图片描述

实际效果: 消息发送接收成功,与预期结果相符。

2.3.7 删除好友功能

预期效果: 打开tony消息区域,点击右侧消息区域的扩展,点击删除好友,聊天记录清空,好友列表无此好友。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实际效果: 好友删除成功,与预期结果相符。

2.3.8 删除聊天记录功能

测试代码:

  /**
     * 测试删除好友或者聊天记录功能
     */
    @Test
    public void deleteFriend_session() throws InterruptedException {
        //1.选择一个列表项
        driver.findElement(By.cssSelector("#session-list > li:nth-child(1)")).click();
        sleep(3000);
        //2.点击删除聊天记录功能
        driver.findElement(By.cssSelector("#right > div.title > div")).click();
        sleep(3000);
//        driver.findElement(By.cssSelector("#Dropdown > div.deleteChat")).click();
//        sleep(3000);
//        //2.点击删除好友功能
        driver.findElement(By.cssSelector("#Dropdown > div.deleteFriend")).click();
        sleep(3000);
        //3.查看好友列表是否不存在该好友
        driver.findElement(By.cssSelector("#getFriend")).click();
        sleep(3000);
        //通过父子类标签找到所有的好友
        List<WebElement> elementList = driver.findElements(By.cssSelector("#friend-list"));
        for (int i =0;i<elementList.size();i++){
            if ((elementList.get(i).getText().equals("john"))){
                System.out.println("测试不通过");
                break;
            }
        }
        System.out.println("测试通过");

//        //3.查看会话列表是否不存在该会话
//        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session")).click();
//        sleep(3000);
//        List<WebElement> elementList = driver.findElements(By.cssSelector("#session-list"));
//        for (int i =0;i<elementList.size();i++){
//            if ((elementList.get(i).getText().equals("zq"))){
//                System.out.println("测试不通过");
//                break;
//            }
//        }
//        System.out.println("测试通过");

    }

预期效果: 打开zq消息区域,点击右侧消息区域的扩展,点击删除聊天记录,聊天记录清空。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实际效果: 聊天记录删除成功,与预期结果相符。

3. 总结

根据部分自动化测试用例执行结果可知,项目功能大体完善。接下来可以继续执行编写的测试用例,进一步测试功能、界面、兼容性、安全性等等。

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

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

相关文章

安防监控视频汇聚平台EasyCVR视频平台调用iframe地址无法播放的问题解决方案

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…

冷冻冷藏自动化立体库|HEGERLS四向穿梭车助力打造冷链智能仓储新力量

随着中国仓储物流整体规模和低温产品消费需求的稳步增长&#xff0c;冷链市场应用潜力不断释放。而在实际运行中&#xff0c;由于冷库容量不足、基础设施落后、管理机制欠缺等原因&#xff0c;经常出现“断链”现象&#xff0c;严重威胁到产品质量和消费者安全。 河北沃克金属…

React Native expo项目修改应用程序名称

https://expo.dev/accounts/xutongbao/projects npm install --global eas-cli && \eas init --id e32cf2c0-da5b-4a65-814a-4958d58f0ca7 eas init --id e32cf2c0-da5b-4a65-814a-4958d58f0ca7 app.config.js: export default {name: 学习,slug: learn-gpt,owner: x…

Comparable和Comparator区别

Comparable和Comparator接口都是实现集合中元素的比较、排序的&#xff0c;众所周知&#xff0c;诸如Integer&#xff0c;double等基本数据类型&#xff0c;java可以对他们进行比较&#xff0c;而对于类的比较&#xff0c;需要人工定义比较用到的字段比较逻辑。总体来讲&#x…

【微服务技术二】Feign、Gateway(路由、过滤器、跨域)的初步认知

微服务技术二 五、Feign远程调用Feign替代RestTemplate自定义Feign配置方式一&#xff1a;配置文件方式&#xff1a;方式二&#xff1a;java代码方式 Feign性能优化Feign的最佳实践* 六、Gateway网关搭建网关服务路由断言工厂Route Predicate Factory路由过滤器 GatewayFilter默…

负载均衡下的 WebShell 连接

目录 负载均衡简介负载均衡的分类网络通信分类 负载均衡下的 WebShell 连接场景描述难点介绍解决方法**Plan A** **关掉其中一台机器**&#xff08;作死&#xff09;**Plan B** **执行前先判断要不要执行****Plan C** 在Web 层做一次 HTTP 流量转发 &#xff08;重点&#xff0…

排名前 6 位的数学编程语言

0 说明 任何对数学感兴趣或计划学习数学的人&#xff0c;都应该至少对编程语言有一定的流利程度。您不仅会更有就业能力&#xff0c;还可以更深入地理解和探索数学。那么你应该学习什么语言呢&#xff1f; 1.python 对于任何正在学习数学的人来说&#xff0c;Python都是一门很棒…

vue所有UI库通用)tree-select 下拉多选(设置 maxTagPlaceholder 隐藏 tag 时显示的内容,支持鼠标悬浮展示更多

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.需求描述 引用的下拉树形结构支持多选&#xff0c;限制选中tag的个数&#xff0c;且超过制定个数&#xff0c;鼠标悬浮展示更多已选中。 2.先看下效果图 3.实现思路 首先根据API文档&#xff0c;先设置maxTagC…

LVS-DR+keepalived实现高可用负载群集

VRRP 通信原理&#xff1a; VRRP就是虚拟路由冗余协议&#xff0c;它的出现就是为了解决静态路由的单点故障。 VRRP是通过一种竞选的一种协议机制&#xff0c;来将路由交给某台VRRP路由。 VRRP用IP多播的方式&#xff08;多播地址224.0.0.18&#xff09;来实现高可用的通信&…

Redis中的有序集合

前言 本文着重介绍Redis中的有序集合的底层实现中的跳表 有序集合 Sorted Set Redis中的Sorted Set 是一个有序的无重复值的集合&#xff0c;他底层是使用压缩列表和跳表实现的&#xff0c;和Java中的HashMap底层数据结构&#xff08;1.8&#xff09;链表红黑树异曲同工之妙…

记一次mysql8 在linux上安装全过程

参照MYSQL官网官方文档安装 1、mysql官网 mysql官网 2、直接进入文档页 找到安装文档 3、找到自己系统对应的安装文档&#xff0c;选合适的安装方式&#xff0c;我这里使用的是YUM方式 a、开始安装之前需要替换yum仓库 具体步骤如下 b、将下载的文件上传至自己的服务器 如下…

什么是原型(prototype)和原型链(prototype chain)?如何继承一个对象的属性和方法?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 原型&#xff08;Prototype&#xff09;和原型链&#xff08;Prototype Chain&#xff09;⭐ 原型&#xff08;Prototype&#xff09;⭐ 原型链&#xff08;Prototype Chain&#xff09;⭐ 继承属性和方法⭐ 写在最后 ⭐ 专栏简介 前端入…

shell脚本之循环语句

循环语句 循环含义 将某代码段重复运行多次&#xff0c;通常有进入循环的条件和退出循环的条件 for循环语句 一般知道循环次数使用for循环 第一类 格式1&#xff1a; for名称 in 取值次数;do;done; 格式2&#xff1a; for 名称 in {取值列表} do done# 打印20次 for i i…

从 Ansible Galaxy 使用角色

从 Ansible Galaxy 使用角色 根据下列要求&#xff0c;创建一个名为 /home/curtis/ansible/roles.yml 的 playbook &#xff1a; playbook 中包含一个 play&#xff0c; 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。 此角色配置一项服务&#xff0c;以…

十、flume的安装

1.解压 2.改名 3.修改权限 4.编辑环境变量并source export FLUME_HOME/usr/local/flume export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HBASE_HOME/bin:$SQOOP_HOME/bin:$PIG_HOME/bin:$FLUME_HOME/bin 5.配置 6.查看版本 7.启动Hadoo…

LLM提示词工程和提示词工程师Prompting and prompt engineering

你输入模型的文本被称为提示&#xff0c;生成文本的行为被称为推断&#xff0c;输出文本被称为完成。用于提示的文本或可用的内存的全部量被称为上下文窗口。尽管这里的示例显示模型表现良好&#xff0c;但你经常会遇到模型在第一次尝试时无法产生你想要的结果的情况。你可能需…

31.Netty源码之客户端启动流程

highlight: arduino-light 客户端启动主要流程 如果看了服务器端的启动流程&#xff0c;这里简单看下就可以了。 java package io.netty.server; ​ import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import …

SHELL 基础 显示字符颜色, 修改历史命令,Linux里的命令 执行顺序

echo 打印命令 &#xff1a; 显示字符串 &#xff1a; [rootserver ~]# echo this is SHELL language this is SHELL language [rootserver ~]# echo this is SHELL language this is SHELL language [rootserver ~]# echo "this is SHELL language" this is SH…

VMware上搭建的虚拟机突然本地无法连接服务器

长时间没有使用VMware 虚拟机了&#xff0c;今天突然登录上去&#xff0c;启动虚拟服务器后发现本地等不了了&#xff0c; 经过排查发现是开启了&#xff1a;VirtualBox Host-Only Network 关闭之后就本机就可以直连服务器了

pytorch基础实践-数据与预处理

文章目录 数据集Fashion-MNIST 数据集 数据预处理包的导入在Pytorch中进行 ETL利用torchvison包获取和处理数据集&#xff08;ET&#xff09; 访问数据集访问和查看 train_set 中的单个数据利用 DataLoader 成批访问数据 数据集 Fashion-MNIST 数据集 MNIST MNIST&#xff0c;…