1. 项目介绍
本项目是一个基于 SSM 和 WebSocket 实现的畅聊互动空间。它为用户提供了一个便捷、实时的交流平台。通过 SSM 框架确保系统的稳定性和高效性,WebSokcet 技术实现了消息的实时推送,让用户之间的互动更加流畅。用户可以在这个空间中自由交流、分享想法。同时,简洁美观的界面设计也提升了用户体验,为用户打造一个充满活力的畅聊互动新天地。
2. 测试环境
- 操作系统:Windows 11
- 浏览器:Chrome 版本 128.0.6613.138
- 开发工具:IntelliJ IDEA Community Edition 2022.3.3
- 数据库:MySQL 5.7
3. 测试
3.1 功能测试
3.1.1 登录功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 输入正确的账号、密码和验证码,点击 “登录” 按钮 | 成功登录,跳转到相应页面 |
2 | 输入错误的账号、正确的密码和验证码,点击 “登录” 按钮 | 提示账号不存在 |
3 | 输入正确的账号、错误的密码和验证码,点击 “登录” 按钮 | 提示密码错误 |
4 | 输入正确的账号、密码和错误的验证码,点击 “登录” 按钮 | 提示验证码错误 |
部分测试用例效果图:
图1 输入正确的账号、密码和验证码,点击 “登录” 按钮,登录成功
3.1.2 注册功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 不输入邮箱、密码、确认密码和邮箱验证码,点击注册按钮。 | 提示 “ 请输入邮箱 ”。 |
2 | 输入邮箱,不输入密码、确认密码和邮箱验证码,点击注册按钮。 | 提示 “ 请输入验证码 ”。 |
3 | 输入邮箱和密码,不输入确认密码和邮箱验证码,点击注册按钮。 | 提示 “请输入验证码 ”。 |
4 | 输入邮箱、密码和确认密码,不输入邮箱验证码,点击注册按钮。 | 提示 “ 请输入验证码 ”。 |
5 | 输入邮箱、密码、确认密码和邮箱验证码,密码和确认密码不一致,点击注册按钮。 | 提示 “ 两次密码长度不一致,请重新输入~”。 |
6 | 输入已存在的邮箱,输入密码、确认密码和邮箱验证码,点击注册按钮。 | 提示 “ 该邮箱不可以同时绑定多个账号,请换个邮箱再来注册~”。 |
7 | 输入符合要求的邮箱、密码、确认密码和邮箱验证码,点击注册按钮。 | 注册成功,提示 “注册成功”。 |
部分测试用例效果图:
图2 输入符合要求的邮箱、密码、确认密码和邮箱验证码,点击注册按钮,注册成功图3 输入已存在的邮箱,输入密码、确认密码和邮箱验证码,点击注册按钮,注册失败
3.1.3 消息发送功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 在输入框输入正常文本内容,如 “你好”,点击发送按钮 | 消息成功发送,在聊天界面显示发送的文本内容 “你好” |
2 | 输入包含特殊字符的内容,如 “@#¥%”,点击发送按钮 | 消息成功发送,特殊字符正常显示在聊天界面 |
3 | 在输入框输入大量重复的文本内容,点击发送按钮 | 消息成功发送,重复的文本内容正常显示在聊天界面 |
4 | 输入过长的文本内容,超出系统规定的最大长度,点击发送按钮 | 提示输入内容过长,无法发送消息 |
5 | 输入空格,点击发送按钮 | 无法发送消息 |
6 | 不输入任何内容,直接点击发送按钮 | 无法发送消息 |
部分测试用例效果图:
图4 在输入框输入文本内容,发送成功
3.1.4 消息接收功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 发送纯文本消息 | 接收方准确显示文本内容和发送人信息。 |
2 | 发送包含特殊字符的消息 | 接收方正确显示特殊字符,无乱码或错误显示。 |
3 | 连续发送多条不同类型消息 | 接收方按照发送时间顺序准确显示所有消息,无错序、遗漏或错误显示。 |
4 | 在网络不稳定时发送消息 | 消息在网络恢复后自动重发并成功被接收方接收 |
5 | 多个发送方同时发送消息 | 接收方准确接收并按时间顺序显示来自不同发送方的消息。 |
图5 接收方按照发送时间顺序准确显示所有消息
3.2 自动化测试
3.2.1 登录页面
1. 设计测试用例
2. 部分代码实现
// 登录页面测试
@Test
public void LoginPage() throws InterruptedException {
webDriver.get(loginURL);
sleep(2000);
// 检查页面标题
String pageTitle = webDriver.getTitle();
Assertions.assertEquals("畅聊互动空间登录页面", pageTitle);
// 检查输入框是否存在、显示正常且可输入
WebElement acc_Input = webDriver.findElement(By.cssSelector("#userId"));
WebElement pwd_Input = webDriver.findElement(By.cssSelector("#password"));
WebElement ver_Input = webDriver.findElement(By.cssSelector("#verifyCode"));
Assertions.assertTrue(acc_Input.isDisplayed() && acc_Input.isEnabled(),"测试不通过:账号输入框出错!");
Assertions.assertTrue(pwd_Input.isDisplayed() && pwd_Input.isEnabled(),"测试不通过:密码输入框出错!");
Assertions.assertTrue(ver_Input.isDisplayed() && ver_Input.isEnabled(),"测试不通过:验证码输入框出错!");
// 检查输入框的默认提示文本
String acc_Ph = acc_Input.getAttribute("placeholder");
String pwd_Ph = pwd_Input.getAttribute("placeholder");
String ver_Ph = ver_Input.getAttribute("placeholder");
Assertions.assertEquals("请输入账户邮箱或账号", acc_Ph,"测试不通过:账号输入框提示文本出错!");
Assertions.assertEquals("请输入密码", pwd_Ph,"测试不通过:密码输入框提示文本出错!");
Assertions.assertEquals("请输入验证码", ver_Ph,"测试不通过:验证码输入框提示文本出错!");
// 检查登录按钮
WebElement loginButton = webDriver.findElement(By.cssSelector("#submit"));
Assertions.assertTrue(loginButton.isDisplayed() && loginButton.isEnabled(),"测试不通过:登录按钮出错!");
Assertions.assertEquals("登 录", loginButton.getAttribute("value"),"测试不通过:登录按钮显示文本出错!");
// 检查注册链接
WebElement reg_Link = webDriver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(6) > a"));
Assertions.assertTrue(reg_Link.isDisplayed(),"测试不通过:注册链接未显示!");
Assertions.assertEquals("还没有账号?点击注册", reg_Link.getText(),"测试不通过:注册链接提示文本出错!");
}
3.2.2 注册页面
1. 设计测试用例
2. 部分代码实现
// 注册页面测试
@Test
public void RegistrationPage() throws InterruptedException {
webDriver.get(registerURL);
sleep(2000);
// 检查页面标题
String pageTitle = webDriver.getTitle();
Assertions.assertEquals("畅聊互动空间注册页面", pageTitle);
// 检查输入框是否存在、显示正常且可输入
WebElement email_Input = webDriver.findElement(By.cssSelector("#EmailNumber"));
WebElement pwd_Input = webDriver.findElement(By.cssSelector("#password"));
WebElement sure_Input = webDriver.findElement(By.cssSelector("#SurePassword"));
WebElement send_Button = webDriver.findElement(By.cssSelector("#sendCode"));
WebElement ver_Input = webDriver.findElement(By.cssSelector("#EmailCode"));
Assertions.assertTrue(email_Input.isDisplayed() && email_Input.isEnabled(),"测试不通过:邮箱输入框出错!");
Assertions.assertTrue(pwd_Input.isDisplayed() && pwd_Input.isEnabled(),"测试不通过:设置密码输入框出错!");
Assertions.assertTrue(sure_Input.isDisplayed() && sure_Input.isEnabled(),"测试不通过:确认密码输入框出错!");
Assertions.assertTrue(send_Button.isDisplayed(),"测试不通过:发送验证码按钮出错!");
Assertions.assertTrue(ver_Input.isDisplayed() && ver_Input.isEnabled(),"测试不通过:验证码输入框出错!");
// 检查输入框的默认提示文本
String email_Ph = email_Input.getAttribute("placeholder");
String pwd_Ph = pwd_Input.getAttribute("placeholder");
String sure_Ph = sure_Input.getAttribute("placeholder");
String ver_Ph = ver_Input.getAttribute("placeholder");
Assertions.assertEquals("请输入8-24位邮箱账号", email_Ph,"测试不通过:邮箱输入框提示文本出错!");
Assertions.assertEquals("请设置8-16位登录密码", pwd_Ph,"测试不通过:密码输入框提示文本出错!");
Assertions.assertEquals("请确认登录密码", sure_Ph,"测试不通过:确认密码输入框提示文本出错!");
Assertions.assertEquals("请输入邮箱验证码", ver_Ph,"测试不通过:邮箱验证码输入框提示文本出错!");
// 检查密码输入框和确认密码输入框的输入类型
Assertions.assertEquals("password", pwd_Input.getAttribute("type"),"测试不通过:密码输入框输入类型出错!");
Assertions.assertEquals("password", sure_Input.getAttribute("type"),"测试不通过:确认密码输入框输入类型出错!");
// 检查发送验证码按钮
Assertions.assertEquals("发送验证码", send_Button.getAttribute("value"),"测试不通过:发送验证码按钮显示文本出错!");
// 检查提交按钮
WebElement submitButton = webDriver.findElement(By.cssSelector("#submit"));
Assertions.assertTrue(submitButton.isDisplayed() && submitButton.isEnabled(),"测试不通过:提交按钮出错!");
Assertions.assertEquals("提交", submitButton.getAttribute("value"),"测试不通过:提交按钮显示文本出错!");
// 检查已有账号登录链接
WebElement loginLink = webDriver.findElement(By.cssSelector("body > div.Register-container > div > div:nth-child(6) > a"));
Assertions.assertTrue(loginLink.isDisplayed() && loginLink.isEnabled(),"测试不通过:登录链接出错!");
Assertions.assertEquals("已有账号?去登录", loginLink.getText(),"测试不通过:登录链接提示文本出错!");
}
3.2.3 聊天页面
1. 设计测试用例
2. 部分代码实现
// 聊天页面测试
@Test
public void ChatPage() throws InterruptedException, IOException {
LoginSuccess();
sleep(1000);
// 检查页面标题
String pageTitle = webDriver.getTitle();
Assertions.assertTrue(pageTitle.contains("畅聊互动空间"));
//检查登录的用户名
WebElement UserName = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));
Assertions.assertEquals("黑米粥", UserName.getText(),"测试不通过:用户名出错!");
//检查搜索栏及搜索按钮
WebElement searchInput = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.search > input[type=text]"));
WebElement searchButton = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.search > input[type=text]"));
Assertions.assertTrue(searchInput.isDisplayed() && searchInput.isEnabled(),"测试不通过:搜索输入框出错!");
Assertions.assertTrue(searchButton.isDisplayed() && searchButton.isEnabled(),"测试不通过:搜索按钮出错!");
//检查好友列表显示区域
WebElement chatFriend = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));
Assertions.assertTrue(chatFriend.isDisplayed(),"测试不通过:消息列表出错!");
//检查消息列表显示区域
WebElement chatMessage = webDriver.findElement(By.cssSelector("#session-list > li"));
Assertions.assertTrue(chatMessage.isDisplayed(),"测试不通过:消息列表出错!");
//选择第一个对话,检查聊天列表和聊天对话框上的名字是否一致
chatMessage.click();
WebElement listName = webDriver.findElement(By.cssSelector("#session-list > li > h3"));
WebElement titleName = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title"));
Assertions.assertEquals(listName.getText(), titleName.getText(),"测试不通过:聊天对象文本出错!");
// 检查聊天消息显示区域
WebElement chatArea = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show"));
Assertions.assertTrue(chatArea.isDisplayed(),"测试不通过:消息记录显示出错!");
// 检查输入框
WebElement inputBox = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));
Assertions.assertTrue(inputBox.isDisplayed() && inputBox.isEnabled(),"测试不通过:消息输入框出错!");
// 检查发送按钮
WebElement sendButton = webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl_container > div.ctrl > button"));
Assertions.assertTrue(sendButton.isDisplayed() && sendButton.isEnabled(),"测试不通过:发送按钮出错!");
Assertions.assertEquals("发送", sendButton.getText(),"测试不通过:发送按钮提示文本出错!");
}