目录
报告日期:2023.8.23
测试团队:SEED团队
测试负责人:发呆的百香果子
版本:1.2.0
自动化测试工具:Selenium WebDriver
测试环境:Windows 10, Google Chrome 116.0.5845.97
自动化测试框架版本:JUnit 5
1. 引言
本报告总结了对于"SEED"的网页聊天室软件的自动化测试活动及结果。自动化测试的目标是提高测试效率、减少人工测试工作,并确保软件在各个方面的质量。
2. 测试范围
本次自动化测试覆盖了以下方面:
- 用户注册与登录功能
- 申请添加好友并同意功能
- 聊天发送与接收功能
- 删除会话功能
- 删除好友功能
3. 测试工具
本次自动化测试使用了以下工具:
- 自动化测试框架:Selenium WebDriver
- 测试脚本语言:Java
- 测试驱动的开发(TDD)工具:JUnit
4. 测试环境
自动化测试环境如下:
- 操作系统:Windows 10
- 浏览器:Google Chrome
- 自动化测试框架版本:JUnit 5
5. 测试脚本
我们编写了一系列测试脚本,涵盖了上述测试范围内的各项功能。每个测试脚本均针对一个特定的功能进行测试。
(1)用户注册与登录功能
@ParameterizedTest
@CsvFileSource(resources = "LoginSuccess.csv")
void LoginSuccess(String username, String password, String clientUrl) throws InterruptedException {
webDriver=getWebDriver();
// 1.打开登录页面
webDriver.get("http://43.136.87.47:8080/login.html");
// 等待2秒
webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
webDriver.findElement(By.cssSelector("#signin-form > div:nth-child(3) > input[type=text]")).clear();
webDriver.findElement(By.cssSelector("#signin-form > div:nth-child(4) > input[type=password]")).clear();
// 2.输入账号
webDriver.findElement(By.cssSelector("#signin-form > div:nth-child(3) > input[type=text]")).sendKeys(username);
webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
// 3.输入密码
webDriver.findElement(By.cssSelector("#signin-form > div:nth-child(4) > input[type=password]")).sendKeys(password);
webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
// 4.点击提交按钮
webDriver.findElement(By.cssSelector("#login")).click();
webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
// 5.校验登录成功的页面是不是http://43.136.87.47:8080/client.html
// 使用等待条件等待弹窗出现
wait.until(ExpectedConditions.alertIsPresent());
// 获取弹窗并获取弹窗的文本
Alert alert = webDriver.switchTo().alert();
String alertText = alert.getText();
// 断言弹窗的文本
Assertions.assertEquals("登录成功!", alertText);
sleep(1000);
// 接受弹窗(按下确定键)
alert.accept();
String currentUrl = webDriver.getCurrentUrl();
Assertions.assertEquals(clientUrl, currentUrl);
webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
String cur_admin=webDriver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();
Assertions.assertEquals(username,cur_admin);
}
(2)申请添加好友并同意功能
@Test
void friendTest(){
loginU1U2();
// lwy申请添加好友
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#searchUser > input[type=text]")));
user1Driver.findElement(By.cssSelector("#searchUser > input[type=text]")).sendKeys("lisi");
user1Driver.findElement(By.cssSelector("#searchUser > button")).click();
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#Users > li > div.addDiv")));
user1Driver.findElement(By.cssSelector("#Users > li > div.addDiv")).click();
Alert alert = user1Driver.switchTo().alert();
// String alertText = alert.getText();
// // 断言弹窗的文本
// Assertions.assertEquals("", alertText);
// 接受弹窗(按下确定键)
alert.accept();
// lisi同意添加好友
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-applyFriend > span")));
user2Driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-applyFriend")).click();
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#Appliers > li > div.agreeTab")));
user2Driver.findElement(By.cssSelector("#Appliers > li > div.agreeTab")).click();
// 获取同意好友申请后的“我们已经是好友啦...”的小红圈
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#session-list > li > span")));
WebElement noReadElement=user1Driver.findElement(By.cssSelector("#session-list > li > span"));
String noReadCount=noReadElement.getText();
Assertions.assertEquals("1",noReadCount);
}
(3)聊天发送与接收功能
@Test
void chatTest(){
loginU1U2();
// user1等待获取好友列表标签元素的出现
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#getFriend")));
//1.点击好友标签
user1Driver.findElement(By.cssSelector("#getFriend")).click();
// 等待lisi的出现
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"friend-list\"]/li[h4/text()='lisi']")));
//2.点击lisi
user1Driver.findElement(By.xpath("//*[@id=\"friend-list\"]/li[h4/text()='lisi']")).click();
// 3.获取聊天文本输入框,输入内容 //*[@id="friend-list"]/li[1]
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.client-container > div > div.right > div.message-show")));
user1Driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys("你好");
// 4.点击发送按钮
user1Driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
// 发送者的判断
// 5.比较消息是否为"你好"
// 找到包含文本内容为 "你好" 的 <li> 元素
WebElement liElement = user1Driver.findElement(By.cssSelector("#session-list > li.selected > p"));
// 获取 <p> 元素的文本内容
String actualText = liElement.getText();
// 进行断言比较
String expectedText = "你好";
Assertions.assertEquals(actualText, expectedText, "文本内容不符合预期");
// 接收者的判断
// 找到有消息来时会提醒的小红圈
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#session-list > li > span")));
WebElement noReadElement=user2Driver.findElement(By.cssSelector("#session-list > li > span"));
String noReadCount=noReadElement.getText();
Assertions.assertEquals("1",noReadCount);
// 等待lwy的出现
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"session-list\"]/li/h3")));
//6.找到消息发送者lwy
user2Driver.findElement(By.xpath("//*[@id=\"session-list\"]/li/h3[text()='lwy']"));
//等待消息文本出现
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"session-list\"]/li/p")));
//7.获取消息文本并比较
WebElement message=user2Driver.findElement(By.xpath("//*[@id=\"session-list\"]/li/p"));
String messageText = message.getText();
Assertions.assertTrue(messageText.contains("你好"), "Message does not contain '聊天测试'");
message.click();
}
private void loginU1U2(){
user1Driver=getUser1Driver();
user2Driver=getUser2Driver();
// 1.打开登录页面
user1Driver.get("http://43.136.87.47:8080/login.html");
user1Driver.findElement(By.cssSelector("#signin-form > div:nth-child(3) > input[type=text]")).clear();
user1Driver.findElement(By.cssSelector("#signin-form > div:nth-child(4) > input[type=password]")).clear();
// 2.输入账号
user1Driver.findElement(By.cssSelector("#signin-form > div:nth-child(3) > input[type=text]")).sendKeys("lwy");
// 3.输入密码
user1Driver.findElement(By.cssSelector("#signin-form > div:nth-child(4) > input[type=password]")).sendKeys("123");
// 4.点击提交按钮
user1Driver.findElement(By.cssSelector("#login")).click();
// 5.校验登录成功的页面是不是http://43.136.87.47:8080/client.html
// 使用等待条件等待弹窗出现
user1Wait.until(ExpectedConditions.alertIsPresent());
// 获取弹窗并获取弹窗的文本
Alert alert = user1Driver.switchTo().alert();
String alertText = alert.getText();
// 断言弹窗的文本
Assertions.assertEquals("登录成功!", alertText);
// 接受弹窗(按下确定键)
alert.accept();
String currentUrl = user1Driver.getCurrentUrl();
Assertions.assertEquals("http://43.136.87.47:8080/client.html", currentUrl);
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.client-container > div > div.left > div.user")));
String cur_admin=user1Driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();
Assertions.assertEquals("lwy",cur_admin);
user2Driver.get("http://43.136.87.47:8080/login.html");
// 等待2秒
user2Driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
user2Driver.findElement(By.cssSelector("#signin-form > div:nth-child(3) > input[type=text]")).clear();
user2Driver.findElement(By.cssSelector("#signin-form > div:nth-child(4) > input[type=password]")).clear();
// 2.输入账号
user2Driver.findElement(By.cssSelector("#signin-form > div:nth-child(3) > input[type=text]")).sendKeys("lisi");
user2Driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
// 3.输入密码
user2Driver.findElement(By.cssSelector("#signin-form > div:nth-child(4) > input[type=password]")).sendKeys("123");
// 4.点击提交按钮
user2Driver.findElement(By.cssSelector("#login")).click();
// 5.校验登录成功的页面是不是http://43.136.87.47:8080/client.html
// 使用等待条件等待弹窗出现
user2Wait.until(ExpectedConditions.alertIsPresent());
// 获取弹窗并获取弹窗的文本
Alert alert1 = user2Driver.switchTo().alert();
String alertText1 = alert1.getText();
// 断言弹窗的文本
Assertions.assertEquals("登录成功!", alertText1);
// 接受弹窗(按下确定键)
alert1.accept();
String currentUrl1 = user2Driver.getCurrentUrl();
Assertions.assertEquals("http://43.136.87.47:8080/client.html", currentUrl1);
user2Driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.client-container > div > div.left > div.user")));
String cur_admin1=user2Driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();
Assertions.assertEquals("lisi",cur_admin1);
}
(4)删除会话功能
@Test
void deleteSession() throws InterruptedException {
LoginSuccess("lwy", "123","http://43.136.87.47:8080/client.html" );
// user1等待获取好友列表标签元素的出现
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#getFriend")));
//1.点击好友标签
webDriver.findElement(By.cssSelector("#getFriend")).click();
// 等待lisi的出现
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"friend-list\"]/li[h4/text()='lisi']")));
//2.点击lisi
webDriver.findElement(By.xpath("//*[@id=\"friend-list\"]/li[h4/text()='lisi']")).click();
// 等待聊天框出现
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.client-container > div > div.right > div.message-show")));
// 3.点击"更多"按钮
webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title > div")).click();
// 4.等待删除会话框的出现
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#Dropdown")));
// 5.点击删除会话
webDriver.findElement(By.cssSelector("#Dropdown > div.deleteChat")).click();
// 6.检验lwy的会话列表是否还存在lisi
// 在删除会话后会没有选中的会话,等待选中的元素消失
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("#session-list > li.selected")));
boolean flag=false;
// 等待会话列表可见
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#session-list")));
// 获取所有的li标签
List<WebElement>list=webDriver.findElements(By.cssSelector("#session-list>li"));
for (int i = 0; i <list.size(); i++) {
if(list.get(i)!=null&&list.get(i).findElement(By.cssSelector("h3")).getText().equals("lisi")){
flag=true;
break;
}
}
// 如果会话列表为false,说明没有删除会话成功
Assertions.assertFalse(flag);
}
(5)删除好友功能
@Test
void deleteFriend(){
loginU1U2();
// user1等待获取好友列表标签元素的出现
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#getFriend")));
//1.点击好友标签
user1Driver.findElement(By.cssSelector("#getFriend")).click();
// 等待lisi的出现
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"friend-list\"]/li[h4/text()='lisi']")));
//2.点击lisi
user1Driver.findElement(By.xpath("//*[@id=\"friend-list\"]/li[h4/text()='lisi']")).click();
// 等待聊天框出现
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.client-container > div > div.right > div.message-show")));
// 3.点击"更多"按钮
user1Driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title > div")).click();
// 4.等待删除会话框的出现
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#Dropdown")));
// 5.点击删除好友
user1Driver.findElement(By.cssSelector("#Dropdown > div.deleteFriend")).click();
// 6.检验会话列表是否存在lisi
user1Wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("#session-list > li.selected")));
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#session-list")));
List<WebElement>list=user1Driver.findElements(By.cssSelector("#session-list>li"));
boolean flag=false;
for (int i = 0; i < list.size(); i++) {
if(list.get(i)!=null&&list.get(i).findElement(By.cssSelector("h3")).getText().equals("lisi")){
flag=true;
break;
}
}
Assertions.assertFalse(flag);
// 7.检验好友列表是否存在lisi
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#getFriend")));
user1Driver.findElement(By.cssSelector("#getFriend")).click();
user1Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#friend-list")));
List<WebElement>list2=user1Driver.findElements(By.cssSelector("#friend-list>li"));
boolean flag2=false;
for (int i = 0; i < list2.size(); i++) {
if(list2.get(i)!=null&&list2.get(i).findElement(By.cssSelector("h4")).getText().equals("lisi")){
flag2=true;
break;
}
}
Assertions.assertFalse(flag2);
// 等待好友列表lisi的出现
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"session-list\"]/li[h3/text()='lwy']")));
//点击lisi
user2Driver.findElement(By.xpath("//*[@id=\"session-list\"]/li[h3/text()='lwy']")).click();
// 获取聊天文本输入框,输入内容 //*[@id="friend-list"]/li[1]
user2Wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.client-container > div > div.right > div.message-show")));
user2Driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys("你好");
// 点击发送按钮
user2Driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
// 等待弹框出现
Alert alert=user2Wait.until(ExpectedConditions.alertIsPresent());
// 获取弹框内容
String alertText= alert.getText();
Assertions.assertEquals("你只能向好友发送消息!",alertText);
}
6. 测试结果
在自动化测试中,所有测试脚本均在指定环境下运行,并且通过了预先设定的断言。以下是部分测试结果的摘要:
(1)用户注册与登录功能:所有测试案例均通过,用户注册和登录过程稳定可靠。
(2)申请添加好友并同意功能:此功能通过了完整的测试流程,显示出良好的稳定性和可靠性。在测试中未发现任何错误或异常行为。功能界面和信息展示均符合预期。
(3)聊天发送与接收功能:消息发送和接收的测试均通过,消息在聊天室内正确显示。
(4)删除会话功能:功能在测试中表现良好,会话被成功删除且会话列表中不再显示已删除的会话。
(5)删除好友功能:删除好友功能在测试中表现良好,成功移除了双方的好友信息。测试过程中未出现任何异常或错误情况。好友列表的变化符合预期,删除操作的同步性得到验证。
7. 问题与建议
在自动化测试过程中,我们未发现任何明显的问题。根据自动化测试的结果,我们可以得出以下建议:
- 进一步优化测试脚本,增加更多边界情况和异常情况的测试。
- 随着软件版本的更新,保持测试脚本的同步更新,以适应功能变化。
8. 测试总结
自动化测试在测试效率和一致性方面取得了显著的成果,确保了"SEED"的网页聊天室软件在各个功能方面的稳定性。然而,仍建议开发团队关注测试脚本的持续维护和扩展,以应对软件的未来变化。
9. 致谢
感谢开发团队在自动化测试过程中的合作与支持,使本次测试得以顺利进行。
本文内容到此结束了,
如有收获欢迎点赞收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误疑问💬欢迎各位指出。
主页:发呆的百香果子_spring,软件测试-CSDN博客求同存异,与光同尘🏃🏃