博客系统测试用例设计之自动化测试

news/2024/11/29 20:47:22/

测试用例设计之自动化测试

  • 🌷 一 测试用例设计
    • 🌺 1 功能测试
      • 🌸 (1)登录功能
      • 🌸 (2)列表页功能
      • 🌸 (3)编辑博客功能
      • 🌸 (4)博客详情页功能
      • 🌸 (5)公共点击功能
    • 🌺 2 界面测试
    • 🌺 3 易用性测试
    • 🌺兼容性测试
    • 🌺 4 性能测试
    • 🌺 5 网络测试
    • 🌺 6 安全性测试
  • 🌷 二 完整测试用例
  • 🌷 三 自动化测试
    • 🌺 1 登录测试
    • 🌺 2 博客列表页测试
    • 🌺 3 详情页测试
    • 🌺 4 编写博客测试
    • 🌺 4 发布博客测试
    • 🌺 4 删除博客测试
    • 🌺 5注销用户测试

首先看看我的博客系统的界面如下:
(1)登录界面
在这里插入图片描述
(2)主列表页界面:
在这里插入图片描述
(3)博客详情页界面:
在这里插入图片描述
(4)博客编辑界面:
在这里插入图片描述

🌷 一 测试用例设计

测试用例一般从这几个方面进行设计:功能、界面、兼容、性能、易用性、安全性、网络。但由于是本人的一个小项目,所以涉及到的方面有限。

🌺 1 功能测试

博客系统分为四个主要功能:登录功能、列表页功能、编辑博客功能、博客详情页功能。

🌸 (1)登录功能

在这里插入图片描述

🌸 (2)列表页功能

在这里插入图片描述

🌸 (3)编辑博客功能

在这里插入图片描述

🌸 (4)博客详情页功能

在这里插入图片描述

🌸 (5)公共点击功能

因为导航栏是公共的,所以有这些功能是公共的:

在这里插入图片描述

🌺 2 界面测试

在这里插入图片描述

🌺 3 易用性测试

在这里插入图片描述

🌺兼容性测试

由于这是本人的一个小系统,所以兼容性测试涉及的比较少,通常情况下还会涉及的安卓/平板设备的兼容性,但此处涉及不到。

在这里插入图片描述

🌺 4 性能测试

在这里插入图片描述

🌺 5 网络测试

在这里插入图片描述

🌺 6 安全性测试

在这里插入图片描述
以上就是所有的测试用例了,完整的测试用例点击下方链接:

🌷 二 完整测试用例

👉🏻博客系统完整测试用例👈🏻

🌷 三 自动化测试

因为自动化测试是测试一些核心的并且重复性高的功能,所以此处对主要的核心功能进行了自动化测试。测试的主要功能有登录功能、博客列表页功能、详情页功能、删除功能等等。具体的测试用例查看下图:
首先需要创建一个类来初始化 webDriver:

