当前位置: 首页 > ops >正文

个人博客系统测试报告

目录

1 项目背景

2 项目功能

3 项目测试

3.1 测试用例

3.2 登录页面测试 

3.3 博客列表页面测试

3.4 博客详情页面测试

3.5 自动化测试

3.5.1 Utils类

3.5.2 登录测试页面类

3.5.3 博客列表页测试类

3.5.4 博客详情页测试类

3.5.5 博客修改页测试类

3.5.6 未登录情况下测试类

3.5.6 启动测试类

4 项目BUG

5 遇到的问题及解决方法

6 测试总结  


该篇文章是我测试学习过程中的总结

1 项目背景

因为我经常在csdn上写博客, 那么我在学习Spring Boot之后呢?想着自己是自己是不是能够做一些什么东西,就想到自己做一个博客系统吧,于是你现在看到的这个博客系统就应运而生了。

2 项目功能

1. 登录功能

2. 博客列表页功能

3. 写博客并发布博客功能

4. 删除博客功能

5. 注销退出功能

3 项目测试

本次测试对博客系统主要使用selenium工具进行UI界面自动化测试,进行功能测试,对于界面测试、易用性测试、兼容性测试等其他测试仅做简单描述。

3.1 测试用例

3.2 登录页面测试 

测试场景一:输入正确的用户名和密码点击提交

预期结果:登录成功,跳转到博客首页

 实际结果:与预期结果一致。登录成功,跳转到博客首页

测试场景二:输入正确的用户名和错误的密码

预测结果:弹窗提示密码错误

实际结果:与预期结果一致。弹窗提示密码错误

测试场景三:输入错误的用户名和正确的密码

预期结果:弹窗提示用户不存在

 实际结果:与预期结果一致。弹窗提示用户不存在

测试场景四:输入错误的用户名和错误的密码

预期结果:弹窗提示用户名不存在

  实际结果:与预期结果一致。弹窗提示用户不存在

3.3 博客列表页面测试

测试场景一: 点击菜单栏的“写博客”

预期结果:页面跳转到博客编辑页,用户可以编写博客

实际结果:与预期结果一致。页面正常跳转到编辑页面

测试用例二:输入标题和内容,点击“发布文章”按钮可正常发布博客,在博客首页查看到。

预期结果:成功发布博客,在首页可看到发布的博客。

 实际结果:与预期结果一致。可查看到发布的博客。

测试场景三: 点击首页的任意一个博客下方的“查看全文”

预期结果:页面跳转到博客详情页,可查看博客内容

 

实际结果:与预期结果一致。页面正常跳转到博客详情界面。

测试场景四: 点击菜单栏的“注销”

预期结果:页面跳转到登录界面,用户名和密码被清空,用户可重新登录。

 

实际结果:与预期结果一致。页面正常跳转到登录界面。

3.4 博客详情页面测试

测试用例一:点击“编辑”按钮

预期结果:进入博客更新页面,可对之前的内容进行编辑,编辑完成后点击更新文章,可在首页看到更新后的文章。

实际结果:与预期结果一致。更新内容后可在首页查看到更新后的博客。

测试用例二:点击“删除”按钮

预期结果:博客被成功删除,在首页找不到此博客。

 

实际结果:与预期结果一致。且弹窗提示用户确定删除。

 测试用例三:在lisi的账号下,我们可以看到是无法编辑和删除zhangsan用户发布的这篇博客的,在zhangsan账号下可正常操作。

3.5 自动化测试

先将一些每个页面所需要的工具放到一个类里。

3.5.1 Utils类

