文章目录
- 微聊测试用例
- 功能测试
- 自动化测试
- 注册页面
- 登录页面
- 会话窗口
- 朋友圈界面
- 界面测试
- 注册页面
- 登录页面
- 会话页面
- 朋友圈页面
- 兼容性测试
- PC
- Pad
- 手机
- 浏览器
- 性能测试
- 安全测试
- 密码保存是否安全
- SQL注入
- 服务器错发
- 网络
- 有网
- 弱网
- 断网
👑作者主页:Java冰激凌
概述:
本次测试旨在评估微聊的功能,包括用户界面、消息传递、安全性等方面。测试环境为Windows 10操作系统,使用Google Chrome浏览器进行测试。
测试方法:
本次测试采用黑盒测试方法,即不考虑系统内部的实现细节,只关注用户在使用过程中是否能够顺利完成任务。测试人员通过模拟真实用户的操作,对聊天室的各项功能进行了测试。
微聊测试用例
微聊测试用例已上传致Gitee平台 点击链接查看点击跳转
功能测试
自动化测试
注册页面
测试用例:
自动化测试代码:
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//设置优先级需要的
public class RegisterTest {
private static WebDriver webDriver;
@BeforeAll
public static void Genter(){
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
webDriver = new ChromeDriver(options);
webDriver.get("http://192.144.216.100:1120/register.html");
}
/**
* 校验当前页面title是否正确
*/
@Test
@Order(1)
public void title() throws InterruptedException {
Assertions.assertEquals("注册",webDriver.getTitle());
}
/**
* 注册用户 注册成功后是否成功跳转到登录页面
* @throws InterruptedException
*/
@Test
@Order(2)
public void input() throws InterruptedException {
sleep(500);
WebElement username = webDriver.findElement(By.cssSelector("#username"));
WebElement password = webDriver.findElement(By.cssSelector("#password"));
username.sendKeys("小1");
password.sendKeys("123");
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(500);
Alert alert = webDriver.switchTo().alert();//确认弹窗
alert.accept();//点击确认按钮
Assertions.assertEquals("登录页面",webDriver.getTitle());
webDriver.close();
}
}
测试结果:在注册功能测试中响应较快 体验良好 暂未发现错误
登录页面
测试用例:
自动化测试代码:
/**
* @Author: 冰激凌
* @Date: 2023-07-13 21:13
**/
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//设置优先级需要的
public class LoginTest {
private WebDriver webDriver;
@BeforeEach
public void Genter(){
webDriver = new ChromeDriver();
webDriver.get("http://192.144.216.100:1120/login.html");
}
@AfterEach
public void close(){
webDriver.quit();
}
/**
* 测试点击注册是否可以跳转到注册页面
*/
@Test
@Order(1)
public void reg() throws InterruptedException {
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
//获取并切换到当前的窗口
webDriver.switchTo().window(webDriver.getWindowHandle());
sleep(500);
Assertions.assertEquals("注册",webDriver.getTitle());
}
/**
* 测试点击联系作者是否可以跳转到联系作者
*/
@Test
@Order(2)
public void connection() throws InterruptedException {
// webDriver.navigate().back();//后退
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
}
public static Stream<Arguments> Generator () {
return Stream.of(Arguments.arguments("冰激凌","010822"));
}
@Order(3)
@ParameterizedTest
@MethodSource("Generator")
public void login(String username,String password) throws InterruptedException {
// webDriver.navigate().back();//后退
// sleep(1000);
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(1000);
// webDriver.switchTo().window(webDriver.getWindowHandle());
Assertions.assertEquals("微聊",webDriver.getTitle());
}
/**
* 输入错误的账号密码测试
*/
@Order(4)
@ParameterizedTest
@MethodSource("Generator")
public void loginError(String username,String password) throws InterruptedException {
// sleep(1000);
// webDriver.findElement(By.cssSelector("body > div.client-container > div.toolbar > span.tool-button > a > img")).click();
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password + 1);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(1000);
Alert alert = webDriver.switchTo().alert();
Assertions.assertNotNull(alert);
}
}
测试结果:在测试登录功能中 测试了多项指标 整体体验效果较好 在高并发的情况下服务器出现了少量的卡顿导致响应不及时 但并不影响用户体验
会话窗口
测试用例
自动化测试代码:
/**
* @Author: 冰激凌
* @Date: 2023-07-13 22:32
**/
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//设置优先级需要的
public class ClientTest {
private WebDriver webDriver;
@BeforeEach
public void Genter(){
webDriver = new ChromeDriver();
webDriver.get("http://192.144.216.100:1120/login.html");
}
@AfterEach
public void close(){
webDriver.quit();
}
public static Stream<Arguments> Generator () {
return Stream.of(Arguments.arguments("冰激凌","010822"));
}
/**
* 当前用户名是否正确
* @param username
* @param password
* @throws InterruptedException
*/
@ParameterizedTest
@MethodSource("Generator")
public void isUsername(String username,String password) throws InterruptedException {
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(1000);
WebElement element = webDriver.findElement(By.cssSelector("body > div.client-container > div.main > div.left > div.user"));
String innerhtml = element.getAttribute("innerHTML");
Assertions.assertEquals(username,innerhtml);
}
/**
* 测试登录后发送消息以及添加好友功能
* @param username
* @param password
* @throws InterruptedException
*/
@ParameterizedTest
@MethodSource("Generator")
public void client(String username,String password) throws InterruptedException {
webDriver.manage().window().maximize();//页面放大
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(500);
webDriver.findElement(By.xpath("//*[@id=\"session-list\"]/li[7]")).click();
sleep(100);
//获取到当前会话中的所有消息
List<WebElement> webElements = webDriver.findElements(By.cssSelector("body > div.client-container > div.main > div.right > div.message-show div"));
//获取到消息的个数
int count = webElements.size();
//选中输入框
WebElement input = webDriver.findElement(By.cssSelector("body > div.client-container > div.main > div.right > textarea"));
//在输入框输入消息
input.sendKeys("馒头!晚上约个饭");
sleep(100);
//发送
input.sendKeys(Keys.ENTER);
sleep(500);
//再次获取所有的消息个数
List<WebElement> webElements1 = webDriver.findElements(By.cssSelector("body > div.client-container > div.main > div.right > div.message-show div"));
//获取到消息的个数
int count1 = webElements1.size();
//如果count + 1 == count 则代表发送成功
Assertions.assertNotEquals(count,count1);
webDriver.findElement(By.cssSelector("body > div.client-container > div.main > div.left > div.search > input")).sendKeys("小s");
webDriver.findElement(By.cssSelector("body > div.client-container > div.main > div.left > div.search > button")).click();
sleep(500);
Alert alert = webDriver.switchTo().alert();//确认弹窗
alert.accept();//点击确认按钮
sleep(500);
webDriver.findElement(By.cssSelector("body > div.client-container > div.main > div.left > div.tab > div.tab-friend")).click();
List<WebElement> webElements2 = webDriver.findElements(By.cssSelector("#friend-list li"));
boolean flg = false;
WebElement friend = null;
for(WebElement element : webElements2){
if(element.getAttribute("friend-id").equals("47")){
flg = true;
friend = element;
break;
}
}
Assertions.assertEquals(true,flg);
friend.click();
}
}
测试结果:在测试会话界面测试中 功能使用非常简单 基本功能已经完善 在快速处理消息响应下提要较优 在测试添加好友功能时的处理比较特殊 使用的强制添加好友措施 不是非常合理 希望后序继续完善
朋友圈界面
测试用例:
自动化测试代码:
/**
* @Author: 冰激凌
* @Date: 2023-07-14 11:21
**/
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//设置优先级需要的
public class BlogListTest {
private WebDriver webDriver;
@BeforeEach
public void Genter(){
webDriver = new ChromeDriver();
webDriver.get("http://192.144.216.100:1120/login.html");
}
@AfterEach
public void close(){
webDriver.quit();
}
public static Stream<Arguments> Generator () {
return Stream.of(Arguments.arguments("冰激凌","010822"));
}
/**
* 验证进入朋友圈主页
* @param username
* @param password
* @throws InterruptedException
*/
@Order(1)
@ParameterizedTest
@MethodSource("Generator")
public void blog(String username,String password) throws InterruptedException {
webDriver.manage().window().maximize();//页面放大
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(100);
webDriver.findElement(By.cssSelector("body > div.client-container > div.toolbar > span.circle-of-friends > button > img")).click();
sleep(100);
Assertions.assertEquals("我的朋友圈",webDriver.getTitle());
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
sleep(100);
Assertions.assertEquals("朋友圈列表",webDriver.getTitle());
webDriver.navigate().back();//后退
sleep(100);
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
sleep(100);
Assertions.assertEquals("朋友圈编辑",webDriver.getTitle());
webDriver.navigate().back();//后退
sleep(100);
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
sleep(100);
Assertions.assertEquals("微聊",webDriver.getTitle());
}
/**
* 验证当前登入的用户名是否正确
* @param username
* @param password
* @throws InterruptedException
*/
@Order(2)
@ParameterizedTest
@MethodSource("Generator")
public void blog_list(String username,String password) throws InterruptedException {
webDriver.manage().window().maximize();//页面放大
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(100);
webDriver.findElement(By.cssSelector("body > div.client-container > div.toolbar > span.circle-of-friends > button > img")).click();
sleep(500);
String blogTitle = webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > div.title")).getAttribute("innerHTML");
webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > a:nth-child(4)")).click();
String curBlogTitle = webDriver.findElement(By.cssSelector("#title")).getAttribute("innerHTML");
Assertions.assertEquals(blogTitle,curBlogTitle);
}
/**
* 验证修改动态内容
* @param username
* @param password
* @throws InterruptedException
*/
@Order(3)
@ParameterizedTest
@MethodSource("Generator")
public void blog_list1(String username,String password) throws InterruptedException {
webDriver.manage().window().maximize();//页面放大
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(100);
webDriver.findElement(By.cssSelector("body > div.client-container > div.toolbar > span.circle-of-friends > button > img")).click();
sleep(300);
String blogTitle = webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > div.desc")).getAttribute("innerHTML");
webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > a:nth-child(5)")).click();
sleep(1000);
String curBlogTitle = webDriver.findElement(By.cssSelector("#editorDiv > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span")).getAttribute("innerHTML");
Assertions.assertEquals(blogTitle,curBlogTitle);
}
/**
* 验证发布文章 删除文章等
* @param username
* @param password
* @throws InterruptedException
*/
@Order(4)
@ParameterizedTest
@MethodSource("Generator")
public void blog_list2(String username,String password) throws InterruptedException {
webDriver.manage().window().maximize();//页面放大
WebElement usernameInput = webDriver.findElement(By.cssSelector("#username"));
WebElement passwordInput = webDriver.findElement(By.cssSelector("#password"));
usernameInput.sendKeys(username);
passwordInput.sendKeys(password);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(100);
webDriver.findElement(By.cssSelector("body > div.client-container > div.toolbar > span.circle-of-friends > button > img")).click();
sleep(300);
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
sleep(800);
webDriver.findElement(By.cssSelector("#title")).sendKeys("自动化测试");
WebElement element = webDriver.findElement(By.cssSelector("#editorDiv > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll"));
webDriver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).click();
sleep(200);
Alert alert = webDriver.switchTo().alert();//确认弹窗
alert.accept();//点击确认按钮
sleep(200);
String title = webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > div.title")).getAttribute("innerHTML");
Assertions.assertEquals("自动化测试",title);
//测试删除
String time = webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > div.date")).getAttribute("innerHTML");
sleep(100);
webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > a:nth-child(6)")).click();
webDriver.switchTo().alert().accept();//确认
sleep(100);
webDriver.switchTo().alert().accept();//确认
sleep(100);
String curTime = webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > div.date")).getAttribute("innerHTML");
sleep(200);
Assertions.assertNotEquals(time,curTime);
}
}
测试结果:在测试朋友圈功能时 在高并发的体验下载加载编辑页面与发布页面时反应较慢 整体功能比较完善 整体体验较优
界面测试
注册页面
测试用例:用户注册界面
测试结果:微聊的用户登录界面设计简洁明了,易于操作,位置合理,目的明确
登录页面
测试用例:用户登录界面测试结果:微聊的用户登录界面设计简洁明了,易于操作。所有按钮和菜单都放置在合适的位置,且颜色搭配合理。测试人员没有发现任何UI问题或错误。
会话页面
测试用例:会话页面
测试结果:会话布局设置合理 功能明确
朋友圈页面
测试用例:朋友圈页面
测试结果:风格与会话页面统一 整体风格较为舒适 布局合理明确
兼容性测试
PC
测试结果:在windows、Linux、Mac系统中使用网页访问效果一致 功能使用正常 兼容测试通过
Pad
测试结果:在安卓、IOS系统中需要开启电脑端模式访问浏览器才可以进行正常使用 体验效果一般 兼容测试通过
手机
测试结果:在安卓、IOS系统中对于页面布局无法正常展示 无法进行正常的使用 兼容测试不通过
浏览器
测试结果:在Chrom、IE内核中的浏览器使用正常 页面布局显示正确 功能使用正常 兼容性测试通过
性能测试
测试用例:同时进行多个会话窗口
测试结果:运行流畅 接收发送消息流畅 使用体验较好
测试用例:频繁切换用户聊天窗口
测试结果:切换流畅 并且可以正确展示历史聊天记录
测试用例:大量用户访问使用是否流畅
测试工具:LoadRunner
测试结果:服务器性能一般 在高并发的使用下页面首次加载出现明显的卡顿 使用体验较差 建议对服务器进行升级
测试用例:浏览页面、发布朋友圈、加载全文是否流畅
测试结果:在少量用户使用的情况下效果良好 加载迅速
安全测试
密码保存是否安全
测试用例:保存密码的数据库是否存在风险
测试结果:本系统中使用的数据库使用了MD5加盐算法保存密码在数据库中 安全系数较高
SQL注入
测试用例:在登录时使用sql注入尝试能否正确登录
测试结果:在MyBatis中使用特殊的方法预防了SQL注入 安全系数较高
服务器错发
测试用例:在高并发的情况下频繁切换与发送消息
测试结果:未出现消息错发与消息错乱的情况 安全系数较高
网络
有网
测试结果:在2g情况下访问缓慢 在3g、4g、5g、wifi情况下访问快速 体验较好
弱网
测试工具:使用fidder模拟弱网情况
测试结果:弱网情况下访问缓慢 但是加载出的内容与预期结果完全一致
断网
测试结果:在断网情况下无法访问网页 对于网络依赖较高