BlogPark测试报告

目录

一,项目背景

二,项目功能

三,测试计划

3.1 测试用例的设计

3.2 功能测试

1.正常登录

2.正常写博客测试 (输入完整的标题和内容)

3.发布博客之后跳转到详情页观察是否有刚发布的博客

4.删除博客观察列表的博客数量是否减少 

5.修改博客 

 6.注销,注销成功后回到登陆页面

四,自动化测试 

4.1 使用Selenium进行测试的步骤

1.根据项目的核心功能编写测试用例

2.创建自动化项目,根据测试用例书写测试脚本 

4.2 编写脚本进行自动化测试

1.登录功能测试

2.博客列表页数量不为0测试

3.添加博客功能测试

4.博客详情页功能测试

5.删除博客功能测试

6.博客注销功能测试


测试代码链接:spring: spring学习中的相关代码测试 - Gitee.com

项目访问链接(已部署):登陆页面(账号:admin 密码:123)

一,项目背景

  1. BlogPark采用了前后端分离的方法来实现的,同时使用了MySQL、Redis进行数据的存储,并将其部署到了云服务器上。前端有8个页面构成:登陆注册、添加博客、博客编辑、博客详情、热榜博客、全部博客列表、个人博客列表以及个人中心。
  2. 在一般的博客项目上进行了许多的扩展:
    1. 使用邮箱注册以及验证码登录
    2. 使用Redis缓存共享session及热榜博客信息
    3. 使用线程池定时进行热榜的更新
    4. 使用@Async实现异步进行数据鞥带读写操作
    5. 使用扫描线程进行敏感词的过滤并记录日志
    6. 使用Hutool工具进行密码的加盐机密处理
    7. 使用资源路径映射访问本地资源
    8. 使用正则表达式对返回给前端的MD格式的数据去除关键字
    9. ......

二,项目功能

针对BlogPark里面的诸多功能,这里对其一些核心功能进行了功能测试以及自动化测试,涉及到的功能有:登录、注销、写博客以及删除博客等功能。

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

三,测试计划

3.1 测试用例的设计

3.2 功能测试

1.正常登录

2.正常写博客测试 (输入完整的标题和内容)

3.发布博客之后跳转到详情页观察是否有刚发布的博客

4.删除博客观察列表的博客数量是否减少 

5.修改博客 

 6.注销,注销成功后回到登陆页面

四,自动化测试 

4.1 使用Selenium进行测试的步骤

1.根据项目的核心功能编写测试用例

2.创建自动化项目,根据测试用例书写测试脚本 

前提:如果使用的是Java语言进行自动化测试的话,需要创建一个Maven的工程,并添加相关的测试依赖:

<!--        添加selenium依赖-->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>

4.2 编写脚本进行自动化测试

1.登录功能测试

    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "/LoginSuccess.csv")
    void LoginSuccess(String username,String password,String blog_list_url) throws InterruptedException {
        //打开博客登录页面
        webDriver.get("http://localhost:8080/login.html");
        Thread.sleep(1000);
        //输入账号admin
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        //输入密码123
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        //点击提交按钮跳转到列表页
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        //获取列表页的url
        String curUrl = webDriver.getCurrentUrl();//获取当前页的url是不是博客列表页,获取到则代表测试通过,否则测试不通过
        Thread.sleep(1000);
        Assertions.assertEquals(blog_list_url,curUrl);
        Thread.sleep(1000);
    }
LoginSuccess.csv文件内容:admin,123,http://localhost:8080/myblog_list.html

2.博客列表页数量不为0测试

    @Order(2)
    @Test
    void BlogList() throws InterruptedException {
        //打开博客列表页
        webDriver.get("http://localhost:8080/myblog_list.html");
        Thread.sleep(1000);
        //获取页面上所有博客标题对应的元素
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //如果元素数量不为0,测试通过
        Assertions.assertNotEquals(0,title_num);
    }

3.添加博客功能测试

    @Order(3)
    @Test
    void EditBlog() throws InterruptedException {
        //找到写博客按钮,点击
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        Thread.sleep(1000);
        //找到输入框输入标题
        //通过JS脚本进行输入
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title\").value=\"自动化测试\"");
        Thread.sleep(1000);
        //点击发布
        webDriver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).click();
        Thread.sleep(1000);
        //使用弹窗操作
        Alert alert = webDriver.switchTo().alert();
        alert.dismiss();
        Thread.sleep(1000);
    }

