当前位置: 首页 > article >正文

【测试报告】论坛系统

1.项目背景

        随着科学技术的飞速发展,相关编程人员数量激增,大家需要一个平台来进行互相交流,解决问题,论坛系统作为信息化建设的重要组成部分,是十分有必要的。基于Spring Boot的校园论坛系统旨在通过科技手段提高程序员内信息共享、学术讨论和文化交流的效率,为程序员们提供一个开放、便捷、互动性强的交流平台。

2.测试环境

硬件: Vivobook_ASUSLaptop X1603ZA_X1603ZA
操作系统: Windows 11 家庭中文版
浏览器: 1Google Chrome  133.0.6943.142(正式版本) (64 位)
测试工具: 自动化测试Selenium,性能测试Jmeter
自动化脚本运行环境: IntelliJ IDEA 2024.3.3

3.测试分类

3.1 功能测试

测试用例

功能测试结果:测试用例100%通过

3.2 非功能测试

3.3 手动测试

对注册页面进行的测试

场景1:在输入部分注册信息时,由于信息不全,点击注册按钮后系统应该给出相应的提示。

预期结果:页面提示部分信息不能为空。

实际结果:系统确实给出了相应的提示,要求补全所有必填项,与预期一致。

场景2:输入一个已经存在的用户名,并确保密码和确认密码一致,然后点击注册按钮。

预期结果:系统应该提示用户该用户名已经存在。

实际结果:系统确实给出了提示,提示用户该用户名已经存在,与预期结果一致。

场景3:输入一个不存在的用户名,并且输入密码与确认密码不一致,然后点击注册按钮。

预期结果:系统应该提示用户检查确认密码是否输入一致。

实际结果:系统确实给出了相应的提示,指示用户检查确认密码,与预期结果一致

场景4:输入一个不存在的用户名,同时确保密码和确认密码一致,然后点击注册按钮。

预期结果:系统应该显示注册成功,并跳转回登录界面。

实际结果:系统确实显示了注册成功,并且跳转回了登录界面,符合预期。

对登录页面进行的测试

场景1:输入一个已经存在的用户名,并确保密码输入正确,然后点击登录按钮。

预期结果:系统应该显示登录成功,并跳转到论坛首页。

实际结果:系统确实显示了登录成功,并且跳转到了论坛首页,与预期结果一致

场景2:输入一个已经存在的用户名,并且输入错误的密码,然后点击登录按钮。

预期结果:系统应该显示登录失败,并给出相应的错误提示。

实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。

场景3:输入一个不存在的用户名,然后点击登录按钮。

预期结果:系统应该显示登录失败,并给出相应的错误提示。

实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。

4. 自动化测试

4.1. 封装常用的方法


        这部分代码是为了在测试过程中初始化和关闭浏览器驱动,并提供了截图功能来记录测试执行的结果。

package com.example.seleniumautotestpractice.commom;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;

public class Utils {
/**
 * 创建驱动对象,隐式等待
  */
    public static WebDriver driver;

    public static WebDriver createWebDriver() {
        if (driver == null) {
            WebDriverManager.chromedriver().setup();
            ChromeOptions options = new ChromeOptions();
            //允许访问所有连接
            options.addArguments("--remote-allow-origins=*");
            driver = new ChromeDriver(options);
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
        }
        return driver;
    }

    /**
     * 屏幕截图
     */
    public void getshot(String str) throws IOException {
        SimpleDateFormat sim1=new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2=new SimpleDateFormat("HHmmssSS");
        String dirTime=sim1.format(System.currentTimeMillis());
        String fileTime=sim2.format(System.currentTimeMillis());

        String filename="./src/test/image/"+dirTime+"/"+str+"-"+fileTime+".png";
        File srcShot= ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(srcShot,new File(filename));
    }


    public Utils(String url) {
        //调用driver对象
        driver = createWebDriver();
        //访问URL
        driver.get(url);
    }
}

提供了以下功能:

  • 在测试开始前,通过 Selenium WebDriver 初始化浏览器驱动(ChromeDriver)。
  • 获取屏幕截图并保存的方法(getScreenShot),根据时间戳生成文件名并将截图保存到指定路径。

 