package common;import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;public class Utils {public static WebDriver driver;public static WebDriver createDriver(){if(driver == null){WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");driver = new ChromeDriver(options);driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));driver.manage().window().maximize();}return driver;}public Utils(String url) {if(url != ""){driver = createDriver();driver.get(url);}}public void getScreenShot(String str) throws IOException {//     ./src/test/image///                     /2024-07-17///                                /test01-17453010.png//                                /test02-17453020.png//                     /2024-07-18///                                /test01-17453030.png//                                /test02-17453034.png//屏幕截图SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());//./src/test/image/2024-07-17/test01-17453020.pngString filename ="./src/test/image/"+ dirTime +"/" + str + "-" + fileTime+".png";File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//srcFile放到指定位置FileUtils.copyFile(srcFile,new File(filename));}}

3.5.2 登录测试页面类

package tests;import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;public class LoginPage extends Utils {public static String url = "http://123.60.62.52:9090/blog_login.html";public LoginPage() {super(url);}/*** 检查页面是否可以正常打开*/public void loginPageRight() {//通过检查页面元素是否存在来检查页面是否加载成功//检查提交按钮是否存在driver.findElement(By.cssSelector("#submit"));//检查输入框中登录这两个字是否存在driver.findElement(By.cssSelector("body > div.container-login > div > h3"));//检查页面中 我的博客系统是否存在driver.findElement(By.cssSelector("body > div.nav > span"));}/*** 进行登录测试---正常登录*/public void loginSuc() {driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");driver.findElement(By.cssSelector("#password")).sendKeys("123456");driver.findElement(By.cssSelector("#submit")).click();// 如何判断此时登录成功, 此时登陆成功的界面是和上述页面正常加载是不一样的// 如果此时可以点击查看全文 就说明此时是正常登陆的try{Thread.sleep(3000);}catch (Exception e){e.printStackTrace();}driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a"));  //你也没点呢
//        String title= driver.getTitle();
//        assert title.equals("博客列表");//driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();}/*** 进行登录测试---异常登录* 由于在tests中各项测试是有依赖的* 在测试异常登录之前 已经登陆过了 而我们的`drive对象并没有释放掉 并没使用这段 driver.quit();* 进入到博客列表页是获取不到错误弹窗的* 所以要在上述正常登录测试之后 让其返回到前一步* 但是返回之后 账号密码都在输入框内* 此时我们直接输入的内容 只是拼接在输入框的内容* 所以要先进行清空*/public void loginFail() throws InterruptedException {//方法1/*driver.findElement(By.cssSelector("#username")).clear();driver.findElement(By.cssSelector("#password")).clear();*///方法2 浏览器刷新driver.navigate().refresh();driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");driver.findElement(By.cssSelector("#password")).sendKeys("123456111");driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();}
}

3.5.3 博客列表页测试类

package tests;import common.Utils;
import org.openqa.selenium.By;public class ListPage extends Utils {public static String url = "http://123.60.62.52:9090/blog_list.html";public ListPage() {super(url);}/*** 登录状态下 博客列表页测试*/public void ListPageByLogin() throws InterruptedException {driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(2) > div.title"));driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(2) > div.date"));Thread.sleep(3000);driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();Thread.sleep(3000);}}

3.5.4 博客详情页测试类

package tests;import common.Utils;
import org.openqa.selenium.By;import java.io.IOException;public class DetailPage extends Utils {public static String url = "";public DetailPage() {super(url);}public void DetailPageByLogin() throws InterruptedException, IOException {
//        Thread.sleep(2000);
//        getScreenShot(getClass().getName());Thread.sleep(3000);driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)"));driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")).click();}
}

3.5.5 博客修改页测试类

package tests;import common.Utils;
import org.openqa.selenium.By;public class UpdatePage extends Utils {public static String url = "";public UpdatePage() {super(url);}public void UpdatePageByLogin() throws InterruptedException {Thread.sleep(3000);driver.findElement(By.cssSelector("#title")).sendKeys("iajrfiojwqe");driver.findElement(By.cssSelector("#submit")).click();}
}

3.5.6 未登录情况下测试类

package tests;import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;import java.io.IOException;public class PageByNoLogin extends Utils {public static String listUrl = "http://123.60.62.52:9090/blog_list.html";public static String editUrl = "http://123.60.62.52:9090/blog_edit.html";public static String detailUrl = "http://123.60.62.52:9090/blog_detail.html";public PageByNoLogin() {super("");}/*** 异常登陆测试*//*** 列表页未登录测试*/public void ListByNoLogin() throws InterruptedException, IOException {driver.get(listUrl);Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();}/*** 博客编辑页未登录测试*/public void EditByNoLogin() throws InterruptedException {driver.get(editUrl);driver.findElement(By.cssSelector("#title"));driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();//driver.quit();}/*** 博客详情页未登录测试*/public void DetailByNoLogin() throws InterruptedException {driver.get(detailUrl);Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();driver.quit();}
}

3.5.6 启动测试类

import tests.*;import java.io.IOException;public class RunTests {public static void main(String[] args) throws InterruptedException, IOException {LoginPage loginPage = new LoginPage();loginPage.loginPageRight();loginPage.loginSuc();ListPage listPage = new ListPage();listPage.ListPageByLogin();DetailPage detailPage = new DetailPage();detailPage.DetailPageByLogin();UpdatePage updatePage = new UpdatePage();updatePage.UpdatePageByLogin();EditPage editPage = new EditPage();editPage.EditPageByLogin();loginPage.loginFail();PageByNoLogin pageByNoLogin = new PageByNoLogin();pageByNoLogin.ListByNoLogin();pageByNoLogin.EditByNoLogin();pageByNoLogin.DetailByNoLogin();}
}

4 项目BUG

(一)bug描述:博客首页的文章和分类无实际作用,当发布新文章后文章的数量并不会增加。

(二)当用户名和密码都错误时,只会提示用户不存在。

5 遇到的问题及解决方法

(一)有弹窗时,添加屏幕截图,要先关闭弹窗后才能截图,否则会抛出异常

(二)当代码出现报错:no such element: Unable to locate element,这种情况可能是由于页面未加载完成,我们可以添加等待:driver.implicitly_wait(5)

(三) 登录时,提示浏览器受到自动化测试软件的控制,可添加下面语句,避免网站检测到浏览器正在被自动化工具(如 Selenium)控制

6 测试总结  

此次测试主要对个人博客系统的主要功能进行了测试,并用Selenium编写了测试脚本进行了自动化测试。个人博客系统还需对首页的个人信息栏部分进行优化,如:文章的数量要与用户发布的数量同步起来,在弹窗提示上也需要更详细些,为用户提供有用的弹窗信息,这样才能给用户提供一个良好的体验。

http://www.xdnf.cn/news/5661.html

相关文章:

  • 常用激活函数总结
  • websocketpp 安装及使用
  • 基于OpenCV的人脸识别:Haar级联分类器
  • SATA—Link层状态机
  • Gmssl库的aes算法效率问题
  • 家具制造行业的现状 质检LIMS如何赋能家具制造企业质检升级
  • 见多识广7:KAIST(韩国高等科学技术院)——关注AI加速器方向
  • 复盘与导出工具最新版V23.0版本更新--新增韭菜异动轮动功能
  • 基于 Python 的后端开发学习路线
  • 【AI】mcp server是什么玩意儿
  • 【Linux网络】 HTTP cookie与session
  • DeepPrep:深度学习提升神经影像预处理
  • LeetCode算法题:电话号码的字母组合
  • Bodhi linux 系统详解
  • 分析红黑树工程实用的特点
  • 智能手表测试计划文档(软/硬件)
  • 读取.ini后缀类型的马达配置文件并进行赋值
  • AtCoder Beginner Contest 405(ABCD)
  • 搭建高可用及负载均衡的Redis
  • C++四种类型转换:static_cast、 dynamic_cast const cast、 reinterpret_cast
  • 详解RabbitMQ工作模式之通配符模式
  • 3.9/Q2,GBD数据库最新文章解读
  • 珠海金山2007逆向分析挑战赛-CrackMe看雪(九连环)(writeup)
  • 【运维】MacOS蓝牙故障排查与修复指南
  • 大地网接地电阻测试的必要性
  • Python如何使用进行风险管理和投资组合优化
  • 2025智能体基建在进化过程中带来的质变
  • 国外付费AI软件充值教程
  • 《棒球百科》MLB棒球公益课·棒球1号位
  • 02.Golang 切片(slice)源码分析(一、定义与基础操作实现)