servlet个人博客系统的web自动化测试(六)

news2024/11/24 8:36:04

1. 测试前的准备工作

  • 获取博客系统
  • Chrome&webDriver测试环境搭建
  • 流程 :
    1. 熟悉项目
    2. 针对核心流程设计测试用例(手工测试用例)
    3. 将手工测试用例转换成自动化测试用例
    4. 部署

手工测试用例 :

在这里插入图片描述

自动化测试用例

代码结构设计 :

  • 初始化动作:@BeforeAll 创建驱动
  • 退出动作:@AfterAll 退出浏览器

初始化&退出

package blog;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class InitAndEnd {
   static WebDriver webDriver;
   @BeforeAll
   static void SetUp() {
       webDriver = new ChromeDriver();
   }
   @AfterAll
   static void TearDown() {
       webDriver.quit();
   }
}

登录页面测试

  • 输入用户名:zhangsan,密码:123 登录成功
  • 测试用例脚本:
    /*
    * 输入正确的账号,密码登录成功
    */
   @ParameterizedTest
   @CsvFileSource(resources = "LoginSuccess.csv")
   void LoginSuccess(String username, String password, String list_url) throws InterruptedException {
       // 1.打开博客登录页面
       webDriver.get("http://localhost:8080/blog_system/login.html");
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       sleep(1000);
       // 2.输入账号 admin
       WebElement element = webDriver.findElement(By.cssSelector("#username"));
       element.sendKeys(username);
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       sleep(1000);
       // 3.输入密码 123
       WebElement element1 = webDriver.findElement(By.cssSelector("#password"));
       element1.sendKeys(password);
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       sleep(1000);
       // 4.点击提交按钮
       webDriver.findElement(By.cssSelector("#submit")).click();
       sleep(1000);
       // 5.跳转到列表页
       // 6.获取当前页面url
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       String url = webDriver.getCurrentUrl();
       sleep(1000);
       // 7.判断url是否一致
       Assertions.assertEquals(list_url,url);
       sleep(1000);
       // 8. 判断展示的名称是否一致
       String cur_name = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
       Assertions.assertEquals(username,cur_name);
       sleep(1000);
   }

  • 配置文件:LoginSuccess.csv
zhangsan,123,http://localhost:8080/blog_system/blog_list.html
  • 测试过程视频:

    LoginSuccess

  • 测试结果:通过
    在这里插入图片描述
  • 输入用户名:zhangsan,密码:123456 登录失败
  • 测试用例脚本:
    /*
    * 输入错误的账号,密码登录失败
    */
   @ParameterizedTest
   @CsvFileSource(resources = "LoginSuccess.csv")
   void LoginSuccess(String username, String password, String list_url) throws InterruptedException {
       // 1.打开博客登录页面
       webDriver.get("http://localhost:8080/blog_system/login.html");
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       sleep(1000);
       // 2.输入账号 admin
       WebElement element = webDriver.findElement(By.cssSelector("#username"));
       element.sendKeys(username);
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       sleep(1000);
       // 3.输入密码 123456
       WebElement element1 = webDriver.findElement(By.cssSelector("#password"));
       element1.sendKeys(password);
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       sleep(1000);
       // 4.点击提交按钮
       webDriver.findElement(By.cssSelector("#submit")).click();
       sleep(1000);
       // 5.跳转到列表页
       // 6.获取当前页面url
       webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
       String url = webDriver.getCurrentUrl();
       sleep(1000);
       // 7.判断url是否一致
       Assertions.assertEquals(list_url,url);
       sleep(1000);
       // 8. 判断展示的名称是否一致
       String cur_name = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
       Assertions.assertEquals(username,cur_name);
       sleep(1000);
   }

  • 配置文件:LoginSuccess.csv
zhangsan,123456,http://localhost:8080/blog_system/blog_list.html
  • 测试过程视频:

    LoginSuccess 失败

  • 测试结果:失败
    在这里插入图片描述

博客列表博客数量不为0

测试用例脚本:

// 博客数量不为0
   @Test
   void BlogList() {
       // 打开博客列表页
       webDriver.get("http://localhost:8080/blog_system/blog_list.html");
       webDriver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);
       // 获取博客页博客标题的数量
       int title_num = webDriver.findElements(By.cssSelector(".title")).size();
       // 判断博客数量不为0
       Assertions.assertNotEquals(0,title_num);
   }

测试过程视频 :

BlogList


测试结果:通过 在这里插入图片描述

查看全文

  • 点击查看全文按钮跳转到博客详情页

在这里插入图片描述

  • 测试用例脚本