4.2. 注册页面测试

4.2.1. 验证注册成功的情况

场景1:注册用户名在数据库中不存在,昵称正常输入,两次密码输入一致,执行注册操作后,预期注册成功并跳转回登录页面。

具体流程如下:

  • 使用 WebDriver 打开登录页面。
  • 点击页面中的注册按钮,跳转到注册页面。
  • 输入不存在于数据库中的用户名 “haha17”、昵称 “haha”,并输入两次相同的密码 “123”。
  • 勾选同意协议复选框。
  • 点击注册按钮进行注册。
  • 等待页面跳转,然后获取当前页面的 URL。
  • 判断页面跳转后的 URL 是否是预期的登录页面的 URL。
  • 如果跳转成功,断言注册成功。
void regSuccess() throws IOException, InterruptedException {
        //创建驱动对象,并打开登陆页面
        createDriver("http://47.93.222.41:58080/sign-in.html");
 
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //点击注册按钮跳转
        driver.findElement(By.cssSelector("body > div.page.page-center >" +
                                         " div > div > div:nth-child(1) > div" +
                                         " > div.text-center.text-muted.mt-3 > a")).click();
        //输入用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("haha17");
        //输入昵称
        driver.findElement(By.cssSelector("#nickname")).sendKeys("haha");
        //输入密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        //输入确认密码
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
        //点击同意许可
        driver.findElement(By.cssSelector("#policy")).click();
        //点击注册按钮
        driver.findElement(By.cssSelector("#submit")).click();
        System.out.println(driver.findElement(By.cssSelector("#submit")).getText());
        Thread.sleep(2000);
        //注册成功后会跳转到登录页面
        String loginHtmlUrl = "http://127.0.0.1:9580/sign-in.html";
        //获取当前页面的URL
        String nowUrl = driver.getCurrentUrl();
        //截图记录
        getScreenshot(getClass().getName());
        //断言
        assert nowUrl.equals(loginHtmlUrl);
    }

自动化测试测试结果:pass

4.2.2. 验证注册失败的情况

场景2:用户名已存在于数据库中,但昵称和两次输入的密码仍然符合要求,执行注册操作后,预期注册失败并停留在注册页面。

具体流程如下:

  • 使用 WebDriver 打开登录页面。
  • 点击页面中的注册按钮,跳转到注册页面。
  • 输入已存在于数据库中的用户名 “wangzian”、昵称 “hz”,并输入两次相同的密码 “123”。
  • 勾选同意协议复选框。
  • 点击注册按钮进行注册。
  • 等待页面响应,获取当前页面的 URL。
  • 判断页面是否停留在注册页面,即当前页面的 URL 是否是预期的注册页面的 URL。
  • 如果停留在注册页面,断言注册失败。
 void regAbnomal() throws IOException, InterruptedException {
        //创建驱动对象,并打开登陆页面
        createDriver("http://47.93.222.41:58080/sign-in.html");
 
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //点击注册按钮跳转
        driver.findElement(By.cssSelector("body > div.page.page-center >" +
                " div > div > div:nth-child(1) > div" +
                " > div.text-center.text-muted.mt-3 > a")).click();
        //输入用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        //输入昵称
        driver.findElement(By.cssSelector("#nickname")).sendKeys("hz");
        //输入密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        //输入确认密码
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
        //点击同意许可
        driver.findElement(By.cssSelector("#policy")).click();
        //点击注册按钮
        driver.findElement(By.cssSelector(" #submit")).click();
 
        Thread.sleep(2000);
        //注册失败后不会跳转
        String regHtmlUrl = "http://127.0.0.1:9580/sign-up.html";
        //获取当前页面的URL
        String nowUrl = driver.getCurrentUrl();
        //截图记录
        getScreenshot(getClass().getName());
        //断言
        assert nowUrl.equals(regHtmlUrl);
    }

自动化测试测试结果:pass

4.3. 登录界面测试

4.3.1. 登录失败测试

场景1:用户名正确但密码错误,执行登录操作后,预期登录失败并出现警告提示。

