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

news2024/11/28 6:43:36

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

  • 🌷 一 测试用例设计
    • 🌺 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;
    @BeforeAll
    static void SetUp() {
        // 加载浏览器驱动
        webDriver = new ChromeDriver();
    }
    @AfterAll
    static 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);

    // 输入账号 zhangsan
    webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

    // 输入密码 123
    webDriver.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_url
    String 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);

     // 获取当前页面 url
     String cur_url = webDriver.getCurrentUrl();
     webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

     // 获取当前页面 title
     String 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);
     // 进行校验
     // 获取当前的 url
     String 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.coloradmin.cn/o/628731.html

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

相关文章

大厂设计师都在用的9个灵感工具

每一件伟大的设计作品都离不开设计师灵感的爆发。设计师有很多灵感来源&#xff0c;比如精美的摄影图片、酷炫的网站设计、APP的特色功能、友好的用户体验动画&#xff0c;或者一篇文章。 设计师每天都需要收集灵感&#xff0c;把灵感收集当成日常生活。在这篇文章中&#xff…

自动化测试工具比较:Selenium vs. Cypress

简介 Selenium是一个广泛应用的测试自动化工具&#xff0c;支持多种编程语言和浏览器。它使用WebDriver协议与浏览器进行通信&#xff0c;可以模拟用户在浏览器中的交互行为。Cypress是一个相对较新的测试自动化工具&#xff0c;它专注于现代Web应用程序的测试&#xff0c;并提…

LarkXR知识库 | 开发者社区FAQ合集(二)

LarkXR是一套基于GPU云化、图形容器、音视频实时编解码、网络传输优化等核心技术的通用型实时云渲染解决方案&#xff0c;帮助XR领域企业级用户及开发者快速搭建XR应用上云通道&#xff0c;使其在各类智能终端上流畅的运行、使用及传播。 平行云开发者社区上线以来&#xff0c…

Git基本知识

Git基本知识 1、Git 资料参考 Git 官网&#xff1a;https://book.git-scm.com/ Git 完整命令手册地址&#xff1a;http://git-scm.com/docs Git 中文文档&#xff1a;https://git-scm.com/book/zh/v2 2、Git安装 Git 各平台安装包下载地址为&#xff1a; http://git-scm…

F407标准库之定时器触发AD转换

关于ADC转换&#xff0c;正点原子的标准库开发中讲的是&#xff1a;软件触发一次转换&#xff0c;然后获取一个数据&#xff0c;没提及外部触发&#xff0c;也没提及ADC中断。 如果要多次读取数据&#xff0c;可以通过循环延时来实现。 这种情况就是通过多次调用&#xff0c;轮…

中国电子学会2023年05月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

2023-05 Scratch三级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 关于变量&#xff0c;下列描述错误的是&#xff1f;&#xff08;A &#xff09;&#xff08;2分&#xff09; A.只能建一个变量 …

【CANoe】CAPL如何检测周期性报文

文章目录 一、实例1、新建工程2、增加两个 Module3、选择在线模式(Online Mode)仿真总线(Simulated Bus)4、配置CAPL Test Moduletest.can代码如下&#xff1a; 5、配置CAN IG(发送周期报文0x101)6、测试结果 二、核心代码三、CAPL函数详解截图参考&#xff1a; 一、实例 以下…

浅谈这些年如何被MDK, IAR, GCC和厂家SDK版本兼容性“蹂躏”, 一代版本一代坑

原创文章&#xff0c;转载请注明出处&#xff1a;https://www.armbbs.cn/forum.php?modviewthread&tid119562 版本迭代是嵌入式开发永久的痛&#xff0c;这么多年不知道浪费了多少时间在版本迭代上。 部分系统组件还好点&#xff0c;有个LTS长期支持版&#xff0c;而厂家…

侧信道攻击:SPA / DPA

