学习交流论坛-测试报告

🌟 欢迎来到 我的博客! 🌈

💡 探索未知, 分享知识 !💫

在这里插入图片描述


1. 项目描述

一个基于Spring的前后端分离的论坛系统,用于提供一个学习交流,分享技术文章和个人见解的平台。支持帖子发布、评论、私信用户、管理等功能。

2. 测试计划

2.1 功能测试

2.1.1 测试环境
  • 操作系统:Windows 10旗舰版
  • 项目运行环境:IntelliJ IDEA 2023.2.3、MySQL5.7、JDK1.8
  • 浏览器:Chorme, Edge, FireFox
  • 自动化脚本环境:IntelliJ IDEA 2023.2.3,
  • 测试技术: 手工单元测试和自动化测试
  • 测试人员:我本人
2.1.2 编写测试用例
  • 功能测试点
    在这里插入图片描述
  • 非功能测试点
    在这里插入图片描述
2.1.3 部分手工功能测试
注册页面
  • 场景一 : 输入的用户名在数据库中存在,且两次输入密码相同
  • 预期结果: 提示用户已经存在
  • 实际结果:提示用户已经存在,与预期结果一致。在这里插入图片描述
  • 场景二: 输入用户名不存在,密码与却密码一致,点击注册
  • 预期结果:注册成功,跳转回登录界面
  • 实际结果:注册成功,跳转回登录界面,与预期结果一致。
登录页面
  • 场景1:输入用户名正确, 密码不正确,点击登录
  • 预期结果:登录失败,给出错误提示
  • 实际结果:登录失败,给出错误提示, 与预期结果一致
    在这里插入图片描述
  • 场景2:输入用户名正确, 密码正确,点击登录
  • 预期结果:登录成功,跳转到首页博客列表页
  • 实际结果:登录成功,跳转到首页博客列表页, 与预期结果一致
首页页面
  • 场景1:未登录状态下,点击首页
    预期结果:跳转回登录界面
    实际结果:跳转回登录界面,与预期结果一致
  • 场景2:登录状态下,点击“首页”
    预期结果:导航栏显示所有的版块名,下方显示所有帖子列表,右上方显示登录用户信息
    实际结果:与预期结果一致
    在这里插入图片描述
  • 场景3:登录状态下,点击导航栏处的版块名“Java”
    预期结果:下方显示Java名称,该版块下的帖子数量,版块下的所有帖子列表,右上方显示登录用户信息
    实际结果:与预期结果一致
    在这里插入图片描述
  • 场景4:登录状态下,在搜索框输入关键字“数据库”搜索
    预期结果:下方显示帖子正文中所有存在“数据库”这三个字的帖子;
    实际结果:刷新回到首页界面,与预期不符。不支持搜索功能。
  • 场景5:登录状态下,点击“月亮”按钮
    预期结果:进入夜间模式的切换
    实际结果:进入夜间模式的切换,与预期相符。
  • 场景6:登录状态下,点击“发布帖子”按钮
    预期结果:进入博客编辑页面,版块名默认选择Java
    实际结果:与预期相符。
    在这里插入图片描述
帖子详情页面
  • 场景1:未登录状态下,点击首页下的任意一条帖子内容
    预期结果:跳转回登录界面
    实际结果:跳转回登录界面,与预期结果一致。
  • 场景2:登录状态下,点击首页下的一条帖子内容“西安”
    预期结果:跳转到该帖子详情页面
    实际结果:与预期相符。
  • 场景3:登录状态下,点击首页下的一条帖子内容“测试”(帖子作者“newCharry”,当前登录作者“TestUser”)
    预期结果:跳转到该帖子详情页面,最上方显示帖子信息,左侧显示帖子作者信息,下方显示该帖子的内容,下方只显示点赞按钮。
    实际结果:与预期相符。
    在这里插入图片描述
  • 场景4:登录状态下,下方点赞按钮
    预期结果:上方显示的点赞数加1
    实际结果:与预期相符。
    在这里插入图片描述

2.2 自动化测试

2.2.1 注册页面
注册页面