具体流程如下:

  • 使用 WebDriver 打开论坛的登录页面。
  • 输入正确的用户名 “admin” 和错误的密码 “123”。
  • 点击登录按钮进行登录操作。
  • 等待页面响应并获取警告提示的文本内容。
  • 验证警告提示内容是否与预期一致。
  • 截图保存测试结果。
  • 断言警告提示内容与预期是否一致
 void loginAbnormal() throws IOException, InterruptedException {
//        使用 WebDriver 打开论坛的登录页面。
        createDriver("http://47.93.222.41:58080/sign-in.html");
 
//        输入正确的用户名 “wangzian” 和错误的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("1234");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//        等待页面响应并获取警告提示的文本内容。
        String str = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
//        验证警告提示内容是否与预期一致。
        getScreenshot(getClass().getName());
//        截图保存测试结果。
        assert str.equals("警告");
    }

自动化测试测试结果:pass

4.3.2. 登录成功测试

场景2:用户名和密码都正确,执行登录操作后,预期登录成功并跳转到系统主页。

具体流程如下:

  • 使用 WebDriver 打开论坛的登录页面。
  • 用户名和密码数据,例如 “wutong, 123456”。
  • 输入正确的用户名和密码。
  • 点击登录按钮进行登录操作。
  • 等待页面响应并获取当前首页元素。
  • 确保登录成功后跳转到系统主页。
    void loglinSuccess() throws IOException {
        createDriver("http://47.93.222.41:58080/sign-in.html");
 
//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
        getScreenshot(getClass().getName());
//        截图保存测试结果。
    }

自动化测试测试结果:pass

4.4. 显示帖子列表测试

4.4.1. 未登录状态下测试

场景1:未登录状态下,直接通过 URL 访问主页帖子列表,预期返回登录页面。

具体流程如下:

  • 使用 WebDriver 直接访问论坛的主页列表页面。
  • 获取当前页面的 URL。
  • 验证当前页面的 URL 是否是预期的登录页面的 URL。
  • 截图保存测试结果。
  • 断言当前页面的 URL 是否与预期的登录页面的 URL 一致,确保未登录状态下访问主页列表会被重定向到登录页面。
void BlogList1() throws InterruptedException, IOException {
        //打开列表页
        createDriver("http://47.93.222.41:58080/index.html");
        String loginUrl = "http://47.93.222.41:58080/sign-in.html";
        Thread.sleep(2000);
        //获取当前页面的URl
        String nowUrl = driver.getCurrentUrl();
        //截图记录
        getScreenshot(getClass().getName());
        //断言
        assert nowUrl.equals(loginUrl);
    }

自动化测试测试结果:pass

4.4.2. 登录状态下测试

场景2:登录状态下,进入论坛首页,验证页面是否正确显示帖子相关的控件信息。

具体流程如下:

  • 使用 WebDriver 进行登录操作,输入用户名和密码并点击登录按钮。
  • 等待页面响应,并验证页面的导航栏是否显示了 “首页” 文本。
  • 截图保存测试结果。
  • 断言导航栏中是否包含 “首页” 文本,确保页面正确显示了导航栏信息。
  • 查看是否有发布帖子的按钮,并点击该按钮。
  • 等待页面响应,查看是否跳转到了帖子编辑页面,并验证页面是否包含 “发新贴” 文本。
  • 截图保存测试结果。
  • 断言页面是否包含 “发新贴” 文本,确保跳转到了帖子编辑页面
 void BlogList2() throws InterruptedException, IOException {
        //打开登录页
        createDriver("http://47.93.222.41:58080/sign-in.html");
 
//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
//         定位发帖子按钮并点击
        driver.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 text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
//        截图
        getScreenshot(getClass().getName());
        assert text.equals("发新贴");
    }

自动化测试测试结果:pass

4.5. 发布帖子测试

4.5.1. 登录后测试标题和内容其中一个为空

场景1:登录后,点击发布帖子,进入编辑页分别 输入帖子标题但不输入帖子内容 和 不输入帖子标题但输入帖子内容,分别点击发布按钮,测试这两种情况能否成功发布。

具体流程如下:

