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);//输入账号adminwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);//输入密码123webDriver.findElement(By.cssSelector("#password")).sendKeys(password);//点击提交按钮跳转到列表页webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(1000);//获取列表页的urlString 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)@Testvoid 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)@Testvoid 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);//获取当前页面urlString curUrl = webDriver.getCurrentUrl();Thread.sleep(1000);//获取当前页面titleString 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)@Testvoid 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)@Testvoid 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)@Testvoid 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);}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上门洗衣洗鞋小程序多门店管理模式是怎么样的

做干洗店和洗鞋店的老板们很多都不止一个门店&#xff0c;多门店的管理模式下&#xff0c;去做一个上门洗衣洗鞋小程序&#xff0c;需要有哪些必要的功能才能让不同的门店管理起来不乱呢。首先需要先确定一下不同门店的管理都会面临哪些经营场景和需求。 第一&#xff0c;加盟店…

【基础工具篇使用】ADB 的安装和使用

文章目录 ADB的命令安装ADB 命令使用查看帮助 ——adb help查看连接设备 ADB的命令安装 ADB 命令的全称为“Android Debug Bridge”&#xff0c;从英文中看出主要是用作安卓的调试工具。ADB 命令在嵌入式开发中越来越常用了 在 Windows 上按“win”“R”组合件打开运行, 输入 …

QT DAY1作业

1.QQ登录界面 头文件代码 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> #include <QLabel> #include <QPushButton> #include <QMovie> #include <QLineEdit>class MyWidget : public QWidget {Q_OBJECTpu…

混淆技术概论

混淆技术概论 引言 在逆向工程领域&#xff0c;混淆技术是一种非常重要的技术手段&#xff0c;通过打破人们的思维惯性&#xff0c;使得逆向分析变得更加困难。本文将会介绍混淆技术的概念、分类及其应用&#xff0c;以及如何使用IPA Guard进行iOS IPA重签名。 混淆技术概述…

熟悉HDFS常用操作

1. 利用Hadoop提供的Shell命令完成下列任务 (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。 #检查文件是否存在./bin/hdfs dfs -test -e text.txt echo $? #结果是1 代表已存在 #根据结果判断出文件已存…

微信小程序canvas画布实现矩形元素自由缩放、移动功能

获取画布信息并绘制背景 .whml <canvas class="canvas" type="2d" id="myCanvas" bindtouchstart="get_rect_touch_position" bindtouchmove="move_or_scale" bind:tap="finish_edit_check"/> .wxss .c…

【互联网安全架构】渗透测试及常见的Web攻击手段

1.网络安全和渗透测试 &#xff08;1&#xff09;什么是网络安全 网络防御主要是针对各类网络攻击提供网络安全防御方案&#xff0c;为了应对攻击技术的不断革新&#xff0c;防御技术已经逐步从被动防御的历史阶段转变为主动防御阶段。目前常见的网络防御技术大体类型有加密技…

企业培训系统源码:构建智能、可扩展的学习平台

企业培训系统在现代企业中扮演着至关重要的角色。本文将通过深度解析企业培训系统的源码&#xff0c;介绍如何构建一个智能、可扩展的学习平台&#xff0c;涉及关键技术和代码实例。 1. 技术栈选择与项目初始化 在构建企业培训系统之前&#xff0c;选择适当的技术栈是至关重…

STL标准库与泛型编程(侯捷)笔记6(完结)

STL标准库与泛型编程&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youbute: 侯捷-STL标准库与泛型编程 B站: 侯捷 - STL Github:STL源码剖析中源码 https://github.com/SilverMaple/STLSourceCo…

【代码随想录】刷题笔记Day48

前言 早上练车去了&#xff08;好久没有8点前醒了&#xff09;&#xff0c;练科目二两小时下来脚根可真酸啊&#xff0c;希望下周一把过。练完顺带去Apple西湖免费换新了耳机&#xff0c;羊毛爽&#xff01; 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09;…

【信息安全】深度分析邮件安全及钓鱼攻击防范

本博文共计3100余字&#xff0c;预计需阅读20分钟 【邮件安全建设】 一、前言 邮件系统作为企业办公网络架构中重要的组成部分&#xff0c;同时也是业务高频使用的办公应用&#xff0c;一旦出现安全问题&#xff0c;业务将会被严重干扰甚至中断&#xff0c;本篇博客通过攻守两…

为什么选择嬴图?

图数据库、图计算、图中台都是用图论的方式去构造实体间的关联关系&#xff0c;实体用顶点来表达&#xff0c;而实体间的关系用边来表达。图数据库的这种简洁、自由、高维但100%还原世界的数据建模的方式让实体间的关联关系的计算比SQL类的数据库高效成千上万倍。 图&#xff1…