博客系统测试报告【可上线】

news2024/9/22 15:44:19

目录

1、测试概述

1.1、项目名称

1.2、测试时间

1.3、编写目的

1.4、测试范围

2、测试计划

2.1、测试用例

2.1.1、注册/登录模块

2.1.2、个人中心模块

2.1.3、找回密码模块

2.1.4、博客主列表模块

2.1.5、个人博客列表模块

2.1.6、个人草稿列表模块

2.1.7、博客详情模块

2.1.8、博客编辑页

2.2、bug等级划分

2.3、测试环境与配置

3、测试执行

4、自动化测试

4.1、准备工作

4.2、注册自动化测试

4.3、登录自动化测试

4.4、找回密码自动化测试

4.5、个人中心自动化测试

4.6、博客列表页自动化测试

4.7、个人博客列表页自动化测试

4.8、草稿列表页自动化测试

4.9、博客详情页自动化测试

4.10、博客编辑页自动化测试

3、bug汇总

3.1、功能测试中发现的bug

 3.2、兼容性测试中发现的bug

4、总结

4.1、缺陷和限制

4.2、综合评价


1、测试概述

1.1、项目名称

        博客系统测试

1.2、测试时间

        2023年4月13日——2023年4月。。。。

1.3、编写目的

        对自己所编写的博客系统项目中所有的软件测试活动中,包括测试进度、资源问题、风险进行评估,总结测试活动的成功经验与不足,以便今后更好的开展测试工作

1.4、测试范围

主体模块测试内容
用户注册新用户、登录系统、修改密码、找回密码、个人详细信息
博客博客主列表页、个人博客列表页、个人博客草稿页、博客全文

2、测试计划

2.1、测试用例

2.1.1、注册/登录模块

 

2.1.2、个人中心模块

 

2.1.3、找回密码模块

 

2.1.4、博客主列表模块

 

2.1.5、个人博客列表模块

 

2.1.6、个人草稿列表模块

 

2.1.7、博客详情模块

 

2.1.8、博客编辑页


2.2、bug等级划分

  • 崩溃:系统无法运行
  • 严重:系统可以运行,但是不稳定
  • 一般:系统可以稳定运行,但影响用户使用及体验感
  • 次要:建议修改,即可优化部分,不影响用户使用和体验

2.3、测试环境与配置

  • 服务器:云服务器CentOS
  • PC机:联想yoga13s
  • 平台:Windows
  • 移动端:OPPO A93 - Android 
  • 浏览器:Chrome、FireFox、Edge
  • 自动化测试工具:Selenium + Junit5

3、测试执行

        界面测试:使用手工测试,部分使用自动化测试

        安全测试:使用手工测试

        易用性测试:使用手工测试

        兼容性测试:也是使用手工测试,由于本人只有一部手机、一台电脑,所以除了在电脑上使用Chrome进行自动化测试以外,安卓的兼容性测试、电脑的不同浏览器:Edge、Firefox都是用手工测试

         功能测试:部分使用自动化测试,详情继续往下看~

        所有的手工测试,在没有bug的情况下,我就不写在这上面了~


4、自动化测试

4.1、准备工作

创建一个maven项目,目录:

引入依赖:

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>
        <!--   保存屏幕截图文件需要用到的包     -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-edge-driver</artifactId>
            <version>4.2.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

 commom包下AutoTestUtils类【封装一些公共方法,方便调用】:

package com.BlogAutoTest.commom;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;


import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:13:02
 */
public class AutoTestUtils {
    public static EdgeDriver driver;