场景1):登录状态下,测试标题和内容其中一个为空时,发布帖子失败并出现相应提示。

  • 打开登录页面,输入用户名和密码进行登录。
  • 点击发布帖子按钮,进入帖子编辑页面。
  • 第一个场景中,只输入标题而不输入内容,点击发布按钮。
  • 验证发布失败后页面出现的提示信息是否为 “请输入帖子内容”。
  • 截图保存测试结果并断言提示信息是否符合预期。

场景2):不输入标题,只输入内容时,发布帖子失败并出现相应提示。

  • 清空标题输入框内容。
  • 编辑帖子内容,因为使用了第三方md插件,不能直接通过sendkeys输入内容,通过模拟点击事件插入内容。
  • 点击发布按钮。
  • 验证发布失败后页面出现的提示信息是否为 “请输入帖子标题”。
  • 截图保存测试结果并断言提示信息是否符合预期。
   void writeBlog1() throws IOException, InterruptedException {
        //打开登录页
        createDriver("http://47.93.222.41:58080/sign-in.html");
 
//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
//         定位发帖子按钮并点击
        driver.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 text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
//        截图
        getScreenshot(getClass().getName());
        //确认进入发贴页
        assert text.equals("发新贴");
        //输入标题
        driver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");
        Thread.sleep(2000);
 
        //点击发布#article_post_submit
        // 使用 Actions 类可以模拟鼠标操作
        WebElement element = driver.findElement(By.cssSelector("#article_post_submit"));
        Actions actions = new Actions(driver);
        actions.moveToElement(element).click().perform();
 
        //查看提示
         text = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
        getScreenshot(getClass().getName());
         assert text.equals("提示");
        //清空标题,输入内容
        driver.findElement(By.cssSelector("#article_post_title")).clear();
        //内容区域不支持sendKeys输入,但是可以点击
        driver.findElement(By.cssSelector("#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i")).click();
        //点击发布
        driver.findElement(By.cssSelector("#article_post_submit")).click();
        text = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
        getScreenshot(getClass().getName());
        assert text.equals("提示");
    }

自动化测试测试结果:pass

4.5.2. 登录后测试标题和内容都不为空

场景:登录后,点击发布帖子,进入编辑页输入帖子标题帖子内容,预期能够成功发布。

具体流程如下:

  • 打开登录页面,输入用户名和密码进行登录。
  • 点击发布帖子按钮,进入帖子编辑页面。
  • 输入标题和内容,这里测试输入的标题为 “测试发布”。
  • 点击发布按钮。
  • 等待页面响应,验证发布成功后是否跳转到首页,并查看首页的帖子列表中是否包含刚发布的标题 “测试发布”。
  • 截图保存测试结果并断言首页帖子列表中是否包含期望的标题。
 void writeBlog2() throws InterruptedException, IOException {
        //打开登录页
        createDriver("http://47.93.222.41:58080/sign-in.html");
 
//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
//         定位发帖子按钮并点击
        driver.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 text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
//        截图
        getScreenshot(getClass().getName());
        //确认进入发贴页
        assert text.equals("发新贴");
        //输入标题
        driver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");
        //点击的方式加入内容
        driver.findElement(By.cssSelector("#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i")).click();
 
        Thread.sleep(2000);
 
        //点击发布#article_post_submit
        // 使用 Actions 类可以模拟鼠标操作
        WebElement element = driver.findElement(By.cssSelector("#article_post_submit"));
        Actions actions = new Actions(driver);
        actions.moveToElement(element).click().perform();
        Thread.sleep(2000);
        //检查首页标签,判断是否发布成功
        text = driver.findElement(By.cssSelector("#article_list_board_title")).getText();
        //截图记录
        getScreenshot(getClass().getName());
        assert text.equals("首页");
    }

自动化测试测试结果:pass

4.6. 查询帖子内容测试

场景1:登录后,查看帖子内容,分别查看 帖子作者和当前登录用户一致 和 不一致 的帖子,是否正确显示对应帖子的信息。

