“SEED“实时网页聊天室的软件测试与评估报告

目录

1. 引言

2. 测试范围

3. 测试工具

4. 测试环境

5. 测试脚本

6. 测试结果

7. 问题与建议

8. 测试总结

9. 致谢


报告日期: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博客

求同存异,与光同尘🏃‍🏃‍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的百香果子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值