    //创建驱动对象
    public static EdgeDriver createDriver() {
        if(driver == null) {
            EdgeOptions options = new EdgeOptions();
            options.addArguments("--remote-allow-origins=*");
            driver = new EdgeDriver(options);
            //创建隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }

    //保存屏幕截图
    public static void getScreenShot(String str) throws IOException {
        List<String> list = getTime();
        //dir+filename
        //./指的是当前的项目路径下,也就是BlogAutoTest下
        //./src/test...相对路径
        String filename = "./src/test/java/com/BlogAutoTest/"+list.get(0)+"/" + str + "_" + list.get(1)+".png";
        File srcFile = driver.getScreenshotAs(OutputType.FILE);
        //放到指定位置
        FileUtils.copyFile(srcFile,new File(filename));

    }

    public static List<String> getTime() {
        //文件按照天的维度按文件进行保存
        //文件格式 20230302-123244毫秒
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyMMdd-HHmmssSSS");
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyyMMdd");
        String filename = simpleDateFormat1.format(System.currentTimeMillis());
        String dirname = simpleDateFormat2.format(System.currentTimeMillis());
        List<String> list = new ArrayList<>();
        list.add(dirname);
        list.add(filename);
        return list;
    }


}

4.2、注册自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;



import java.awt.*;
import java.io.IOException;

import static com.BlogAutoTest.commom.AutoTestUtils.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:12:55
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class RegTest {
    public static EdgeDriver driver = createDriver();

    //进入页面
    @BeforeAll
    public static void baseControl() throws InterruptedException {
        driver.get("http://43.139.193.116:8085/blog/reg.html");
    }

    //1------检查注册页面是否正常打开
    @Test
    @Order(1)
    void regPageLoadRight() throws InterruptedException {
        driver.findElement(By.cssSelector("body > div.login-container > div > h3"));
        driver.findElement(By.xpath("//*[@id=\"password2\"]"));
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)"));
    }
    //2------用户名/密码为空是否有提示信息
    @Test
    @Order(2)
    void RegFail() throws IOException, InterruptedException, AWTException {
        //1、直接注册
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password2")).clear();
        //2、输入用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("cl");
        //3、输入密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        //4、输入确认密码
        driver.findElement(By.cssSelector("#password2")).sendKeys("123");
        getScreenShot(getClass().getName());
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        driver.switchTo().alert().accept();

    }

    //3-----正确注册
    @Test
    @Order(3)
    void RegRight() throws IOException, InterruptedException, AWTException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password2")).clear();
        String username = String.valueOf(System.currentTimeMillis());
        String password = "123";
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#password2")).sendKeys(password);
        getScreenShot(getClass().getName());
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        driver.switchTo().alert().accept();
    }

}

4.3、登录自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.awt.*;
import java.io.IOException;

import static com.BlogAutoTest.commom.AutoTestUtils.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:12:55
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginTest {
    public static EdgeDriver driver = createDriver();

    //打开页面
    @BeforeAll
    static void baseControl() {
        driver.get("http://43.139.193.116:8085/blog/login.html");
    }
    //1-------检查页面是否正常打开
    @Test
    @Order(1)
    void loginPageLoadRight() {
        driver.findElement(By.cssSelector("body > div.login-container > div > div.msg > a.m"));
        driver.findElement(By.cssSelector("body > div.login-container > div > div.msg > a.ms"));
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)"));
    }


    //2-------登陆失败
    @Order(2)
    @ParameterizedTest
    @CsvSource({"zhangsan,789","lisi,789"})
    void loginFail(String username,String password) throws InterruptedException, IOException, AWTException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        driver.switchTo().alert().accept();
        getScreenShot(getClass().getName());
    }

    //3--------登陆成功
    @Order(3)
    @ParameterizedTest
    @CsvSource({"cl,1118","zhangsan,123"})
    void loginSuc(String username,String password) throws IOException, InterruptedException, AWTException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        //检测是否到个人列表页
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(1)"));
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)"));
        getScreenShot(getClass().getName());
        driver.navigate().back();
    }
}

4.4、找回密码自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.io.IOException;

import static com.BlogAutoTest.commom.AutoTestUtils.createDriver;
import static com.BlogAutoTest.commom.AutoTestUtils.getScreenShot;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:13:00
 */
public class FindPasswordTest {
    public static EdgeDriver driver = createDriver();
    @BeforeAll
    static void baseControl() {
        driver.get("http://43.139.193.116:8085/blog/find_password.html");
    }
    @Test
    void FPSWPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(4) > span"));
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(3)"));
        getScreenShot(getClass().getName());
    }
}

4.5、个人中心自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.io.IOException;

import static com.BlogAutoTest.commom.AutoTestUtils.createDriver;
import static com.BlogAutoTest.commom.AutoTestUtils.getScreenShot;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:12:58
 */
public class MyCenterTest {
    public static EdgeDriver driver = createDriver();
    @BeforeAll
    static void baseControl() {
        driver.get("http://43.139.193.116:8085/blog/mycenter.html");
    }
    @Test
    void MCPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(5) > span"));
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(3)"));
        getScreenShot(getClass().getName());
    }
}

