网页聊天室测试报告

一、项目背景

模拟网页版微信,提供了一个用户之间在线交流平台,是采用前后端分离的方式实现的,使用到的技术有:SpringBoot,SpringMVC,MyBatis,MySQL。

二、测试安排

1.测试环境

硬件:Lenovo Yoga 14S 2021(R7-5800H/16GB/512GB/集显)
操作系统:Windows 10
浏览器:chrome 128.0.6613.84(正式版本) (64 位)
项目运行环境:CentOS7、maven、JDK1.8
自动化脚本运行环境:IIntelliJ IDEA 2021.2.2

2.测试用例

在这里插入图片描述

三、测试用例

1.手动功能测试

  • 登录界面测试

场景一:登录界面正常显示
在这里插入图片描述
场景二:登录界面失败登录–输入正确的账号,输入错误的密码,点击“登录”按钮
预期结果:登录失败,弹出对应提示框
实际结果: 登录失败,弹出对应提示框
在这里插入图片描述
场景三:登录界面失败登录–用户未注册,点击“登录”按钮
预期结果:登录失败,弹出对应提示框
实际结果:登录失败,弹出对应提示框
在这里插入图片描述
场景四:登录界面失败登录–用户名或密码为空,点击“登录”按钮
预期结果:登录失败,弹出对应提示框
实际结果:登录失败,弹出对应提示框
在这里插入图片描述
场景五:登录界面成功登录—输入正确的账号和密码,点击“登录”按钮
预期结果:登陆成功,跳转到会话页面
实际结果:登陆成功,跳转到会话页面
在这里插入图片描述
在这里插入图片描述

  • 注册界面测试

场景一:注册界面正常显示
在这里插入图片描述
场景二:注册失败测试–输入已经存在的账号,密码
预期结果:注册失败,弹出对应提示框
实际结果:注册失败,弹出对应提示框
在这里插入图片描述
场景三:登录界面失败登录–用户名或密码为空,点击“注册”按钮
预期结果:注册失败,弹出对应提示框
实际结果:注册失败,弹出对应提示框
在这里插入图片描述
场景四:注册成功测试–输入正确注册账号,密码,点击注册
预期结果:注册成功,弹出对应提示框成功跳转到登录界面
实际结果:注册成功,弹出对应提示框成功跳转到登录界面
在这里插入图片描述
在这里插入图片描述

  • 用户未登录情况下进入会话界面

测试未登录情况下,打开会话页面,进行相应弹窗处理
预期结果:打开会话页面,弹窗显示用户未登录。
实际结果:打开会话页面,弹窗显示用户未登录。
在这里插入图片描述

  • 会话界面测试

场景一:会话界面正常打开。
在这里插入图片描述
场景二:消息列表正常显示,能显示所有消息 ,点击消息,右侧会话框能正常显示该消息详细信息。
在这里插入图片描述
场景三:好友列表正常显示,能显示所有好友 。点击好友,跳转到左侧消息标签页,该好友消息置顶,右侧会话框能正常显示该消息详细信息。
在这里插入图片描述
在这里插入图片描述
场景四:检查聊天功能正常,用户张三发送信息,用户李四接受信息
在这里插入图片描述

在这里插入图片描述

2.自动化测试

2.1登录界面测试


/**
 * @author ALL
 * @description: 登录自动化测试
 */

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginTest extends AutoUtils {
    public  static WebDriver driver=AutoUtils.createDriver();

    //打开界面
    @BeforeAll
    public static void getLogin(){
        driver.get("http://127.0.0.1:8080/login.html");
        driver.manage().window().maximize();
    }
    //登录界面正常显示
    @Test
    @Order(1)
    public void LoginPageRight() throws IOException {
        driver.navigate().refresh();
        String except="登录";
        String act=driver.findElement(By.cssSelector("body > div.login-container > div>h3")).getText();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#username"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#password"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#submit"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        Assertions.assertEquals(except,act);
        getScreenShot(getClass().getName());
        System.out.println("登陆界面正常显示");
    }

    //登录界面登录失败--参数一:未注册的用户 参数二:已注册的用户但密码错误
    @ParameterizedTest
    @CsvSource(value = {"zhang,12","zhangsan,12"})
    @Order(2)
    public void LoginPageFalse(String username,String password) throws InterruptedException, IOException {
        //清除原有的用户名密码
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //等待弹窗
        Thread.sleep(3000);
        //判断弹窗
        Alert alert=driver.switchTo().alert();
        String except="登录失败!";
        String act = driver.switchTo().alert().getText();
        if(alert!=null){
            alert.accept();
            Assertions.assertEquals(except,act);
            System.out.println("登录失败测试成功");
        }else{
            System.out.println("登录失败测试失败");
            assert false;
        }
        getScreenShot(getClass().getName());
    }

    @ParameterizedTest
    @CsvSource(value = {"'zhangsan','123','登录成功!','网页聊天程序'"})
    @Order(3)
    //登录界面登录成功
    public void LoginPageSuc(String username,String password,String except,String except2) throws InterruptedException, IOException {
        //清除原有的用户名密码
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //等待弹窗
        Thread.sleep(3000);
        //判断弹窗
        String act = driver.switchTo().alert().getText();
        Assertions.assertEquals(except,act);
        //点击确认弹窗
        driver.switchTo().alert().accept();
        getScreenShot(getClass().getName());

        Thread.sleep(3000);
        //检查是否跳转到了主页面
        String act2=driver.getTitle();
        Assertions.assertEquals(act2,except2);
        System.out.println("登录成功测试成功");
        getScreenShot(getClass().getName());

    }

}