4.博客详情页功能测试

    @Order(4)
    @ParameterizedTest
    @MethodSource("generator")
    void BlogDetail(String expected_url,String expected_title,String expected_blogTitle) throws InterruptedException {
        //找到第一篇博客对应的查看全文按钮
        webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > a:nth-child(4)")).click();
        Thread.sleep(1000);
        //获取当前页面url
        String curUrl = webDriver.getCurrentUrl();
        Thread.sleep(1000);
        //获取当前页面title
        String curTitle = webDriver.getTitle();
        Thread.sleep(1000);
        //获取博客标题
        String curBlogTitle = webDriver.findElement(By.cssSelector("#title")).getText();
        Thread.sleep(1000);
        Assertions.assertEquals(expected_title,curTitle);
        Assertions.assertEquals(expected_blogTitle,curBlogTitle);
        if(curUrl.contains(expected_url)) {
            System.out.println("测试通过");
        } else {
            System.out.println(curUrl);
            System.out.println("测试不通过");
        }
    }



    public static Stream<Arguments> generator() {
        return Stream.of(Arguments.arguments("http://localhost:8080/blog_content.html?id=","博客正文","自动化测试"));

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

5.删除博客功能测试

    @Order(6)
    @Test
    void DeleteBlog() throws InterruptedException {
        //打开博客列表页
        webDriver.get("http://localhost:8080/myblog_list.html");
        Thread.sleep(1000);
        //点击删除按钮
        webDriver.findElement(By.cssSelector("#artlist > div:nth-child(1) > a:nth-child(6)")).click();
        Alert alert = webDriver.switchTo().alert();
        alert.accept();
        Thread.sleep(1000);
        Alert alert1 = webDriver.switchTo().alert();
        alert1.accept();
        //博客列表页第一篇博客标题不是"自动化测试"
        String first_blog_title = webDriver.findElement(By.xpath("//*[@id=\"artlist\"]/div[1]/div[1]")).getText();
        Thread.sleep(1000);
        //校验第一篇博客的标题不等于"自动化测试"
        Assertions.assertNotEquals(first_blog_title,"自动化测试");
    }

6.博客注销功能测试

    @Order(7)
    @Test
    void logout() throws InterruptedException {
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        Alert alert = webDriver.switchTo().alert();
        alert.accept();
        Thread.sleep(1000);
        //进行url校验
        String curUrl = webDriver.getCurrentUrl();
        Thread.sleep(1000);
        Assertions.assertEquals("http://localhost:8080/blog_list.html",curUrl);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

会计报名照片怎么压缩?这几种方法一定要会

会计师报名考试的时候&#xff0c;在上传证件照信息时通常会对图片大小、格式、尺寸、还有照片dpi分辨率以及照片背景颜色都有具体的要求&#xff0c;小编在这边建议考生提前了解好报名照片的要求&#xff0c;避免照片审核失败&#xff0c;那么会计报名照片怎么压缩呢&#xff…

基于springboot在线考试系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现在线考试的信息化。则对于进一步提高在线考试管理发展&#xff0c;丰富在线考试管理经验能起到不少的促进作用。 在线考试系统能够通过互…

ISIS基本概率与配置(HCIP完整版)

目录 一、ISIS协议基础 1、ISIS概述&#xff08;认识ISIS&#xff09; 2、ISIS的应用 4、ISIS的工作过程 5、ISIS路由器的类型 6、ISIS区域 7、ISIS报文 8、ISIS基础配置 9、进程号&#xff1a; 10、NET地址 11、ISIS邻居关系 二、邻居表分析 1、ISIS邻居表字段解析…

MVC设计模式和与三层架构的关系

MVC设计模式和与三层架构的关系 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#x…

JavaSec基础 反射修改Final修饰的属性及绕过高版本反射限制

反射重拾 半年没碰java了 先写点基础回忆一下 反射弹计算器 public class Test {public static void main(String[] args) throws Exception {Class<?> clazz Class.forName("java.lang.Runtime");clazz.getDeclaredMethod("exec", String.cla…

记录汇川:H5U与Fctory IO测试5

主程序&#xff1a; 子程序&#xff1a; IO映射 子程序&#xff1a; 自动程序 Fctory IO配置&#xff1a; 触摸屏如下&#xff1a; 实际动作如下&#xff1a; Fctory IO测试5

力扣:18.四数之和

一、做题链接&#xff1a;18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 二、题目分析 1.做这一道题之前本博主建议先看上一篇《三数之和》 2.题目分析 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重…

java连接池、C3P0、Druid德鲁伊连接池技术

java线程池 连接池C3P0Druid 连接池 概念&#xff1a;其实就是一个容器(集合)&#xff0c;存放数据库连接的容器。当系统初始化好后&#xff0c;容器被创建&#xff0c;容器中会申请一些连接对象&#xff0c;当用户来访问数据库时&#xff0c;从容器中获取连接对象&#xff0c…

信息论与编码期末复习——计算题+基础汇总(二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

微信小程序连接数据库与WXS的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…

基于Springboot+vue高校宿舍管理系统(前后端分离)

该项目完全免费 高校宿舍管理系统采用前后端分离的架构方式&#xff0c;是为学校宿舍管理打造的一套系统,可以让管理者更为便捷地处理学生公寓问题,从而大大提高管理效率,让学生公寓的资源合理分配,事半功倍,进而改善了学生公寓管理。 系统分为三种角色&#xff0c;分别是系统…

这些开源自动化测试框架,会用等于白嫖一个w

作者&#xff1a;黑马测试 链接&#xff1a;https://www.zhihu.com/question/19923336/answer/2585952461 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 随着计算机技术人员的大量增加&#xff0c;通过编写代码来…

【开源】基于JAVA+Vue+SpringBoot的大学计算机课程管理平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验课程档案模块2.2 实验资源模块2.3 学生实验模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 实验课程档案表3.2.2 实验资源表3.2.3 学生实验表 四、系统展示五、核心代码5.1 一键生成实验5.2 提交实验5.3 批阅实…

mysql进阶-视图

目录 1. 用途 2. 语法 2.1 创建或替换视图 2.2 修改视图 2.3 查看视图&#xff1a; 2.4 删除视图&#xff1a; 3. 其他 3.1 操作视图 3.2 迁移数据库 1. 用途 视图可以理解为一个复杂查询的简称&#xff0c;它可以帮助我们简化查询&#xff0c;主要用于报表查询:例如…

BigDecimal使用记录

在公司经费这块用到了BigDecimal类&#xff0c;特此整理记录一下。 一、BigDecimal简介&#xff1a; float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算&#xff0c;这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而&a…

Python接口自动化 —— 什么是接口测试、为什么要做接口测试(详解)

什么是接口测试 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。  一般来说&#xff0c;测试接…

mysql基础-常用函数汇总

目录 1. 查询技巧 2. 时间函数 2.1 now() 2.2 current_date() 2.3 时间差timestampdiff&#xff08;&#xff09;与datediff&#xff08;&#xff09; 2.4 其他时间函数 3. 字符函数 3.1 截取函数 3.2 分割函数 3.3 left与right函数 3.4 其他函数 4. 数字函数 5. …

2024年跨境电商上半年营销日历最全整理

2024年伊始&#xff0c;跨境电商开启新一轮的营销竞技&#xff0c;那么首先需要客户需求&#xff0c;节假日与用户需求息息相关&#xff0c;那么接下来小编为大家整理2024上半年海外都有哪些节日和假期&#xff1f;跨境卖家如何见针对营销日历选品&#xff0c;助力卖家把握2024…

JAVA基础学习笔记-day15-File类与IO流

JAVA基础学习笔记-day15-File类与IO流 1. java.io.File类的使用1.1 概述1.2 构造器1.3 常用方法1、获取文件和目录基本信息2、列出目录的下一级3、File类的重命名功能4、判断功能的方法5、创建、删除功能 2. IO流原理及流的分类2.1 Java IO原理2.2 流的分类2.3 流的API 3. 节点…

图像分类任务的可视化脚本,生成类别json字典文件

1. 前言 之前的图像分类任务可视化&#xff0c;都是在train脚本里&#xff0c; 用torch中dataloader将图片和类别加载&#xff0c;然后利用matplotlib库进行可视化。 如这篇文章中&#xff1a;CNN 卷积神经网络对染色血液细胞分类(blood-cells) 在分类任务中&#xff0c;必定…