一、项目背景
- 随着互联网发展,各种各样的软件,比如游戏、短视频、购物软件中都有好友聊天功能,这是一个可在浏览器中与好友进行实时聊天的网页程序。" 易聊 "相对于一般的聊天软件,可以让用户免安装、随时随地的通过浏览器网页实现与朋友在线聊天。
- 项目整体采用前后端分离的方式实现,同时使用数据库进行数据的持久化存储,前端主要由登录界、注册界面,聊天主界面构成,后端使用Java流行的SpringBoot框架来进行服务器搭建。
- 该项目实现了简单的表情发送,图片发送,具有一定的可扩展性,如视频通话,发送语音等。
二、项目介绍
- 开发环境:IDEA版本2023.2、Win10 、JDK17、MySQL5.7
- 通信协议:项目整体通信基于HTTP通信协议、在线消息发送升级成Websocket协议。
- 功能介绍:
- 用户登录:在输入正确的用户名、密码后跳转到主界面;未登陆状态访问聊天界面跳转到登录界面;禁止用户重复登录。
- 用户注册:前后端数据通信采用通信,用户注册时存储采用密码加密存储
- 好友管理:可以通过查询用户名,实时发送好友申请,也可以删除好友。
- 聊天信息管理:当对方在线时,实时收到消息(文本、图片),对方不在现时,信息存储到数据库中,用户上线可查看;用户可单向删除聊天记录。
4.项目代码链接
三、测试计划
(一)功能测试
-
测试用例
-
执行测试的部分操作/截图
(1)查询好友
-
空输入查询
-
部分用户名查询
-
完整用户名查询
(2)添加好友
-
好友申请发送
-
好友申请接收
(3)删除好友
(二)部分自动化测试
- 自动化测试步骤(消息发送功能)
(1) 两名测试用户账号分别通过打开无痕模式下浏览器,进行用户登录;
(2) 分别打开对方的聊天框;
(3) 用户1向用户2发送测试消息;
(4) 后端拿到最新消息进行比对;
(5) 得到测试结果; - 测试代码
java
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.测试结果截屏
(三)性能测试
持续更新...