4.6、博客列表页自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.io.IOException;

import static com.BlogAutoTest.commom.AutoTestUtils.createDriver;
import static com.BlogAutoTest.commom.AutoTestUtils.getScreenShot;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:12:58
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogListTest {
    //未登录状态 + 登录状态
    //登录状态下
    public static EdgeDriver driver = createDriver();

    @BeforeAll
    static void baseControl() {

        driver.get("http://43.139.193.116:8085/blog/blog_list.html");
    }
    @Test
    void BLPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(1)"));
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(2)"));
        getScreenShot(getClass().getName());
    }



}

4.7、个人博客列表页自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.awt.*;
import java.io.IOException;


import static com.BlogAutoTest.commom.AutoTestUtils.createDriver;
import static com.BlogAutoTest.commom.AutoTestUtils.getScreenShot;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:12:58
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MyBlogListTest {
    public static EdgeDriver driver = createDriver();

    @BeforeAll
    static void baseControl() {

        driver.get("http://43.139.193.116:8085/blog/myblog_list.html");
    }

    //1------检查页面加载
    @Test
    @Order(1)
    void mListPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(1)"));
        driver.findElement(By.cssSelector("#username"));
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)"));
        getScreenShot(getClass().getName());
    }
    //2------检查文章内容是否显示过长
    @Test
    @Order(2)
    void lengthMore() {
        String artCount = driver.findElement(By.cssSelector("#artCount")).getText();
        if(artCount.equals("0")) {
            String expect = "暂无文章";
            String actual = driver.findElement(By.cssSelector("#artDiv > h3:nth-child(1)")).getText();
            Assertions.assertEquals(expect,actual);
        }else {
            String content = driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > div.desc")).getText();
            if(content.length() > 200) {
                Assertions.assertEquals(200,content.length());
            }
        }
    }
    //3------删除博客操作
    @Test
    @Order(3)
    void delRight() throws InterruptedException, AWTException {
        String artCount = driver.findElement(By.cssSelector("#artCount")).getText();
        if(artCount.equals("0")) {
            //删除
            driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(6)")).click();
            Thread.sleep(2000);
            driver.switchTo().alert().accept();
            //检查页面是否还存在当前文章
           Thread.sleep(500);
            String artCount1 = driver.findElement(By.cssSelector("#artCount")).getText();
            if(Integer.parseInt(artCount1) == (Integer.parseInt(artCount)-1)) {
                Assertions.assertTrue(true);
            } else {
                Assertions.assertTrue(false);
            }
        }
    }
    //4------修改博客
    @Test
    @Order(4)
    void ModRight() {
        String artCount = driver.findElement(By.cssSelector("#artCount")).getText();
        if(artCount.equals("0")) {
            String artTitleFirst = driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > div.title")).getText();
            //修改
            driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(5)")).click();
            //检查当前修改页面是否为当前文章
            driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button:nth-child(4)"));
//            String title = driver.findElement(By.cssSelector("#title")).getAttribute("value");
            Assertions.assertEquals(title,artTitleFirst);
//            if(title.equals(artTitleFirst)) {
//                Assertions.assertTrue(true);
//            } else {
//                Assertions.assertTrue(false);
//            }
            driver.navigate().back();
        }
    }

    //5-------查看全文
    @Test
    @Order(5)
    void lookArt() {
        String artCount = driver.findElement(By.cssSelector("#artCount")).getText();
        if(artCount.equals("0")) {
//            String artTitleFirst = driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > div.title")).getText();
            //查看全文
            driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(4)")).click();
            //检查文章详情页是否是当前文章
            //先检查页面是否加载出来了
            driver.findElement(By.cssSelector("body > div.container > div.container-right > div.upvote > button"));
            driver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(3) > div.textarea-comment > button"));
//            String title = driver.findElement(By.cssSelector("#title")).getText();
//            Assertions.assertEquals(title,artTitleFirst);
        }
    }

}

4.8、草稿列表页自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.io.IOException;

import static com.BlogAutoTest.commom.AutoTestUtils.createDriver;
import static com.BlogAutoTest.commom.AutoTestUtils.getScreenShot;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:12:57
 */