/*
   * 点击查看全文按钮,跳转到博客详情页
   * 博客标题和博客列表页标题一致
   * */
   @Test
   void BlogDetail() {
       // 找到第一篇博客对应的 查看全文 按钮
       webDriver.get("http://localhost:8080/blog_system/blog_list.html");
       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);
       // 获取当前页面标题
       String cur_title = webDriver.getTitle();
       webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
       // 获取博客标题
       String blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();
       webDriver.manage().timeouts().implicitlyWait(2,TimeUnit.HOURS);
       Assertions.assertEquals("http://localhost:8080/blog_system/blog_detail.html?blogId=5",cur_url);
       Assertions.assertEquals("博客详情页",cur_title);
       Assertions.assertEquals("标题",blog_title);
   }
  • 测试过程视频:

    BlogDetails

  • 测试结果:通过
    在这里插入图片描述

写博客

  • 测试用例脚本:
/*
   * 点击写博客按钮
   * 跳转到写博客页面
   * 点击发布博客
   * */
   @Test
   @Order(4)
   void EditBlog() {
       // 找到写博客按钮
       webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
       webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
       // 找到输入框输入标题
webDriver.findElement(By.cssSelector("#title")).sendKeys("自动化测试");
       >webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
       // 点击发布
       >webDriver.findElement(By.cssSelector("#submit")).click();
       >webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
       // 判断是否跳转了到博客列表页
       String cur_url = webDriver.getCurrentUrl();
       >Assertions.assertEquals("http://localhost:8080/blog_system/blog_list.html",cur_url);

   }
   /*
   * 校验已发布博客标题
   * 校验已发布博客时间
   * */
   @Test
   @Order(5)
   void CheckBlog() {
       // 打开博客列表页
       >webDriver.get("http://localhost:8080/blog_system/blog_list.html");
       // 获取博客标题
       String blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > div.title")).getText();
       // 获取博客发布的时间
       String blog_time = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > div.date")).getText();
       // 校验标题
       Assertions.assertEquals("自动化测试",blog_title);
       // 校验时间
       if(blog_time.contains("2024-04-02")){
           System.out.println("时间校验通过");
       } else {
           System.out.println("时间校验失败");
       }
   }

  • 测试过程视频:

    EditBlog

  • 测试结果:通过
    在这里插入图片描述

注销

  • 点击注销按钮,用户退出成功,页面跳转到登录页面,登录页面账号、密码为空
  • 测试用例脚本
/*
   * 注销
   * */
   @Order(6)
   @Test
   void Logout() {
       // 打开博客列表页
       >webDriver.get("http://localhost:8080/blog_system/login.html");
       // 输入用户名
       >webDriver.findElement(By.name("username")).sendKeys("zhangsan");
       // 输入密码
       >webDriver.findElement(By.name("password")).sendKeys("123");
       // 点击登录
       >webDriver.findElement(By.cssSelector("#submit")).click();
       // 点击注销按钮
       String url = webDriver.getCurrentUrl();
       >Assertions.assertEquals("http://localhost:8080/blog_system/blog_list.html",url);
       webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
       webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
       // 校验url
       String cur_url = webDriver.getCurrentUrl();
       >Assertions.assertEquals("http://localhost:8080/blog_system/login.html",cur_url);
       // 校验提交按钮
       WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));
       Assertions.assertNotNull(webElement);
   }
  • 测试过程视频:

  • 测试结果:通过
    在这里插入图片描述

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

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

相关文章

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

银行监管报送系统介绍(十五):金融审计平台

《“十四五”国家审计工作发展规划》中重点强调,金融审计:以防范化解重大风险、促进金融服务实体经济,推动深化金融供给侧结构性改革、建立安全高效的现代金融体系为目标,加强对金融监管部门、金融机构和金融市场运行的审计。 —…

Spring API 接口和自定义类来实现AOP(Spring学习笔记十)

1、什么是AOP 全称是 Aspect Oriented Programming 即:面向切面编程。是OOP(面向对象编程)的延续,也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。简单的说他就是把我们程序重复的代码抽取出来&#xf…

MySQL-执行计划、explain关键字查询执行计划以及explain案例分析

一、执行计划 MySQL 的执行计划(Execution Plan)是数据库查询优化器生成的一种指导性信息,它描述了 MySQL 执行查询时所采用的具体执行策略。执行计划通常由 MySQL 的查询优化器根据查询语句、表结构、索引等信息进行生成,并且用…

基于Docker for Windows部署ChatGPT-Next-Web