2.2 注册界面测试


/**
 * @author ALL
 * @description:注册界面自动化
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class RegisterTest extends AutoUtils {
    public static WebDriver driver=AutoUtils.createDriver();

    @BeforeAll
    public static void getRegister(){
        driver.get("http://127.0.0.1:8080/Register.html");
        driver.manage().window().maximize();
    }

    //注册界面正常显示
    @ParameterizedTest
    @ValueSource(strings={"注册"})
    @Order(1)
    public void RegisterPageRight(String except){
        String act=driver.findElement(By.cssSelector("body > div.login-container > div > h3")).getText();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#username"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#password"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#submit"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        Assertions.assertEquals(except,act);
        System.out.println("注册界面显示成功");
    }
    //注册界面失败注册--参数一:已注册的用户名密码;
    @ParameterizedTest
    @CsvSource(value={"zhangsan,123"})
    @Order(2)
    public void RegisterFalse(String username,String password) throws InterruptedException, IOException {
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        Thread.sleep(3000);
        //检查弹窗--注册失败!
        Alert alert=driver.switchTo().alert();
        String except="注册失败!";
        String act=alert.getText();
        Assertions.assertEquals(except,act);
        alert.accept();
        getScreenShot(getClass().getName());
        System.out.println("注册界面失败注册测试成功");
    }

    //注册界面成功注册--账号密码都正确填写,会自动跳转到注册界面
    @ParameterizedTest
    @CsvSource(value = {"'lisi5','123','注册成功!','登录页面'"})
    @Order(3)
    public void RegisterSuc(String username,String password,String except,String except2) throws InterruptedException, IOException {
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        Thread.sleep(3000);
        //检查弹窗--注册成功
        Alert alert=driver.switchTo().alert();
        String act=alert.getText();
        Assertions.assertEquals(except,act);
        //点击确认弹窗
        alert.accept();
        getScreenShot(getClass().getName());
        Thread.sleep(3000);
        //检查是否跳转到登录界面
        String act2=driver.getTitle();
        Assertions.assertEquals(act2,except2);
        getScreenShot(getClass().getName());
        System.out.println("注册界面成功注册测试成功");
    }

}

2.3 未登录测试

/**
 * @author ALL
 * @description: 未登录状态下访问会话框
 */
public class NoLoginTest extends AutoUtils {
    public static WebDriver driver=AutoUtils.createDriver();

    @Test
    public void noLogin() throws InterruptedException, IOException {
        driver.get("http://127.0.0.1:8080/client.html");
        //检查弹窗
        Thread.sleep(2000);
        Alert alert=driver.switchTo().alert();
        String act="当前用户未登录!";
        String except="当前用户未登录!";
        if(alert!=null){
            alert.accept();

            System.out.println("未登录状态下访问会话框测试正确");
        }else{
            except="测试失败";
        }
        Assertions.assertEquals(except,act);
        getScreenShot(getClass().getName());
    }
}

2.4 会话功能测试


