个人博客系统测试报告

一.  项目背景

  1. 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将其部署到云服务器上。前端主要有四个页面构成:登录页、列表页、详情页以及编辑页,以上模拟实现了最简单的个人博客系统。其结合后端实现了以下的主要功能:登录、编辑博客、注销、删除博客、以及强制登录等功能。
  2. 但是该项目没有设计用户注册功能,只能提前在数据库中存储用户信息后经过校验登录;并且用户头像不能自己设定,在进行前端页面的书写过程中已经将头像的图片写为静态了;而用户信息中的文章数以及分类数也没有在后端中具体实现,直接在前端页面中写为了静态的。
  3. 该个人博客系统可以实现个人用户简单的博客记录,时间、标题、内容以及发布者等都可以进行详细地查看。。

 二. 项目功能

该个人博客系统主要实现了以下几个功能:登录、注销、写博客以及删除博客等功能。

  • 登录功能:用户名以及密码已经在后端写入了数据库,没有实现账户注册功能,即:用户名以及密码是已经存在的。登录成功后就会跳转到列表页面。在右上角存在主页和写博客两个按钮,但是在未登录情况下按下均只会跳转到登录页面。
  • 列表页面:可以在列表页查看有限数量的博客简介,其包括博客标题、发布时间以及内容概要。在左侧可以看到登录的用户以及文章数、分类数等的模块。在右上角有主页、写博客和注销三个功能:主页即列表页,写博客即博客编辑页,注销即注销用户,回到登录页面。
  • 详情页面:在列表页面点击“查看全文”按钮就会跳转到详情页,此时就可以看到该篇博客的完整内容。在右上角同样有主页、写博客、删除和注销四个功能:删除即删除该篇博客,删除之后就会跳转到列表页面,该篇博客就被成功删除。
  • 写博客:在登录之后的任意界面点击“写博客”之后就会进入博客编辑页面,此时就可以进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到列表页。

三. 博客自动化测试用例

四. 功能测试

1. 正常登录

2. 新增/编辑测试

3. 发布成功并查看详情页

4. 删除博客 

删除前的博客列表

删除后的博客列表

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

五. 自动化测试 

1. 准备工作

1) 在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>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.10.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>compile</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <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-params</artifactId>
            <version>5.10.2</version>
            <scope>compile</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>

        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.10.2</version>
            <scope>compile</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();
    }

    @AfterAll
    static void TearDown() {
        webDriver.quit();
    }
}

 2. 登录界面测试

    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    public void LoginSuccess(String username, String password, String url) {

        //打开博客登录页面
        webDriver.get("http://127.0.0.1:8080/blog_login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号zhangsan
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        //输入密码123456
        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);
        //跳转到列表页
        //获取到当前页面的URL
        String cur_url = webDriver.getCurrentUrl();
        //如果URL:http://127.0.0.1:8080/blog_list.html 测试通过,反之不通过---->断言
        Assertions.assertEquals(url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //列表页展示列表信息
        //用户名是zhangsan测试通过,反之不通过
        String cur_zhangsan = webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
        Assertions.assertEquals(username,cur_zhangsan);  //前面的值是预期,后面的是测试得到的值
    }

3. 博客列表界面测试

 /*
    * 校验博客列表页
    * */
    @Order(2)
    @Test
    public void BlogList(){
        //打开博客列表
        webDriver.get("http://127.0.0.1:8080/blog_list.html");
        //获取页面上所有的博客标题对应的元素
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //如果元素不为0,测试通过
        Assertions.assertNotEquals(0,title_num);
    }

4. 博客详情界面测试

    /*
    * 博客详情页
    * URL
    * 博客标题
    * 页面title是"博客详情页"
    * */
    @Order(4)
    @ParameterizedTest
    @MethodSource("Generator")
    void BlogDetail(String expected_url, String expected_title, String expected_blog_title){
        //找到第一篇博客对应的查看全文按钮
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();

        //获取当前页面的URL
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();

        //获取当前页面title
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_title = webDriver.getTitle();

        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //获取博客标题
        String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.title")).getText();

        //校验
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //Assertions.assertEquals(expected_url,cur_url);  //会报错,因为每次的博客URL中的博客ID都不一样
        Assertions.assertEquals(expected_title,cur_title);
        Assertions.assertEquals(expected_blog_title,cur_blog_title);
        if(cur_url.contains(expected_url)){
            System.out.println("博客URL测试通过");
        }else{
            System.out.println("测试不通过");
        }

    }

5. 博客编辑界面测试

1)写博客和发布博客进行效验

    /*
    * 写博客
    *
    * */
    @Order(3)
    @Test
    public void EditBlog() throws InterruptedException {
        //找到写博客按钮,点击
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

        //通过Js将内容进行输入
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title\").value=\"自动化测试\"");
        sleep(3000);

        //点击发布
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);

        //获取当前页面URL
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://127.0.0.1:8080/blog_list.html",cur_url);  //是否跳回列表页
    }