public class DraftListTest {
    public static EdgeDriver driver = createDriver();

    @BeforeAll
    static void baseControl() {
        driver.get("http://43.139.193.116:8085/blog/mydraft_list.html");
    }
    @Test
    void BDraftPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("#username"));
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > a"));
        getScreenShot(getClass().getName());
    }

}

4.9、博客详情页自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.awt.*;
import java.io.IOException;

import static com.BlogAutoTest.commom.AutoTestUtils.createDriver;
import static com.BlogAutoTest.commom.AutoTestUtils.getScreenShot;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:13:01
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogDetailTest {
    public static EdgeDriver driver = createDriver();
    @BeforeAll
    static void baseControl() {

        driver.get("http://43.139.193.116:8085/blog/blog_content.html?id=1");
    }
    @Order(1)
    @Test
    void BDetailPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div.upvote > button"));
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(3) > div.textarea-comment > button"));
        getScreenShot(getClass().getName());
    }

    //点赞
    @Order(2)
    @Test
    void VoteRight() throws InterruptedException, AWTException {
        String voteCount = "0";
        String NewVote = "0";
        try {
            voteCount = driver.findElement(By.cssSelector("#tag")).getText();//原始点赞数
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        //点赞
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div.upvote > button")).click();
        Thread.sleep(2500);
        driver.switchTo().alert().accept();
        try {
            NewVote = driver.findElement(By.cssSelector("#tag")).getText();//当前点赞数
            if(Integer.parseInt(voteCount) >= 0 && Integer.parseInt(NewVote) >= 0) {
                if ((Integer.parseInt(NewVote) + 1) == Integer.parseInt(voteCount) ||
                        (Integer.parseInt(NewVote) - 1) == Integer.parseInt(voteCount)) {
                    Assertions.assertTrue(true);
                } else {
                    Assertions.assertTrue(false);
                }
            } else {
                Assertions.assertTrue(false);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }


    }
    //评论
    @Order(3)
    @Test
    void CommentRight() throws InterruptedException, AWTException {

        String comment = "很棒!";
        //评论
        driver.findElement(By.cssSelector("#text-comment")).sendKeys(comment);
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(3) > div.textarea-comment > button")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        //检查
        String comment1 = driver.findElement(By.cssSelector("#comment-list > div > div.comment-content")).getText();
        if(comment.equals(comment1)) {
            Assertions.assertTrue(true);
        } else {
            Assertions.assertTrue(false);
        }
    }
}

4.10、博客编辑页自动化测试

package com.BlogAutoTest.Tests;

import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.edge.EdgeDriver;

import java.awt.*;
import java.io.IOException;


import static com.BlogAutoTest.commom.AutoTestUtils.createDriver;
import static com.BlogAutoTest.commom.AutoTestUtils.getScreenShot;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-04-15
 * Time:13:01
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogEditTest {
    public static EdgeDriver driver = createDriver();
    @BeforeAll
    static void baseControl() {
        driver.get("http://43.139.193.116:8085/blog/blog_add.html");
    }
    @Test
    @Order(1)
    void BEditPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("#day"));
        driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button:nth-child(4)"));
        getScreenShot(getClass().getName());
    }
    @Test
    @Order(2)
    void addArt() throws InterruptedException, AWTException {
        String title = "周一";
        driver.findElement(By.cssSelector("#title")).sendKeys(title);
        driver.findElement(By.cssSelector("#editorDiv > div.editormd-toolbar > div > ul > li:nth-child(21) > a")).click();
        driver.findElement(By.cssSelector("#editorDiv > div.editormd-toolbar > div > ul > li:nth-child(5) > a")).click();
        driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button:nth-child(6)")).click();
        Thread.sleep(2000);
        driver.switchTo().alert().accept();
        String t = driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > div.title")).getText();
        if(t.equals(title)) {
            Assertions.assertTrue(true);
        } else {
            Assertions.assertTrue(false);
        }
    }
}

3、bug汇总

3.1、功能测试中发现的bug