具体流程如下:

  • 点击帖子标题为“测试”的帖子,验证帖子标题是否正确,是否有点赞按钮,并截图保存测试结果。
  • 点击帖子标题为“自动化测试”的帖子,验证帖子标题是否正确,是否有点赞按钮、编辑按钮和删除按钮,并截图保存测试结果。
    void showBlog() throws InterruptedException, IOException {
        //查看别人的贴子,有点赞按钮,没有删除按钮
        createDriver("http://47.93.222.41:58080/sign-in.html");
        //        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        //点击页面第一个帖子的标题
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).click();
        //定位发布时间,浏览,点赞,评论标签
        driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none " +
                "> div > div.col-auto.d-none.d-md-inline > ul"));
        //定位点赞按钮
        String text = driver.findElement(By.cssSelector("#details_btn_like_count")).getText();
        //截图
        getScreenshot(getClass().getName());
        assert text.equals("点赞");
    }

自动化测试测试结果:pass

4.7 编辑修改帖子测试

场景1:登录状态下,修改登录用户自己的帖子,修改标题和内容,重新发布,重新查看帖子内容看是否更新。

具体流程如下:

  • 登录并点击帖子标题为“与风行”的帖子,进入帖子详情页。
  • 点击编辑按钮,跳转到编辑页面。
  • 清空原标题,更新标题为“自动化修改标题”,同时添加样式表示修改。
  • 点击提交按钮,保存修改并跳转到主页。
  • 验证帖子列表中相应帖子的标题是否已更新为“自动化修改标题”。
 void updataBlog() throws InterruptedException, IOException {
        //查看自己的贴子,有点赞按钮,有删除按钮
        createDriver("http://47.93.222.41:58080/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        getScreenshot(getClass().getName());
        //点击页面第一个帖子的标题
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).click();
        Thread.sleep(2000);
        //定位编辑按钮,并点击
        driver.findElement(By.cssSelector("#details_artile_edit > span")).click();
        Thread.sleep(2000);
        //定位标题输入框,并清除之前的内容
        driver.findElement(By.cssSelector("#edit_article_title")).clear();
        //重新输入
        driver.findElement(By.cssSelector("#edit_article_title")).sendKeys("自动化修改标题!");
        //点击页面下方提交按钮
        // 使用 Actions 类可以模拟鼠标操作
        WebElement element = driver.findElement(By.cssSelector("#edit_article_submit > span"));
        Actions actions = new Actions(driver);
        actions.moveToElement(element).click().perform();
        Thread.sleep(2000);
        String text = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).getText();
        //截图记录
        getScreenshot(getClass().getName());
        assert text.equals("自动化修改标题!");
    }

自动化测试测试结果:pass

4.8. 删除帖子测试

场景1:登录状态下,进入帖子详情页,点击删除按钮,删除帖子成功,成功跳转回帖子列表页面。

具体流程如下:

  • 登录并点击第一个帖子标题为“测试发布”的帖子,进入帖子详情页。
  • 在帖子详情页点击删除按钮,弹出删除确认弹窗。
  • 点击确定按钮,确认删除帖子。
  • 验证帖子列表中第一条帖子标题是否已更新为其他值(比如"1111")
void deleteBlog() throws InterruptedException, IOException {
        //删除自己写的帖子
        createDriver("http://47.93.222.41:58080/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        //点击进入第一个贴子,并记录第二个帖子标题
        String text = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(2) " +
                "> div > div.col > div.text-truncate > a > strong")).getText();
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).click();
        Thread.sleep(1000);
        //定位删除按钮,并点击
        driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div " +
                "> div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end " +
                "> div > div:nth-child(3) > div > a > span")).click();
        Thread.sleep(1000);
        //定位提示弹窗,并点击删除按钮
        driver.findElement(By.cssSelector("#details_artile_delete")).click();
        Thread.sleep(1000);
        //跳转到首页,获取的一个帖子的标题,用于对比
        String newtext = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).getText();
        getScreenshot(getClass().getName());
        assert newtext.equals(text);
    }

自动化测试测试结果:pass

4.9. 我的帖子查询测试

场景1:登录状态下,进入主页,点击我的帖子,跳转到个人中心页面,显示用户昵称等信息。

