[易聊]软件项目测试报告

一、项目背景

  1. 随着互联网发展,各种各样的软件,比如游戏、短视频、购物软件中都有好友聊天功能,这是一个可在浏览器中与好友进行实时聊天的网页程序。“ 易聊 ”相对于一般的聊天软件,可以让用户免安装、随时随地的通过浏览器网页实现与朋友在线聊天。
  2. 项目整体采用前后端分离的方式实现,同时使用数据库进行数据的持久化存储,前端主要由登录界、注册界面,聊天主界面构成,后端使用Java流行的SpringBoot框架来进行服务器搭建。
  3. 该项目实现了简单的表情发送,图片发送,具有一定的可扩展性,如视频通话,发送语音等。

二、项目介绍

  1. 开发环境:IDEA版本2023.2、Win10 、JDK17、MySQL5.7
  2. 通信协议:项目整体通信基于HTTP通信协议、在线消息发送升级成Websocket协议。
  3. 功能介绍:
  • 用户登录:在输入正确的用户名、密码后跳转到主界面;未登陆状态访问聊天界面跳转到登录界面;禁止用户重复登录。
  • 用户注册:前后端数据通信采用通信,用户注册时存储采用密码加密存储
  • 好友管理:可以通过查询用户名,实时发送好友申请,也可以删除好友。
  • 聊天信息管理:当对方在线时,实时收到消息(文本、图片),对方不在现时,信息存储到数据库中,用户上线可查看;用户可单向删除聊天记录。
    4.项目代码链接

三、测试计划

(一)功能测试

  1. 测试用例
    在这里插入图片描述

  2. 执行测试的部分操作/截图
    (1)查询好友

  • 空输入查询
    在这里插入图片描述

  • 部分用户名查询
    在这里插入图片描述

  • 完整用户名查询
    在这里插入图片描述

(2)添加好友

  • 好友申请发送
    在这里插入图片描述
    在这里插入图片描述

  • 好友申请接收
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(3)删除好友
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

(二)部分自动化测试

  1. 自动化测试步骤(消息发送功能)
    (1) 两名测试用户账号分别通过打开无痕模式下浏览器,进行用户登录;
    (2) 分别打开对方的聊天框;
    (3) 用户1向用户2发送测试消息;
    (4) 后端拿到最新消息进行比对;
    (5) 得到测试结果;
  2. 测试代码
