畅聊趣坊项目测试报告

news2024/11/27 10:45:16

文章目录

  • 项目背景
  • 项目功能
  • 测试计划与设计
    • 功能测试
    • 自动化测试
  • 测试结果
    • 功能测试结果
    • UI自动化测试结果

项目背景

在浏览网站时,发现好多网站开放出聊天的窗口,我们一发送消息就会收到一条消息,好奇这个功能是怎么实现的,最后查阅资料发现收发消息的操作是通过服务端先接收到消息,再主动向客户端推送消息,所以呢就想做一个聊天网站实现上述的功能,但是实现服务器推送的方法很多,此项目选择使用了WebSocket协议来实现上述功能

项目功能

  • 注册:用户可以申请注册一个账号
  • 登录:用户使用注册的账号进行登录
  • 好友管理模块:在搜索框输入要添加好友的用户名,即可申请添加好友
  • 会话管理模块:用户可以点击好友来创建不存在的会话
  • 消息管理模块:用户可以和自己的好友实时聊天

测试计划与设计

本次测试的环境为:Windows操作系统Win11,Chrome浏览器

在这里插入图片描述

功能测试

测试步骤:

  1. 分析需求,提取测试点
  2. 针对测试点设计测试用例
  3. 根据测试用例手工执行测试
  4. 针对测试结果输出报告

测试用例

这里针对项目的界面功能安全性能兼容性易用性设计测试用例

此处只粘贴部分用例,完整的用例可访问Gitee链接查看

链接: 畅聊趣坊测试用例

在这里插入图片描述

测试步骤

这里记录两个核心功能的测试步骤:

  • 添加好友
  • 发送消息

添加好友的测试步骤:

  1. 先正确登录来到主页面

在这里插入图片描述

  1. 再查找要添加的好友

在这里插入图片描述

  1. 查找到,点击添加

在这里插入图片描述

  1. 使用无痕模式登录被添加的账号

在这里插入图片描述

  1. 点击同意

在这里插入图片描述

  1. 查看添加好友结果

在这里插入图片描述

发送消息的测试步骤:

  1. 甲先给乙发送消息

在这里插入图片描述

  1. 乙查看是否收到消息,并向甲回应一条消息

在这里插入图片描述

  1. 查看甲是否收到消息

在这里插入图片描述

自动化测试

自动化测试的优点:

自动化测试可代替一部分手工测试,提高测试的执行效率,并且随着项目版本的迭代,回归测试的压力越来越大,借助自动化测试提高回归测试效率

注意:自动化测试只能代替一部分手工测试,不能完全替代手工测试

自动化测试的步骤:

  1. 分析项目的核心功能
  2. 针对核心功能设计自动化测试用例
  3. 针对测试用例编写自动化脚本
  4. 执行脚本
  5. 记录结果

设计自动化测试用例

此处针对三个主要的模块设计用例:

  • 用户模块
  • 会话好友管理模块
  • 消息管理模块

在这里插入图片描述

编写自动化测试脚本

此处只粘贴部分脚本代码,完整脚本可访问Gitee链接

链接: 畅聊趣坊UI自动化测试脚本

import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.time.Duration;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ClientTest extends InitAndEnd{

    @BeforeEach
    void login() throws InterruptedException {
        driver.get("http://47.108.53.70:8080/login.html");
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#username")).sendKeys("admin");
        driver.findElement(By.cssSelector("#password")).sendKeys("12345");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        Thread.sleep(1500);
    }

    //检查元素
    @Order(1)
    @Test
    void elementTest(){
        WebElement element = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title"));
        Assertions.assertEquals("添加好友",element.getText());
        Assertions.assertEquals("http://47.108.53.70:8080/client.html",driver.getCurrentUrl());
        Assertions.assertEquals("网页聊天页面",driver.getTitle());
    }

    //检查点击好友列表
    @Order(2)
    @Test
    void clickFriendList(){
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        WebElement element = driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4"));
        Assertions.assertEquals("fs",element.getText());
    }

    //检查点击会话列表
    @Order(3)
    @Test
    void clickSessionList(){
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        String sessionName = driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).getText();
        Assertions.assertEquals("fs",sessionName);
        String lastMessage = driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > p")).getText();
        Assertions.assertEquals("放肆",lastMessage);
    }

    //检查点击好友
    @Order(4)
    @Test
    void clickFriend(){
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        WebElement element = driver.findElement(By.cssSelector("#session-list > li.selected"));
        String className = element.getAttribute("class");
        //检查会话是否是选中状态
        Assertions.assertEquals("selected",className);
        //检查聊天标题
        Assertions.assertEquals("fs",driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText());
    }

    //检查点击会话
    @Order(5)
    @Test
    void clickSession(){
        driver.findElement(By.cssSelector("#session-list > li:nth-child(1)")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        String className = driver.findElement(By.cssSelector("#session-list > li.selected")).getAttribute("class");
        Assertions.assertEquals("selected",className);
        Assertions.assertEquals("fs",driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText());
    }
}