2)效验发布博客标题

    /*
    * 校验已发布博客标题
    * 校验已发布博客时间
    * */

    @Order(5)
    @Test
    public void BlogInfoChecked() {
        webDriver.get("http://127.0.0.1:8080/blog_list.html");
        //获取第一篇博客标题
        String first_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();  //获取第一篇博客title
        //获取第一篇博客发布时间
        String first_blog_time = webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div[2]")).getText();
        //校验博客标题是不是自动化测试
        Assertions.assertEquals("自动化测试",first_blog_title);
        //如果是2024-6-5年发布的,测试通过
        if (first_blog_time.contains("2024-06-06")) {
            System.out.println("时间测试通过");
        }else {
            System.out.println("当前时间是: " + first_blog_time);
            System.out.println("测试不通过");
        }
    }

5. 博客删除功能测试

    /*
    * 删除刚才发布的博客
    * 弹窗处理
    * */
    @Order(6)
    @Test
    public void DeleteBlog() throws InterruptedException {
        //打开博客列表页面
        webDriver.get("http://127.0.0.1:8080/blog_list.html");

        //点击查看全文按钮
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();

        //点击删除页面
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();
        sleep(2000);
        webDriver.switchTo().alert().accept();  //弹窗点击确认

        //校验是否删除-->检验博客列表页第一篇题目是不是之前发布的"自动化测试"
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String first_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        Assertions.assertNotEquals("自动化测试",first_blog_title);
    }

6. 注销功能测试

    /*
    * 注销
    * */
    @Order(7)
    @Test
    void Logout() {
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //点击注销
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();

        //校验URL(登录)
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://127.0.0.1:8080/blog_login.html",cur_url);
        //校验提交按钮
        WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));
        Assertions.assertNotNull(webElement);
    }

五.  整体自动化测试

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!非常抱歉,我无法直接帮助您重新部署一个 Hexo 个人博客测试。作为一个文本生成模型,我无法执行实际的代码操作。但是,我可以为您提供一些指导来重新部署 Hexo 博客。 首先,您可以按照以下步骤重新部署 Hexo 个人博客: 1. 确保您已经安装了 Node.js 环境和 Git 工具。 2. 打开终端或命令提示符,并使用以下命令安装 Hexo: ```shell npm install -g hexo-cli ``` 3. 创建一个新的 Hexo 博客项目: ```shell hexo init myblog cd myblog npm install ``` 4. 配置 Hexo 博客: 在项目根目录下找到 `_config.yml` 文件,并根据您的需要进行配置。您可以设置博客标题、作者信息、主题等。 5. 创建新的文章: 使用以下命令创建新的文章: ```shell hexo new "My First Post" ``` 这将在 `source/_posts` 目录下创建一个名为 `my-first-post.md` 的 Markdown 文件。 6. 编辑文章: 使用 Markdown 编辑器或文本编辑器编辑新创建的文章文件,添加您的内容。 7. 预览博客: 使用以下命令启动本地服务器并预览博客: ```shell hexo server ``` 在浏览器中访问 `http://localhost:4000` 即可查看您的博客。 8. 部署博客: 当您准备好将博客部署到服务器或静态托管平台时,可以使用以下命令生成静态文件并部署: ```shell hexo generate hexo deploy ``` 请注意,部署步骤可能因您选择的部署方式而有所不同。您可以将博客部署到 GitHub Pages、Netlify 或其他托管平台,具体步骤请参考 Hexo 文档或所选托管平台的文档。 希望这些步骤对您有所帮助!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值