模块测试版本测试环境测试步骤实际结果预期结果其他附件
博客主/个人/草稿列表页Test003Chrome- 113.0.5668.0输入主页url文章简介只含正文,不包括MarkDown编辑器的某些特殊字符文章简介只含正文,不包括MarkDown编辑器的某些特殊字符
草稿箱模块Test003Chrome- 113.0.5668.0登录-进入草稿箱个人信息栏下的文章数与草稿箱的文章数不对应个人信息栏下的文章数与草稿箱的文章数对应
博客详情页Test003Chrome- 113.0.5668.0登录-查看某文章的详情页-评论评论列表无评论者的头像评论列表有评论者的头像

 3.2、兼容性测试中发现的bug

模块测试版本测试环境测试步骤实际结果预期结果其他附件
登录模块Test003OPPPA93-QQ浏览器13.8.0.0039输入url-回车
个人博客列表模块Test003OPPPA93-QQ浏览器13.8.0.0039登录-进入个人博客列表页
博客主列表页Test003OPPPA93-QQ浏览器13.8.0.0039输入url-回车
草稿箱Test003OPPPA93-QQ浏览器13.8.0.0039登录-进入草稿箱
博客编辑页Test003OPPPA93-QQ浏览器13.8.0.0039登录-进入写博客页
个人中心Test003OPPPA93-QQ浏览器13.8.0.0039登录-进入个人中心
博客详情页Test003OPPPA93-QQ浏览器13.8.0.0039通过url-进入某篇文章

         结论:界面设计不兼容移动端,但功能支持 


4、总结

4.1、缺陷和限制

        该博客系统只满足了最基本的功能,吸引用户量,还需要拓展更多的功能,例如:登陆的验证码、用户头像、关注、粉丝、用户周排名、月排名、总排名、主页皮肤等等;另外性能方面也存在不足,还需要继续优化~

4.2、综合评价

       可以上线~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch:位置搜索介绍

在这个互联网和信息时代&#xff0c;在应用程序和应用程序中启用基于位置的搜索是一个普遍的要求。 基于位置的搜索根据邻近度获取场所或地点&#xff0c;例如附近的餐馆、半径不超过 1 公里的待售房屋等。 我们还使用基于位置的搜索来查找前往某个地方或兴趣点的方向。 好消息…

C#代码修改设计原图psd、ai格式图层文字内容等导出bmp等,需要license 要高额付费放弃

Update text is supported only in licensed mode System.ComponentModel.LicenseException HResult0x80131901 MessageUpdate text is supported only in licensed mode SourceAspose.PSD StackTrace: at  .(Object ) at  . () at  .(Object , UInt32 )…

【C++学习】类和对象--对象特性

构造函数和析构函数 对象的初始化和清理是两个非常重要的安全问题 一个对象或变量没有初始状态&#xff0c;对其使用后果是未知的 使用完一个对象或变量&#xff0c;没有及时清理&#xff0c;也会造成一定的安全问题 C利用构造函数和析构函数解决上述问题&#xff0c;这两个函数…

牛客竞赛字符串专题 NC237664 Typewriter(SAM + 树上倍增 + 二分 + 线段树优化dp)

本题主要考察了如何用 SAM 求原串每个前缀对应的能与非后缀匹配的最长后缀&#xff0c;以及如何求 SAM 每个节点 right 集合的 min / max。很有价值的一道串串题。 题意&#xff1a; 你有一台打字机&#xff0c;你需要用它打出一段只由小写字母构成的文本S。 设某个时刻&#…

java数据结构刷题二期

在 MATLAB 中&#xff0c;有一个非常有用的函数 reshape &#xff0c;它可以将一个 m x n 矩阵重塑为另一个大小不同&#xff08;r x c&#xff09;的新矩阵&#xff0c;但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵&#xff0c;以及两个正整数 r 和 c &…

考研数据结构--栈和队列

栈和队列 文章目录 栈和队列栈栈的定义&#xff08;特点&#xff09;栈的存储表示栈的基本操作栈的顺序存储方式和基本操作实现顺序栈的定义顺序栈的初始化顺序栈的判空顺序栈的判满顺序栈的进栈顺序栈的出栈取栈顶元素main函数测试 栈的链式存储方式和基本操作实现链栈的定义链…

sentiel安装与整合

(1)方案一:超时处理 设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待(只能缓解,不能从根本上解决) (2)方案二:舱壁模式 限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。(会造成资源浪费) (3)方案三:熔断降…

不坑盒子 + 智能写作(Office、WPS插件)助你高效办公,早点下班回家。