public class Main {public static void main(String[] args) throws InterruptedException {FirstTest firstTest = new FirstTest();firstTest.test01();}
}
public class FirstTest {void test01() throws InterruptedException {//1.创建驱动,打开浏览器WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");options.addArguments("--incognito");WebDriver driver = new ChromeDriver(options);//2.打开登录网址driver.get("http://127.0.0.1:8080/login.html");//3.找到账号密码框WebElement id = driver.findElement(By.cssSelector("#text"));WebElement password = driver.findElement(By.cssSelector("#myInput"));WebElement login = driver.findElement(By.cssSelector("body > section > div.content-w3ls.text-center > div:nth-child(4) > button"));//4.输入正确的账号密码id.sendKeys("李佳俊");password.sendKeys("123456");//5.点击登录login.click();Thread.sleep(1000);driver.switchTo().alert().accept();Thread.sleep(1000);String s = driver.findElement(By.cssSelector("body > div.client-container > div.main > div.left > div.user")).getText();if(s.equals("李佳俊")){System.out.println("测试用户李佳俊登陆成功");}else {System.out.println(s);System.out.println("登陆失败");}SecondTest secondTest = new SecondTest();Thread thread2 = new Thread(()->{try {secondTest.test01();} catch (InterruptedException e) {throw new RuntimeException(e);}});thread2.start();Thread.sleep(5000);driver.findElement(By.cssSelector("#session-list > li")).click();Thread.sleep(1000);driver.findElement(By.cssSelector("#messageInput")).sendKeys(Constant.TEST_MESSAGE);Thread.sleep(1000);driver.findElement(By.cssSelector("#send")).click();Thread.sleep(1000);List<WebElement> elements = driver.findElements(By.cssSelector("body > div.client-container > div.main > div:nth-child(2) > div.message-show > div > div > p"));WebElement element = elements.get(elements.size()-1);if(element.getText().equals(Constant.TEST_MESSAGE)){System.out.println("消息发送成功");}else {System.out.println("消息发送失败"+element.getText());}driver.quit();}
}
public class SecondTest {void test01() throws InterruptedException {//1.创建驱动,打开浏览器WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");//无痕模式options.addArguments("--incognito");WebDriver driver = new ChromeDriver(options);//2.打开登录网址driver.get("http://127.0.0.1:8080/login.html");//3.找到账号密码框WebElement id = driver.findElement(By.cssSelector("#text"));WebElement password = driver.findElement(By.cssSelector("#myInput"));WebElement login = driver.findElement(By.cssSelector("body > section > div.content-w3ls.text-center > div:nth-child(4) > button"));//4.输入正确的账号密码id.sendKeys("苏宣");password.sendKeys("123456");//5.点击登录login.click();Thread.sleep(1000);driver.switchTo().alert().accept();Thread.sleep(1000);String s = driver.findElement(By.cssSelector("body > div.client-container > div.main > div.left > div.user")).getText();if(s.equals("苏宣")){System.out.println("测试苏宣用户登陆成功");}else {System.out.println(s);System.out.println("登陆失败");}Thread.sleep(1000);driver.findElement(By.cssSelector("#session-list > li")).click();Thread.sleep(5000);List<WebElement> elements = driver.findElements(By.cssSelector("body > div.client-container > div.main > div:nth-child(2) > div.message-show > div > div > p"));WebElement element = elements.get(elements.size()-1);if(element.getText().equals(Constant.TEST_MESSAGE)){System.out.println("消息接收成功");}else {System.out.println("消息接收失败"+element.getText());}driver.quit();}
}

3.测试结果截屏

在这里插入图片描述

(三)性能测试

持续更新…

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UDP英译汉网络词典

这里我们用UDP实现一个简单的英译汉小词典。我们还是仿照前一篇的UDP编程&#xff0c;将各自的组件封装起来&#xff0c;实现高内聚低耦合。 一. 字典翻译功能实现 首先我们将我们的字典知识库放在txt文本中。 apple: 苹果 banana: 香蕉 cat: 猫 dog: 狗 book: 书 pen: 笔 ha…

浮毛粘毛器可以彻底去除吗?独家揭秘值得入手浮毛空气净化器

有没有养猫五年以上还是单猫的铲屎官&#xff1f;能不能分享一下怎么才能控制住不养新猫。 从我养第一只猫开始&#xff0c;每次看到别人家的小幼猫&#xff0c;就控制不住的想养。到现在&#xff0c;家里已经有了7只猫&#xff0c;而前段时间楼下那只小三花又差点让我破例。不…

Keil5 Debug模式Watch窗口添加的监控变量被自动清除

Keil5 Debug模式Watch窗口添加的监控变量被自动清除 问题解决记录 问题描述&#xff1a;每次进入Debug模式时&#xff0c;watch窗口里面上一次调试添加的监控变量都会被全部清掉 如图&#xff1a; 退出Debug模式后&#xff0c;重新进入Debug模式&#xff1a; 解决方法&…

INFO:一种基于向量加权平均的高效优化算法【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2022年&#xff0c;I Ahmadianfar受到基于向量加权平均方法启发&#xff0c;提出了加权平均向量优化算法&#xff08;weIghted meaN oF vectOrs, INFO&#xff09;。 2.算法原理 2.1算法…

在线任务分发系统开发架构分析

在线任务分发系统的架构分析是一个综合性的过程&#xff0c;涉及多个技术层面和功能模块的设计。以下是对在线任务分发系统架构的详细分析&#xff1a; 一、系统概述 在线任务分发系统是一个集任务发布、分配、执行、监控及反馈于一体的综合平台&#xff0c;它通过互联网技术实…

超详细带你学习go高性能web框架----fiber

go-fiber-fast go-fiber 主要定位为一个轻量级、高性能的 Web 框架&#xff0c;但其灵活性使得它可以通过与其他库的集成&#xff0c;构建出强大而多功能的应用程序&#xff0c;满足不同的业务需求,和gin一样轻量级别的路由,但是性能特别是极端性能比gin好一些,都可以通过整合其…

【Gradle】window下安装gradle及idea配置

gradle安装与配置 背景基本概念下载配置环境变量idea配置构建命令配置全局的镜像仓库 背景 最近在看spring源码时&#xff0c;Spring5 以后都是采用 Gradle 来编译&#xff0c;所以构建源码前先安装 Gradle 环境。 基本概念 Gradle是一个基于Apache Ant和Apache Maven概念的…

优化农业项目流程 10款实用管理系统推荐

国内外主流的 10 款农业建设管理系统对比&#xff1a;PingCode、Worktile、建米农业工程项目管理系统、泛普软件的农业项目管理系统、开创云数字农业管理平台、Trimble Ag Software、Agworld、FarmLogs、Granular、Conservis。 在管理复杂的农业建设项目时&#xff0c;选择合适…

LuaJit分析(三)luajit字节码文件格式

Luajit字节码文件格式的完整信息如上图所示&#xff0c;包括文件头Header和原型Proto&#xff0c;一个原型可以对应lua源码中的一个函数或源文件。一、文件头文件标志&#xff1a;占用三个字节&#xff0c;始终是0x1B4C4A&#xff0c;表示这是一个luajit文件版本&#xff1a;占…

时序预测 | 基于VMD-SSA-LSSVM+LSTM多变量时间序列预测模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 旧时回忆&#xff0c;独此一家。基于VMD-SSA-LSSVMLSTM多变量时间序列预测模型&#xff08;Matlab&#xff09; ——————组合模型预测结果—————————— 预测绝对平均误差MAE LSTM VMDSSALSSVM 组合模型 …

Java项目:基于SpringBoot+mysql在线拍卖系统(含源码+数据库+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SSM框架mysql在线拍卖系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能齐全、…

基层医疗云HIS系统源码:云计算、大数据等现代信息技术研发

云HIS源码&#xff0c;基层云HIS系统源码&#xff0c;基层医疗云HIS系统 利用云计算、大数据等现代信息技术研发的基层医疗云HIS系统实现了医院信息化从局域网向互联网转型&#xff0c;重新定义医疗卫生信息化建设的理念、构架、功能和运维体系。实现了医院信息化由局域网向互…

分享两个方法分析python打包exe

在Python开发中&#xff0c;常常需要将Python脚本打包成独立的可执行文件&#xff0c;以便在没有Python环境的电脑上运行。你是否曾为此感到困惑&#xff0c;不知道该选择哪种工具来实现这一目标&#xff1f;其实&#xff0c;打包Python脚本并不难&#xff0c;关键在于选择合适…

C++从入门到起飞之——list模拟实现 全方位剖析!

​ ​ ​ &#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 ​ ​1、list的整体框架 2、list迭代器 >整体分析 >整体框架 >成员函数 >运…

windows安全软件之火绒杀毒的密码忘记后处理

一、问题描述 某次&#xff0c;想升级系统补丁&#xff0c;但多次尝试后都失败&#xff0c;排查杀毒软件影响过程中&#xff0c;发现火绒杀毒配置了密码保护&#xff0c;但因时间太久&#xff0c;密码已无从考证&#xff0c;那我们应该怎样处理这种情况呢&#xff1f; 二、处…

开发知识付费小程序的秘诀:从设计到上线一步到位

在移动互联网时代&#xff0c;知识付费小程序成为内容创作者和教育者的热门选择。它不仅降低了用户的使用门槛&#xff0c;还具备高效传播的优势。本文将带你一步步了解如何开发一个功能齐全的知识付费小程序&#xff0c;从设计规划到技术实现&#xff0c;最后顺利上线。 一、…

QT接收并解析GPS模块串口数据

目录 一、QT读取串口数据 二、解析数据 目标&#xff1a; 使用QT&#xff0c;读取gps模块的串口数据&#xff0c;并解析其中的经纬高数据&#xff0c;然后进行处理 一、QT读取串口数据 变量定义 QSerialPort *serial; QSerialPortInfo SerialPortInfo; QByteArray lineData…

RKNPU2从入门到实践 --- 【10】RKNPU2零拷贝API实现RKNN模型在RK3588开发板上的部署

目录 一、为什么叫零拷贝API&#xff1f; 二、零拷贝API执行流程&#xff08;代码解读&#xff09; 2.1 前奏工作 2.2 main.cc文件的编写&#xff08;代码的编写&#xff09; 2.2.1 第一步&#xff1a;rknn_init接口创建rknn_context对象、加载RKNN模型 2.2.2 第二步…

C# 传值参数

传值参数 1.值类型 值参数创建变量的副本&#xff1a;当传递值参数时&#xff0c;实际上是创建了原始变量的一个副本&#xff0c;然后将副本传递给方法。对值参数的操作永远不影响变量的值&#xff1a;由于是复制了一份新的副本&#xff0c;所以对副本进行操作不会影响原始变量…

python,json数据格式,pyecharts模块,pycharm中安装pyecharts

json数据格式 JSON是一种轻量级的数据交互格式 可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a; json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互. 类似于&#xff1a; 国…