public class InitAndEnd {static WebDriver webDriver;@BeforeAllstatic void SetUp() {// 加载浏览器驱动webDriver = new ChromeDriver();}@AfterAllstatic void TearDown() {// 退出浏览器webDriver.quit();}
}

🌺 1 登录测试

输入正确的账号以及密码会登陆成功,此处的账号为“zhangsan”,密码“123”,这里使用 CSV 来获取文件参数的方式进行传参,CSV文件内容如下:
在这里插入图片描述
第一个为用户名 username,第二个为用户密码 123,第三个参数为博客列表页 url(用于检测登录成功后是否会跳转到该页面)

/**
* 测试用例 1: 输入正确的账号,密码  ----> 登陆成功
*/
@Order(1)
@ParameterizedTest
@CsvFileSource(resources = "LoginSuccess.csv")
void LoginSuccess(String username, String password, String blog_list_url){System.out.println(username + password + blog_list_url);// 打开博客登录页面webDriver.get("http://localhost:8080/blog_system-2/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 输入账号 zhangsanwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 输入密码 123webDriver.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);// 跳转到列表页// 获取到当前页面的 cur_urlString cur_url = webDriver.getCurrentUrl();// 如果 cur_url 等于列表页对应的值,则测试通过,否则不通过Assertions.assertEquals(blog_list_url, cur_url);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 如果列表页展示用户信息是 zhangsan,测试时通过,否则失败String cur_name = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();Assertions.assertEquals(username, cur_name);
}

🌺 2 博客列表页测试

因为访问非登录页面时,都会跳转到其他页面,所以使用了 @Order() 注解对测试用例进行排序,按照一定的顺序测试,首先是登录页面,之后再访问其他页面时就不会进行跳转了。
通过校验发布的文章数量不为 0 来测试该页面的功能。

/**
* 测试用例 2:测试 博客列表博客数量 已经发布的博客数量不为 0
*/
@Order(2)
@Test
void BlogList() throws InterruptedException {// 打开博客列表页webDriver.get("http://localhost:8080/blog_system-2/blog_list.html");// 获取页面上所有博客标题对应的元素webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);int title_num = webDriver.findElements(By.cssSelector(".title")).size();System.out.println(title_num);// 如果元素数量不为 0,测试通过Assertions.assertNotEquals(0, title_num);
}

🌺 3 详情页测试

此处使用到了方法传参,方法名为 Generator_detail,,该方法设计了 3 个参数,第一个参数方法为第 1 篇博客详情页的 url,第 2 个参数为详情页的标题,第 3 个为文第一篇文章的标题。

public static Stream<Arguments> Generator_detail() {return Stream.of(Arguments.arguments("http://localhost:8080/blog_system-2/blog_detail.html?blogId=12","博客详情页","自动化测试"));
}

测试用例如下:通过 webDriver 分别获取到博客详情页的 url、标题、文章的题目,并与预期的进行对比,如果一致则测试通过,否则便失败。

/*** 测试用例 3:博客详情页的校验* url、博客标题、页面的 title是 “博客详情页”*/@Order(3)@ParameterizedTest@MethodSource("Generator_detail")void BlogDetail(String expected_url, String expected_title, String expected_blog_title) throws InterruptedException {webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 找到第一篇博客对应的 查看全文 的按钮webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/a")).click();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 获取当前页面 urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 获取当前页面 titleString cur_title = webDriver.getTitle();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 获取博客页面 标题String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals(expected_url, cur_url);Assertions.assertEquals(expected_title, cur_title);Assertions.assertEquals(expected_blog_title, cur_blog_title);if(cur_blog_title.contains(expected_blog_title)) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}

🌺 4 编写博客测试

在此用例中,编写完文章并发布之后,页面会跳转到博客列表页,所以判断跳转的页面 url 与预期的 url 是否一致。

/*** 测试用例 4:写博客*/@Test@Order(4)void EditBlog() throws InterruptedException {// 打开博客列表页,找到写博客按钮,点击webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);// 通过 js 将标题进行输入,需要将 webDriver 进行强制转换为 JavascriptExecutor 类型((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title\").value=\"自动化测试\"");sleep(3000);// 点击发布webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);// 进行校验// 获取当前的 urlString cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://localhost:8080/blog_system-2/blog_list.html", cur_url);}

🌺 4 发布博客测试

对已经发布的文章的标题和时间进行校验,用第一篇文章进行校验。

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

🌺 4 删除博客测试

删除文章之后,会跳转到列表页面,并且此时的第一篇文章的标题不再是刚才的标题了,所以可以针对这个点进行校验。

 /*** 测试用例 6:删除刚才发布的博客*/
@Test
@Order(6)
void DeleteBlog() {// 打开博客列表页面webDriver.get("http://localhost:8080/blog_system-2/blog_list.html");// 点击全文按钮webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/a")).click();// 点击删除按钮,删除之后页面跳转到博客列表页webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).click();// 博客列表页第一篇博客标题不是“自动化测试”String cur_blog_title = webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/div[1]")).getText();Assertions.assertNotEquals(cur_blog_title, "自动化测试");
}

🌺 5注销用户测试

点击注销,会返回到登录页面,并且此时的账号和密码会为空,所以校验注销之后的账号和密码的输入框是否为空。

/*** 测试用例 7:针对 “注销” 功能进行测试。* 点击注销用户就会退出,页面跳转到登录页面,登录页面的账号和密码为空*/@Test@Order(7)void Logout() {webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();// 校验 1: url(登录的)String cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://localhost:8080/blog_system-2/login.html", cur_url);// 校验 2: 校验提交按钮WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));Assertions.assertNotNull(webElement);}

📢完结撒🌸
以上便是完整的测试用例以及自动化测试啦~~~
在这里插入图片描述


http://www.ppmy.cn/news/296247.html

相关文章

Netty的高性能之道

1.背景 最近看到gitHub上有一个开源项目&#xff0c;通过使用 Netty4 Thrift 压缩二进制编解码技术&#xff0c;他们实现了 10W TPS&#xff08;1K 的复杂 POJO 对象&#xff09;的跨节点远程服务调用。相比于传统基于 Java 序列化 BIO&#xff08;同步阻塞 IO&#xff09;的…

JMeter测试笔记(四):逻辑控制器

引言&#xff1a; 进行性能测试时&#xff0c;我们需要根据不同的情况来设置不同的执行流程&#xff0c;而逻辑控制器可以帮助我们实现这个目的。 在本文中&#xff0c;我们将深入了解JMeter中的逻辑控制器&#xff0c;包括简单控制器、循环控制器等&#xff0c;并学习如何正…

SpringBoot 源码分析初始化应用上下文(1)-createApplicationContext

前言&#xff1a;springBoot的版本是 2.2.4.RELEASE 一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link A…

基于Python的接口自动化-HTTP接口基本组成和网页构成

目录 引言 1、HTTP简介 2、HTTP原理和网页基础 2.1、 HTTP基本原理 2.2、 HTTP请求过程 2.3、 网页构成 【自动化测试工程师学习路线】 引言 在我们进行接口测试时&#xff0c;了解HTTP接口的基本组成和网页构成是非常重要的。 而Python作为一门功能强大、易学易用的编程…

服务器电源线的分类及应用

服务器电源线是由插头、电缆和插座三个部分组成&#xff0c;主要是用来连接服务器和电源分配器。而各个国家根据连接器类型和电压等级的不同&#xff0c;有着不同的电源线标准&#xff0c;这样导致服务器电源线的分类众多&#xff0c;选择合适的服务器电源线在网络系统中是非常…

服务器ups作用,机房UPS电源对服务器太重要了

中心机房的UPS太重要了&#xff0c;前不久就出现过停电坏了一个磁盘陈列硬盘的事故&#xff0c;一个2T的硬盘坏了&#xff0c;还好有一个备用的硬盘使用&#xff0c;否则磁盘陈列里的资料就岌岌可危了。服务器多了&#xff0c;UPS的重要性尤其重要&#xff0c;学校周边施工&…

DELTA台达电源维修DPS-400GB-1A服务器电源维修

DELTA台达电源维修DPS-400GB-1A服务器电源维修 电源维修&#xff1a;大功率开关电源维修&#xff0c;AE电源维修&#xff0c;RF射频电源维修&#xff0c;高频电源维修&#xff0c;高压电源维修&#xff0c;高频直流电源维修&#xff0c;主机电源维修&#xff0c;中频电源维修&…

服务器电源模块型号,服务器电源管理模块

服务器电源管理模块&#xff0c;欧仕茄物联OSGA是国内少有的专业从事于研发、生产多服务器机房集中管理产品、计算机信号处理产品以及机房电源集中管理产品的厂商&#xff0c;自2009年成立以来已经成功为各级数据中心机房提供过自己研发的产品以及专业的解决方案。 服务器电源管…