不坑盒子简介 很多朋友在工作过程中需要对Word文档进行编辑处理&#xff0c;如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件&#xff0c;这是一个非常好用的插件工具&#xff0c;专门应用在Word文档中&#xff0c;支持Office 2010以上的版本&#xff0c;用户可以…

ntp时间服务器配置,ssh免密登录 rhce(22)

目录 1.配置ntp时间服务器&#xff0c;确保客户端主机能和服务端主机同步时间. 2.配置ssh免密登录&#xff0c;能够通过客户端主机通过redhat用户和服务端主机基于公钥验证方式进行远程连接 1.配置ntp时间服务器&#xff0c;确保客户端主机能和服务端主机同步时间. 安装时间…

(链表专题) 234. 回文链表——【Leetcode每日一题】

234. 回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&…

【蓝桥杯】数组中存在K倍区间的子数组个数

文章目录 前言题目分析算法难度实战1、创建算法2、创建测试用例3、运行测试用例4、测试结果 总结 前言 蓝桥杯全国软件和信息技术专业人才大赛由工业和信息化部人才交流中心主办,每年参赛人数超过30000人。蓝桥杯大赛作为国内领先的全国性 IT 学习赛事&#xff0c;持续有力支撑…

Python爬虫自动化从入门到精通第9天(爬虫数据的存储)

爬虫数据的存储 数据存储概述MongDB数据库的概念MongDB的安装使用PyMongo库存储到数据库 数据存储概述 通常&#xff0c;从网页爬取到的数据需要进行分析、处理或格式化&#xff0c;然后进行持久化存储&#xff0c;以备后续使用。数据存储主要有以下两种方式&#xff1a; 1&am…

启动kafka报错ERROR Fatal error during KafkaServer startup. Prepare to shutdown

一、错误 报的错&#xff1a; ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) kafka.common.InconsistentBrokerIdException: Configured broker.id 0 doesn’t match stored broker.id Some(1) in meta.properties. If you m…

跟ChatGPT聊天、需求润色优化,禅道OpenAI 插件发布

禅道插件上新了&#xff0c;OpenAI 禅道集成&#xff0c;可提供神奇海螺聊天、需求润色功能。 神奇海螺 “章鱼哥&#xff0c;你为什么不问问神奇海螺呢&#xff1f;”——海绵宝宝 那么&#xff0c;就让我们问一问神奇 海螺吧&#xff01;禅道上线神奇海螺功能&#xff0c;…

【C++】优先级队列,反向迭代器

文章目录 priority_queue的介绍和使用priority_queue的使用 反向迭代器 priority_queue的介绍和使用 优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆&#xff0c;在堆中可以随时插入元素&a…

数据分析之Pandas 基础入门

一、初始Pandas pandas 是数据分析三大件之一&#xff0c;是Python的核心分析库&#xff0c;它提供了快捷、灵活、明确的数据结构&#xff0c;它能够简单、直观、快速的处理各种类型的数据结构。 pandas 支持的数据结构如下&#xff1a; SQL 或Excel 类似的数据有序或无序的…

后端程序员必须学会的编辑器vim

vim编辑器使用小结 1. vim简介 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器&#xff0c;在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个&#xff0c;事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Lin…

MyBatis(十一)、MyBatis查询语句专题

准备工作&#xff1a; 模块名&#xff1a;mybatis-007-select 打包方式&#xff1a;jar 引入依赖&#xff1a;mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。 引入配置文件&#xff1a;jdbc.properties、mybatis-config.xml、logback.xml 创建pojo类&#xff1a;Car 创…

SQL sever数据库----基础增删改查操作与where条件限制

where条件限制方法 在SQL sever中使用where语句&#xff0c;可以对各种操作添加限制条件 基础格式为 ———————— where 逻辑表达式 例如限制条件的查询 select 范围 from 表名 where 逻辑表达式 逻辑表达式就是一个判断 如 a > 5 、a6>9、a>5 and b>5 各种…

k8s部署流水账

久仰大名k8s&#xff0c;业余选手一直望而却步。最近终于初步炮制成功。知道了大概的流程。本篇为部署备忘录。 经过的大环节有&#xff1a;修改树莓派/boot/cmdline.txt甚至/cmd/config.txt里面的集群相关设置&#xff0c;把cgroup驱动enable好。swap关掉。这些都是所有集群内…