基于Docker for Windows部署ChatGPT-Next-Web 项目地址安装Docker for Windows部署项目参数讲解参数示例 运行 项目地址 https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 安装Docker for Windows 官网地址:https://www.docker.com/ 下拉找到Download 选择W…

Error: TF_DENORMALIZED_QUATERNION: Ignoring transform forchild_frame_id

问题 运行程序出现: Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for child_frame_id “odom” from authority “unknown_publisher” because of an invalid quaternion in the transform (0.0 0.0 0.0 0.707) 主要是四元数没有归一化 Eigen::Quatern…

CentOS 7 下离线安装RabbitMQ教程

CentOS 7 下安装RabbitMQ教程一、做准备(VMWare 虚拟机上的 CentOS 7 镜像 上安装的) (1)准备RabbitMQ的安装包(rabbitmq-server-3.8.5-1.el7.noarch)下载地址mq https://github.com/rabbitmq/rabbitmq-se…

使用C++调用讯飞星火API的详细指南

正文: 科大讯飞是中国领先的人工智能公司,其讯飞星火API为开发者提供了丰富的接口和服务,支持各种语音和语言技术的应用。下面是使用C接入讯飞星火API的步骤和代码示例。 步骤一:注册账号并创建应用 首先,您需要访问科…

leetCode刷题 25.K 个一组翻转链表

目录 1.思路: 2.解题方法: 3.复杂度: 4.Code 题目: 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不…

Medium 级别存储型 XSS 攻击演示(附链接)

环境准备 DVWA 靶场https://eclecticism.blog.csdn.net/article/details/135834194?spm1001.2014.3001.5502 测试 打开页面 输入正常值观察 一样的,用户名做了长度限制 更改后输入 HTML 标签语句测试 一样没有做过滤,接下来试试 JS 恶意代码 发现只…

Linux(05) Debian 系统修改主机名

查看主机名 方法1:hostname hostname 方法2:cat etc/hostname cat /etc/hostname 如果在创建Linux系统的时候忘记修改主机名,可以采用以下的方式来修改主机名称。 修改主机名 注意,在linux中下划线“_”可能是无效的字符&…

zabbix图表时间与服务器时间不一致问题

部署完zabbix后,有时候会发现zabbix服务器的时间明明是对的,但是图标的时间不对,通过以下的配置可以快速解决。 登录zabbix-nginx容器 docker exec -u root -it docker-compose-zabbix-zabbix-web-nginx-mysql-1 bash修改php配置文件 vi /e…

合并两个单链表

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 但行前路,不负韶华&#…

【Mysql】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)

目录 前言 基本使用教程 新建远程连接 连接主机 自定义命令 路由追踪 前言 后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器&am…

Spring Boot接收从前端传过来的数据常用方式以及处理的技巧

一、params 传参 参数是会拼接到url后面的请求 场景规范:url后面的key值<=3个参数的时候,使用params 传参 支持的请求方式:get(正规的是get方式)、post 都行 例如: http://localhost:8080/simpleParam?name=Tom&age=10 在postman里面的体现为 后端接收的接口…

AKF扩展立方体和AKF可用性立方体

很多人知道AKF扩展立方体是从《架构即未来》这本书开始。实际上akfpartners官方写过4篇关于AKF扩展立方体的文章&#xff0c;还有一篇介绍AKF可用性立方体。akfpartners官方在高可用、扩展性方面有很多专业技术文章&#xff0c;建议有空就翻翻看。 AKF扩展立方体和AKF可用性立方…

AAC相关知识

一、AAC音频格式种类有哪些 AAC音频格式是一种由MPEG-4标准定义的有损音频压缩格式。AAC包含两种封装格式 ADIF&#xff08;Audio Data Interchange Format音频数据交换格式&#xff09;和ADTS&#xff08;Audio Data transport Stream音频数据传输流&#xff09;。 ADIF 特点…

最简单的 AAC 音频码流解析程序

最简单的 AAC 音频码流解析程序 最简单的 AAC 音频码流解析程序原理源程序运行结果下载链接参考 最简单的 AAC 音频码流解析程序 参考雷霄骅博士的文章&#xff1a;视音频数据处理入门&#xff1a;AAC音频码流解析 本文中的程序是一个AAC码流解析程序。该程序可以从AAC码流中…

Lafida多目数据集实测

Lafida 数据集 paper&#xff1a;J. Imaging | Free Full-Text | LaFiDa—A Laserscanner Multi-Fisheye Camera Dataset 官网数据&#xff1a;https://www.ipf.kit.edu/english/projekt_cv_szenen.php 官网&#xff1a;KIT-IPF-Software and Datasets - LaFiDa 标定数据下载&…