参考资料&#xff1a;Cryptographic Engineering, by Cetin Kaya Ko, Editor Springer. 文章目录 Side-Channel AnalysisTiming AnalysisSample Power AnalysisDifferential Power Analysis其他攻击 对抗方法 Side-Channel Analysis 对于密码算法的攻击手段&#xff0c;往往是…

【LoRaWAN】单播与组播multicast调试记录

本文主要记录 【LoRaWAN】单播与组播multicast调试过程的问题 2023.06.09 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#x1f4dd; 个人主页&#xff1a;[欢迎访问我的 Ethernet_Comm 博客…

甘孜州文化旅游产品市场营销策略研究_kaic

甘孜州文化旅游产品市场营销策略研究 摘要&#xff1a; 近年来&#xff0c;随着文化旅游的兴起&#xff0c;越来越多的旅游者渴望精神层面的满足&#xff0c;获得新奇的文化体验&#xff0c;而我国文化旅游仍处于单层次的观赏旅游。本文研究背景包括对旅游行业的背景介绍&#…

【HTML】form标签

<form> 标签用于创建 HTML 表单&#xff0c;它是用于收集用户输入的重要元素。表单可以包含各种输入字段、按钮和其他交互元素&#xff0c;用于向服务器发送用户输入数据。 下面是一个简单的 <form> 标签的示例&#xff1a; <form action"/submit-form&q…

Spring高级装配--条件化的bean

目录 条件化创建bean的例子 使用 解析 条件化创建bean的例子 希望一个或多个bean只有在应用的类路径下包含特定的库时创建希望某个bean只有当另外某个特定的bean也声明之后才会创建要求某个特定的环境变量设置之后&#xff0c;才会创建某个bean在Spring 4之前&#xff0c;很…

【乐观锁与悲观锁】—— 每天一点小知识

&#x1f4a7; 乐观锁与悲观锁 \color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&…

2023-06-09:什么是Redis事务?原理是什么?

2023-06-09&#xff1a;什么是Redis事务&#xff1f;原理是什么&#xff1f; 答案2023-06-09&#xff1a; Redis中的事务是以一组命令的形式出现的&#xff0c;这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令&#xff0c;而且所有命令…

linuxOPS基础_linux ACL访问控制

问题&#xff1a;我们学过的所有者身份包含哪些&#xff1f; 答案:ugo,属主&#xff0c;属组&#xff0c;其他。 问题&#xff1a;我们学过的文件权限包含哪些&#xff1f; 答案&#xff1a;rwx&#xff0c;读写执行&#xff0c;特殊s,t ​ ACL&#xff0c;是 Access Contro…

java变量

基本数据类型介绍 基本的数据类型: 整数类型&#xff1a;byte、short、int、long 定义long类型的变量&#xff0c;赋值时需要以"l"或"L"作为后缀。 Java程序中变量通常声明为int型&#xff0c;除非不足以表示较大的数&#xff0c;才使用long。 Java的整…

移动开发行业,就业及毕业,再到无业,夜夜无眠~

近期听得最多的一个消息就是&#xff1a;“今年太不好找工作了” 这是粉丝朋友发来的感叹&#xff0c;三个星期内没有找到工作&#xff0c;在我朋友圈中算短的了&#xff0c;还有不少朋友已经失业快半年了&#xff0c;情况都和这个类似。 是移动互联网市场变了吗&#xff1f; …

字符串是否相等案例s1==s3?

下列代码的运行结果是&#xff1f; public class test { public static void main(String[] args) { String s1 "abc"; String s2 "ab"; String s3 s2 "c"; System.out.println(s1 s3); } } /** C…

【linux】信号的保存和递达处理

上节我们了解到了预备&#xff08;信号是什么&#xff0c;信号的基础知识&#xff09;再到信号的产生&#xff08;四种方式&#xff09;。今天我们了解信号的保存。信号产生&#xff0c;进程不一定立马就去处理&#xff0c;而是等合适的时间去处理&#xff0c;那么在这段时间内…