测试结果

功能测试结果

未通过测试如下:

  1. 登录,注册时点击回车不能触发登录,注册点击效果,影响用户的体验

在这里插入图片描述

  1. 发送消息,也不能通过回车键发送消息,影响用户体验

在这里插入图片描述

  1. 对于已经同意了好友请求,还可点击同意,虽然提示已经添加,但是还往后端发送请求了

在这里插入图片描述

bug分析:在同意或拒绝后,没有禁用按钮,也没有对好友是否存在做判断,后端也没有对前端发送请求添加好友的请求进行参数校验

改正意见:前端同意或拒绝后,对按钮进行禁用,后端呢也对前端发送的请求参数进行校验

UI自动化测试结果

UI自动化用例全部通过,部分通过结果如下:

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

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

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

相关文章

七日杀EOS错误,开服出现房间无法被搜索的问题

如题,本问题建立在你的服务器已经正常启动的情况下。 如果你的服务器根本做不到正常启动,那么这个方案可能并不适合你。 这里只提供windows端的配套过程,如果你的os是linux,那么需要自行bing一下证书导入方法。 本文默认你的serve…

Numpy---类型修改、去重、级联、拆分、拷贝复制

1. 类型修改 ndarray.astype(type) 返回修改了类型之后的数组 stock_change np.random.normal(0, 1, (4, 5)) stock_change.astype(np.int32)ndarray.tostring([order]) ndarray.tobytes([order]) 构造包含数组中原始数据字节的Python字节 arr np.array([[[1, 2, 3], […

【C++学习】特殊类设计 | 类型转换

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! 特殊类设计 | 类型转换 一、特殊类设计1.1 不能被拷贝的类1.2 只能在堆上创建的类1.3 只能在栈上创建…

SpringBoot整合ShardingSphere5.x实现数据加解密功能

环境&#xff1a;Springboot2.6.14 ShardingSphere5.3.0 准备环境 添加依赖 <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core</artifactId><version>${shardingsphere.version}</ve…

【数据分享】1929-2022年全球站点的逐日最低气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2022年全球气象站…

【资料分享】过压保护自锁控制电路

概述(电路类别、实现主要功能描述)&#xff1a; 在电源系统中&#xff0c;当反馈回路失效时&#xff0c;输出电压不受控&#xff0c;电压升高超出规定范围&#xff0c;此时过高的输出电压有可能造成后续电器设备的损坏。为解决这问题&#xff0c;通常在电源中增加过压保护电路…

神经网络学习率指数衰减ExponentialDecay策略的参数含义与使用方法详解

本文介绍在tensorflow库中&#xff0c;用于动态调整神经网络的学习率的一种方法——指数衰减ExponentialDecay()策略的参数含义及其具体用法。 在进行神经网络训练时&#xff0c;我们经常需要用到动态变化的学习率&#xff0c;其中指数衰减ExponentialDecay()策略是我们常用的一…

【鲁棒优化】具有可再生能源和储能的区域微电网的最优运行:针对不确定性的鲁棒性和非预测性解决方案(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Python 类方法和静态方法】零基础也能轻松掌握的学习路线与参考资料

一、Python类方法和静态方法的概念 在Python中&#xff0c;类方法和静态方法是常见的两种方法。两者都是Python中的函数&#xff0c;可以在类和实例上调用。但是&#xff0c;它们的作用和用法有所不同。 类方法是绑定到类而不是实例的方法&#xff0c;它们可以在实例和类上运…

高性能软件负载OpenResty常用命令

目录 1 案例介绍2 中小公司的详情页方案2.1 缺点 3 大型公司的商品详情页的核心思想3.1 生成静态页3.2 推送到文件服务器3.3 布隆过滤器过滤请求3.4 lua直连Redis读取数据3.5 OpenResty 渲染数据 4 环境准备4.1 配置文件服务器4.2 配置资源反向代理4.3 访问测试 1 案例介绍 商品…

【Unity100个实用小技巧】Git报错:error: some local refs could not be updated;

☀️博客主页&#xff1a;CSDN博客主页 &#x1f4a8;本文由 我是小狼君 原创&#xff0c;首发于 CSDN&#x1f4a2; &#x1f525;学习专栏推荐&#xff1a;面试汇总 ❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏 ⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&…

SpringBoot+Mybatis+Thymeleaf实现的疫情防控物资管理系统

本系统具体使用的技术是&#xff1a;后端使用SpringBootMybatis&#xff0c;前端使用了Thymeleaf框架&#xff0c;数据库使用的是MySql 8.0。开发工具使用的是IDEA。 本系统前端是使用了前辈的管理系统模板&#xff0c;具体的系统模块功能如下图所示&#xff1a; 一、系统首页…

《环信开发者技术等级考试》有奖问答正在进行中。。。

欢迎参加《环信开发者技术等级考试》&#xff0c;希望大家凝神静气&#xff0c;考出水平。 值此环信十周年&#xff0c;参与本次考试所有考生均可凭实力获得周年大礼包。 考场设置 本次考试主要考察大家对集成环信IM以及环信开通服务的熟悉度。 题型包含单选和多选&#xff…

算法修炼之筑基篇——筑基一层初期(解决01背包问题)

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法修炼之练气篇​​​​​ ✨博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;学习了算法修炼之练气篇想必各位蒟蒻们的基础已经非常的扎实了&#xff0c;下来我们进阶到算法修炼之筑基篇的学习。筑基期和练气期…

物联网网关,原来是这么回事,感谢!

《高并发系统实战派》-- 你值得拥有 文章目录 物联网网关是什么&#xff1f;为什么要搞物联网网关&#xff1f;物联网网关作用&#xff1f; 物联网网关技术原理物联网网关实战开发边缘计算与物联网网关的碰撞边缘计算的理解物联网网关结合边缘计算 物联网网关是什么&#xff1f…

Windows10下docker安装及遇到的问题并且在docker快速部署onlyoffice

docker安装官网地址 docker安装超链接点击进入下载 这里下载的是window版的docker&#xff0c;你们根据自身实际情况下载&#xff1b; 安装docker遇到的问题: 第一个问题 : 启动遇到Docker Desktop is unable to detect a Hypervisor 虚拟化技术没打开&#xff0c;需要打开…

有哪些你觉得非常好用的软件?

以下是我认为非常好用的软件&#xff1a; 1. 金鸣表格文字识别&#xff1a;由深圳市金鸣科技有限公司开发&#xff0c;系统采用超前AI&#xff0c;经深度学习&#xff0c;识别精准&#xff0c;可将图片、PDF等转为excel、word&#xff0c;同时支持证件、票据等批量合并转为结构…

“好不容易进的腾讯,你凭什么要离开?”

前几天&#xff0c;我在网上看到一个故事。 故事的主人翁是18届的校招生&#xff0c;目前入职腾讯&#xff0c;工作了一个月。这一个月给他的感受是大量的写测试用例&#xff0c;感觉自己写测试用例的能力熟练了不少&#xff0c;测试技能倒是没有多大的提高&#xff0c;真正需…

vue使用纪要

一、基础总结 1、构成 1&#xff09;位置目录 如下图所示&#xff1a; 一个页面一个vue文件&#xff0c;位置在src下边的views里边&#xff1b; 如下图&#xff1a; 一个vue文件&#xff0c;对应一个或多个js文件&#xff0c;js放在src下边的api中&#xff1b; 2&#xf…

开源杀毒引擎库libclamav的使用方法

《开源杀毒引擎ClamAV的源码编译安装》中我们讲了ClamAV的安装和使用方法&#xff0c;可以很方便的使用ClamAV提供的工具进行病毒扫描&#xff0c;当然我们也可以在我们的程序中集成它提供的libclamav开发库来实现病毒扫描&#xff0c;libclamav是一个功能强大的病毒扫描库&…