笔锋社区测试报告

一. 项目功能

博客系统涵盖登录、注销、撰写博客及删除博客等核心功能,各功能具体说明如下:​

1.登录功能​

系统未开放账户注册,用户登录所需的用户名与密码已预先存储于后端数据库。用户输入正确的用户名和密码,验证通过后将跳转至列表页面。在未登录状态下,页面右上角的 “主页” 和 “写博客” 按钮点击后均会引导用户进入登录页面。​

2.列表页面功能​

内容展示:在列表页面,用户可查看有限数量的博客简介,包含博客标题、发布时间以及内容。

​用户信息模块:页面左侧展示已登录用户信息,以及文章数量、分类数量等相关数据。​

功能按钮:右上角设有 “主页”“写博客” 和 “注销” 三个功能按钮。其中,“主页” 点击后刷新当前列表页面;“写博客” 可跳转至博客编辑页面;“注销” 则退出当前用户登录状态,返回登录页面。​

3.详情页面功能​

在列表页面点击 “查看全文” 按钮,即可进入对应博客的详情页面,查看文章完整内容。详情页面右上角提供 “主页”“写博客”“删除” 和 “注销” 四个功能按钮。点击 “删除” 按钮,该篇博客将从系统中移除,并自动跳转回列表页面,完成删除操作。​

4.写博客功能​

用户成功登录后,在任意页面点击 “写博客” 按钮,均可进入博客编辑页面。在此页面,用户可进行博客内容的创作,完成编辑后点击 “发布文章”,博客将成功发布,并自动跳转至列表页面展示新发布的文章。

自动化测试用例

二、功能测试

1.正常登录

2.添加/编辑博客

3.发布成功后查看博客详情

4.删除博客

删除前

删除后

5. 注销: 点击注销后返回登录页 

三、准备工作

  1. 创建 Maven 项目:在 IDEA 中创建一个 Maven 项目,配置好驱动管理,并在 pom.xml 中导入以下相关依赖:
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>5.7.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
    
    <!-- JUnit 5 依赖 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.10.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>5.10.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.9.1</version>
        <scope>test</scope>
    </dependency>

  2. 初始化浏览器驱动:创建一个类来初始化和释放浏览器驱动,确保在每个测试用例执行前后正确管理驱动资源。
    package Blog;
    
    import io.github.bonigarcia.wdm.WebDriverManager;
    import org.junit.jupiter.api.AfterAll;
    import org.junit.jupiter.api.BeforeAll;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    
    public class InitAndEnd {
        static WebDriver webDriver;
    
        @BeforeAll
        static void setUp() {
            // 自动管理驱动程序
            WebDriverManager.chromedriver().setup();
            ChromeOptions options = new ChromeOptions();
            
            // 配置浏览器选项,允许访问所有链接
            options.addArguments("--remote-allow-origins=*");
            
            webDriver = new ChromeDriver(options);
        }
    
        @AfterAll
        static void tearDown() {
            webDriver.quit();
        }
    }

    四、登录界面测试

    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    public void loginSuccess(String username, String password, String expectedUrl) {
        // 打开博客登录页面
        webDriver.get("http://127.0.0.1:8080/blog_login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        
        // 输入用户名和密码
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        
        // 点击提交按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        
        // 验证登录后是否跳转到正确的页面
        String currentUrl = webDriver.getCurrentUrl();
        Assertions.assertEquals(expectedUrl, currentUrl);
        
        // 验证用户名显示是否正确
        String displayedUsername = webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
        Assertions.assertEquals(username, displayedUsername);
    }

    五、博客列表界面测试

    @Order(2)
    @Test
    public void verifyBlogList() {
        // 打开博客列表页面
        webDriver.get("http://127.0.0.1:8080/blog_list.html");
        
        // 验证博客列表中是否有文章显示
        int titleCount = webDriver.findElements(By.cssSelector(".title")).size();
        Assertions.assertNotEquals(0, titleCount);
    }

    六、博客详情界面测试

    @Order(4)
    @ParameterizedTest
    @MethodSource("generator")
    void verifyBlogDetail(String expectedUrlPart, String expectedPageTitle, String expectedBlogTitle) {
        // 点击查看第一篇博客的详情
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
        
        // 获取当前页面信息
        String currentUrl = webDriver.getCurrentUrl();
        String currentPageTitle = webDriver.getTitle();
        String currentBlogTitle = webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.title")).getText();
        
        // 验证页面信息
        Assertions.assertEquals(expectedPageTitle, currentPageTitle);
        Assertions.assertEquals(expectedBlogTitle, currentBlogTitle);
        
        // 验证URL包含预期部分(博客ID可能动态变化)
        if (currentUrl.contains(expectedUrlPart)) {
            System.out.println("博客URL测试通过");
        } else {
            System.out.println("测试不通过");
        }
    }

    七、博客编辑界面测试

  3. 1. 写博客并发布校验

    @Order(3)
    @Test
    public void createNewBlog() throws InterruptedException {
        // 点击写博客按钮
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        
        // 使用 JavaScript 输入博客标题
        ((JavascriptExecutor) webDriver).executeScript("document.getElementById(\"title\").value=\"自动化测试\"");
        Thread.sleep(3000);
        
        // 点击发布按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);
        
        // 验证是否成功跳转到博客列表页
        String currentUrl = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://127.0.0.1:8080/blog_list.html", currentUrl);
    }

    2. 校验已发布博客信息

    @Order(5)
    @Test
    public void verifyPublishedBlog() {
        // 打开博客列表页面
        webDriver.get("http://127.0.0.1:8080/blog_list.html");
        
        // 获取第一篇博客的标题和发布时间
        String firstBlogTitle = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        String firstBlogTime = webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div[2]")).getText();
        
        // 验证博客标题
        Assertions.assertEquals("自动化测试", firstBlogTitle);
        
        // 验证博客发布时间(示例中假设为2024-06-06)
        if (firstBlogTime.contains("2024-06-06")) {
            System.out.println("时间测试通过");
        } else {
            System.out.println("当前时间是: " + firstBlogTime);
            System.out.println("测试不通过");
        }
    }

    八、博客删除功能测试

    @Order(6)
    @Test
    public void deleteBlog() throws InterruptedException {
        // 打开博客列表页面
        webDriver.get("http://127.0.0.1:8080/blog_list.html");
        
        // 点击查看第一篇博客详情
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
        
        // 点击删除按钮并确认弹窗
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();
        Thread.sleep(2000);
        webDriver.switchTo().alert().accept();
        
        // 验证删除后第一篇博客不再是之前发布的文章
        String firstBlogTitle = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        Assertions.assertNotEquals("自动化测试", firstBlogTitle);
    }

    九、注销功能测试

    @Order(7)
    @Test
    void logout() {
        // 点击注销按钮
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        
        // 验证是否成功跳转到登录页面
        String currentUrl = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://127.0.0.1:8080/blog_login.html", currentUrl);
        
        // 验证登录页面上的提交按钮存在
        WebElement submitButton = webDriver.findElement(By.cssSelector("#submit"));
        Assertions.assertNotNull(submitButton);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值