/**
 * @author ALL
 * @description: 会话界面测试
 */

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ClientTest extends AutoUtils{
    public static WebDriver driver= AutoUtils.createDriver();

    //打开页面
    @BeforeAll
    public static void getClient(){
        driver.get("http://127.0.0.1:8080/client.html");
        driver.manage().window().maximize();
    }

    //会话界面正常打开
    @Test
    @Order(1)
    public  void ClientPageRight() throws IOException {
        driver.navigate().refresh();
        String except="网页聊天程序";
        String act=driver.getTitle();
        //用户名
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //聊天列表
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //好友列表
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //消息编辑框
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //发送按钮
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //比较标题
        Assertions.assertEquals(except,act);
        //截图保存
        getScreenShot(getClass().getName());
        System.out.println("登陆界面正常显示");
    }
    //1.消息列表正常显示,能显示所有消息 2.点击消息,右侧会话框能正常显示该消息详细信息
    @Order(2)
    @Test
    public void SessionList() throws InterruptedException, IOException {
        //点击消息列表标签页
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //消息列表
        List<WebElement> num=driver.findElements(By.cssSelector("#session-list>li"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        if(num.size()!=0){
            //记录最新消息的用户和消息
            String name=driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).getText();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            String text=driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > p")).getText();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            //点击最新消息
            driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).click();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            Thread.sleep(3000);
            //检查消息和用户名
            String nameAct=driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            //验证最新的一条消息
            Assertions.assertEquals(name,nameAct);
            getScreenShot(getClass().getName());
        }

    }

    @Test
    @Order(3)
    //1.好友列表正常显示,能显示所有好友 2.点击好友,跳转到左侧消息标签页,该好友消息置顶,右侧会话框能正常显示该消息详细信息
    public void friendList() throws InterruptedException, IOException {
        //点击消息列表标签页
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //消息列表
        List<WebElement> num=driver.findElements(By.cssSelector("#friend-list>li"));
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        if(num.size()!=0){
            //记录第一个用户好友
            String name=driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4")).getText();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            //点击该用户
            driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4")).click();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            Thread.sleep(3000);
            //检查消息和用户名
            String nameAct=driver.findElement(By.cssSelector("#session-list > li.selected>h3")).getText();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            //验证最新的一条消息
            String nameAct2=driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
            Assertions.assertEquals(name,nameAct);
            Assertions.assertEquals(name,nameAct2);
            getScreenShot(getClass().getName());
        }
    }

    //检查聊天功能正常,用户张三发送信息,
    @ParameterizedTest
    @CsvSource(value = {"我好累,lisi,123"})
    @Order(4)
    public void chatSuc(String textExc,String username,String password) throws IOException, InterruptedException {
        driver.navigate().refresh();
        //zhangsan发送信息
        String nameExc="zhangsan";
        //点击lisi发送消息
        driver.findElement(By.cssSelector("#session-list > li:nth-child(3)")).click();
        //编写输入框
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys(textExc);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //点击发送
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //截图保存
        getScreenShot(getClass().getName());

        //登录lisi
        driver.get("http://127.0.0.1:8080/login.html");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //等待弹窗
        Thread.sleep(3000);
        //点击确认弹窗
        driver.switchTo().alert().accept();
        getScreenShot(getClass().getName());
        Thread.sleep(3000);

        //点击zhangsan接受消息
        String name=driver.findElement(By.cssSelector("#session-list > li > h3")).getText();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        String text=driver.findElement(By.cssSelector("#session-list > li > p")).getText();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //点击张三发送用户
        driver.findElement(By.cssSelector("#session-list > li")).click();
        Thread.sleep(1000);

        Assertions.assertEquals(name,nameExc);
        Assertions.assertEquals(text,textExc);
        getScreenShot(getClass().getName());
    }
}

2.5关闭驱动

所有自动化测试用例执行完后,需要退出浏览器
此处我们创建一个退出驱动类,放到测试套件类的最后一个测试类


/**
 * @author ALL
 * @description:退出驱动
 */
public class DriverQuitTest extends AutoUtils {
    private static WebDriver driver  = AutoUtils.createDriver();

    //关闭驱动
    @Test
    public void quitWeb() {
        driver.quit();
    }

}

2.6测试套件

此处我们创建一个 RunTest类,通过 @Suite 注解标识该类为测试套件类,然后使用 @SelectClasses 注解来声明我们要指定的类,最后通过 RunTest类来运行测试用例。相比于使用函数调用来对测试用例进行测试,当前方式大大减少了开销和时间可以直接指定类的测试顺序,即在注解 @SelectClasses 参数中的测试顺序为从左向右。

/**
 * @author ALL
 * @description:测试套件
 */
@Suite
@SelectClasses({RegisterTest.class, NoLoginTest.class,LoginTest.class,ClientTest.class, DriverQuitTest.class})
public class runTest {
}

2.7自动化测试结果

运行结果:
在这里插入图片描述
屏幕截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值