验证注册成功的情况 :

  • 场景1:注册用户名在数据库不存在,昵称,两次密码一致,注册成功,跳转回登录界面
    在这里插入图片描述
    在这里插入图片描述
	/**
     * 注册用户名在数据库不存在,昵称,两次密码一致,注册成功,跳转回登录界面
     * @param userName 用户名
     * @param nickname 昵称
     * @param password1 密码
     * @param password2 确认密码
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource(value = "TestUser1,TestUser1,111111,111111")
    void Register(String userName, String nickname, String password1,String password2) throws InterruptedException, IOException {
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        // 点击注册按钮
        webDriver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[3]/a")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys("userName");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入昵称
        webDriver.findElement(By.cssSelector("#nickname")).sendKeys("nickname");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys("password1");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入确认密码
        webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("password2");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 确认协议
        webDriver.findElement(By.cssSelector("#policy")).click();
        // 完成注册
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000); // 等待1s

        String expectUrl = "http://124.71.152.247:8081/sign-in.html"; // 预计跳转页面URL
        String currentUrl = webDriver.getCurrentUrl(); // 当前页面URL

        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.DAYS);
        Assertions.assertEquals(expectUrl, currentUrl); // 比较
        System.out.println("注册成功!");
        // 对页面进行截图
        File srcFile  = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "RegisterTest.png";
        FileUtils.copyFile(srcFile, new File(fileName));

        Thread.sleep(1000); // 等待1s
        //因为自动化测试会测试多个账号,所有在一个账号检测完了后,还需要回退到登录界面
        webDriver.navigate().back();
    }

验证注册失败的情况

  • 场景2:注册用户名在数据库存在,昵称,两次密码一致,注册失败,获取警告框信息。
    代码同上。测试结果
    在这里插入图片描述
    在这里插入图片描述
2.2.2 登录页面
登录页面
  • 登录成功测试
    场景1:测试用户名正确,密码正确,登录成功

在这里插入图片描述
在这里插入图片描述

	/**
     * 测试用户名正确,密码正确,登录成功
     * @param username 用户名
     * @param password 密码
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource(value = "TestUser1,111111")
    void Login1(String username, String password) throws InterruptedException, IOException {
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击登录
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);

        Thread.sleep(1000); // 等待1s

        // 检查是否跳转到博客列表页
        String expectUrl = "http://124.71.152.247:8081/index.html";
        String curUrl = webDriver.getCurrentUrl();
        Assertions.assertEquals(expectUrl, curUrl);
        System.out.println("登录成功 !");

        // 获取页面截图
        File srcFile = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "login1.png";
        FileUtils.copyFile(srcFile, new File(fileName));

        Thread.sleep(1000); // 等待1s,等待弹窗出现
        //因为测试多个账号,所有在一个账号检测完了后,还需要回退到登录界面
        webDriver.navigate().back();
    }
  • 登录失败测试
    场景2:测试用户名正确,密码错误,登录失败
    在这里插入图片描述
/**
     * 测试用户名正确,密码错误,登录失败
     * @param username 用户名
     * @param password 密码
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = "TestUser1,111")
    void Login2(String username, String password) throws InterruptedException, IOException {
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击登录
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000); // 等待1s

        String text = webDriver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
        System.out.println(text);
    }
2.2.3 博客列表页面
  • 未登录状态下测试
    场景1:未登录状态下进入博客列表页,直接跳转回登录界面。测试通过。
    实际结果: 未登录,直接跳转到登录页面
    在这里插入图片描述
    在这里插入图片描述
    /**
     * 未登录状态下进入博客列表页,直接跳转回登录界面。测试通过。
     */
    @Order(1)
    @Test
    void BlogList1() throws InterruptedException, IOException {
        // 不登录,直接打开博客显示列表页
        webDriver.get("http://124.71.152.247:8081/index.html");

        Thread.sleep(1000); // 等待1s

        // 获取当前界面的url地址
        String expectUrl = "http://124.71.152.247:8081/sign-in.html";
        String curUrl = webDriver.getCurrentUrl();

        // 判断是否跳转到登录界面
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        Assertions.assertEquals(expectUrl, curUrl);

        // 截图
        File srcFile = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "BlogListFailed.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }
  • 登录状态下测试
    场景2:登录后进入博客列表页,查看“首页”元素是否存在,查看是否含有“发布帖子”按钮。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
 /**
     * 登录后进入博客列表页,查看“首页”元素是否存在,查看是否含有“发布帖子”按钮。
     * @param username 用户名
     * @param password 密码
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = "TestUser1,111111")
    void BlogList2(String username, String password) throws InterruptedException, IOException {
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击登录
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000); // 等待1s

        // 查看"页面"的文本内容显示是否正确
        String expectText1 = "首页";
        String text1 = webDriver.findElement(By.cssSelector("#nav_board_index > a > span.nav-link-title")).getText();
        Assertions.assertEquals(expectText1, text1);

        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "BlogListSuccess1.png";
        FileUtils.copyFile(srcFile, new File(fileName));

        // 查看"发布帖子"的按钮点击后是否正确跳转
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
        //查看是否跳转到博客编辑页面
        String expectUrl = "http://124.71.152.247:8081/index.html";
        String curUrl = webDriver.getCurrentUrl();
        Assertions.assertEquals(expectUrl, curUrl);
        System.out.println("已跳转到边界帖子页面");

        // 截图
        File srcFile2 =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName2 = "BlogListSuccess2.png";
        FileUtils.copyFile(srcFile2, new File(fileName2));
    }
......(部分自动化测试脚本)


相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 19:46:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 19:46:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 19:46:04       82 阅读
  4. Python语言-面向对象

    2024-04-25 19:46:04       91 阅读

热门阅读

  1. Spark-core面试知识点

    2024-04-25 19:46:04       33 阅读
  2. VisualGLM部署&微调&docker环境

    2024-04-25 19:46:04       33 阅读
  3. python绘制平行四边形

    2024-04-25 19:46:04       33 阅读
  4. 在vue项目中使用TS

    2024-04-25 19:46:04       31 阅读
  5. el-table 表格自带全选按钮隐藏

    2024-04-25 19:46:04       26 阅读
  6. flask + celery + redis + flower

    2024-04-25 19:46:04       33 阅读
  7. C 语言实例 - 字符转 ASCII 码

    2024-04-25 19:46:04       32 阅读
  8. HashMap 和 HashTable的异同

    2024-04-25 19:46:04       32 阅读
  9. Linux c++ 中文字符转十六进制 UTF-8 编码

    2024-04-25 19:46:04       23 阅读
  10. 【React】生命周期

    2024-04-25 19:46:04       31 阅读