具体流程如下:

  1. 登录并点击头像,进入个人中心查看选项。
  2. 点击我的帖子。
  3. 验证我的帖子详情页面中注册账号时间。
 void myBlog() throws InterruptedException, IOException {
        createDriver("http://47.93.222.41:58080/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //Thread.sleep(1000);
        //点击头像
        driver.findElement(By.cssSelector("#index_nav_avatar")).click();
        //点击我的帖子
        driver.findElement(By.cssSelector("#index_user_profile")).click();
        //进入个人主页可以看到账号注册时间,查看元素
        driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none " +
                "> div > div > div.col > div > div:nth-child(3)"));
        getScreenshot(getClass().getName());
    }

自动化测试测试结果:pass

4.10. 点赞测试

场景1:登录状态下,进入帖子详情页,点击点赞按钮,验证点赞数是否相应增加。

具体流程如下:

  1. 登录并进入帖子详情页。
  2. 获取点赞前的点赞数。
  3. 点击点赞按钮。
  4. 获取点赞后的点赞数。
  5. 验证点赞后的点赞数是否等于点赞前的点赞数加一
void showLike() throws IOException, InterruptedException {
        createDriver("http://47.93.222.41:58080/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //Thread.sleep(1000);
        //点击一个帖子
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div " +
                "> div.col > div.text-truncate > a > strong")).click();
        Thread.sleep(1000);
 
        //查看帖子的点赞数
        String cur = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
        //点击点赞按钮
        driver.findElement(By.cssSelector("#details_btn_like_count")).click();
        Thread.sleep(1000);
        String now = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
        getScreenshot(getClass().getName());
        int num = Integer.parseInt(now)-Integer.parseInt(cur);
        assert num==1;
    }

    自动化测试测试结果:pass

    4.11. 退出测试 

     场景1:登录后,点击用户头像下的退出按钮,跳转回登录界面,退出成功。

    具体流程如下:

    登录并进入个人中心页面。

    点击头像,再点击退出。

    验证退出后是否跳转到登录页面 

    void Exit() throws IOException {
            createDriver("http://47.93.222.41:58080/sign-in.html");
            // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
            driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
            driver.findElement(By.cssSelector("#password")).sendKeys("123");
            // 点击登录按钮进行登录操作。
            driver.findElement(By.cssSelector("#submit")).click();
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
            //Thread.sleep(1000);
            //点击头像
            driver.findElement(By.cssSelector("#index_nav_avatar")).click();
            //点击退出
            driver.findElement(By.cssSelector("#index_user_logout > span")).click();
            getScreenshot(getClass().getName());
            //获取当前URL
            String url = driver.getCurrentUrl();
            assert url.equals("http://127.0.0.1:9580/sign-in.html");
     
        }

     

    5.遗留风险

    测试时间紧张,先保证博客主体功能没问题,可能存在细节测试不到位

    6.测试结果评估

    1)主线功能测试通过,项目可以上线

    2)项目上线后高优观察线上数据


    http://www.kler.cn/a/600550.html

    相关文章:

  1. 新书速览|OpenCV计算机视觉开发实践:基于Python
  2. 跨境选品利器:基于速卖通API实时监控爆款商品价格与库存波动
  3. 3.25-2request库
  4. MATLAB 2024b深度学习,图神经网络(GNN)
  5. 正弦函数的连续傅里叶变换正弦序列的DTFT
  6. HarmonyOS 之 @Require 装饰器自学指南
  7. DeepSeek-V3-0324 模型发布:开源 AI 性能再攀高峰,推理与编码能力逼近顶级闭源模型
  8. python康复日记-request库的使用,爬虫自动化测试
  9. ToolsSet之:快捷键和速查表
  10. VS Code连接远程服务遇到的问题
  11. 蓝之洋科技以AI智能制造引领变革,推动移动电源产业迈向高端智能化!
  12. 三分钟读懂微服务
  13. 蓝桥杯-符号变反操作(差分)
  14. Weblogic
  15. shopify跨境电商行业前景与规模
  16. 【Linux-驱动开发-pinctrl子系统】
  17. SpringBoot-配置文件中敏感信息的加密保姆级教程
  18. 高度电路中时序设计之二
  19. (C语言)习题练习 (sizeof和strlen)
  20. UE5摄像机震屏/晃动效果