基于博客系统的测试

news2024/11/17 13:35:31

目录

1.测试用例

2.编写代码

2.1InitAndEnd

2.2BlogCases 编写测试用例

2.2.1.登录

2.2.2博客列表页

2.2.3写博客

          2.2.4博客详情页校验

2.2.5写博客后,校验博客列表页

2.2.6删除刚才测试发布的博客

2.2.7注销


1.测试用例

 

2.编写代码

创建两个类

2.1InitAndEnd

用于打开和关闭浏览器

方法:在所有用例最开始和最后执行所以用@BeforeAll @AfterAll

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

/**
 * @author KYF
 * @create 2023-05-27
 */
public class InitAndEnd {
    static WebDriver webDriver;
    @BeforeAll
    static void SetUp(){
        webDriver=new ChromeDriver();
    }
    @AfterAll
    static void TearDown(){
        webDriver.quit();
    }
    
}

2.2BlogCases 编写测试用例

//规定执行测试用例的顺序
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

2.2.1.登录

要求:输入正确的username和password,点击提交按钮,登录成功

步骤:

  1. 打开博客登录页面 get()
  2. 输入账号和密码 semdKeys()
  3. 点击跳转按钮 click()
  4. 自动跳转到列表页后,校验
    1. 获取当前页面的url-->判断是否正确 getCurrentUrl()
    2. 获取列表页显示用户账号-->判断是否正确 getText()
@Order(1)
@ParameterizedTest
@CsvFileSource(resources ="LoginSuccess.csv" )
void LoginSuccess(String username,String password,String list_url) {
    //打开博客登录页面
    webDriver.get("http://192.168.182.128:8080/blog_system/blog_login.html");
    webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    //输入账号--zhang
    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);
    //跳转到列表页
    //获取当前页面的url
    String cur_url= webDriver.getCurrentUrl();
    //如果url=http://192.168.182.128:8080/blog_system/blog_list.html,测试通过
    Assertions.assertEquals(list_url,cur_url);
    webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    //列表页展示用户信息是zhang
    //用户名是张,测试通过
    String cur_name=webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
    Assertions.assertEquals(username,cur_name);
}

2.2.2博客列表页

要求:博客数量不为0

步骤:

  1. 打开博客列表页 get()
  2. 获取页面上博客标题对应元素的个数 size()
  3. 如果个数不为0,测试通过 Asserisions
@Order(2)
@Test
void BlogList(){
    //打开博客列表页
    webDriver.get("http://192.168.182.128:8080/blog_system/blog_list.html");
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //获取页面上所有博客标题对应元素
    int title_num=webDriver.findElements(By.cssSelector(".title")).size();
    //如果元素数量不为0,测试通过
    Assertions.assertNotEquals(0,title_num);
}

2.2.3写博客

要求:输入自动化测试,点击发布按钮,跳转到博客列表页

步骤:

  1. 在导航栏中找到写博客按钮,点击-->进入写博客
  2. 通过js把标题输入
  3. 点击发布
  4. 获取当前页面的url,判断是否是博客列表页 getCurrentUrl()
/**
 * 写博客
 */
@Order(3)
@Test
void EditBlog() throws InterruptedException {
     //在导航栏中找到写博客按钮,点击
    webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //通过js将标题进行输入
    ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title\").value=\"自动化测试\"");
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //点击发布
    webDriver.findElement(By.cssSelector("#submit")).click();
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //获取当前页面url
    String cur_url= webDriver.getCurrentUrl();
    Assertions.assertEquals("http://192.168.182.128:8080/blog_system/blog_list.html",cur_url);


}

2.2.4博客详情页校验

要求:验证url,title,博客标题是否正确

步骤:

  1. 找到第一篇博客查看全文的按钮-->点击,跳转到博客详情页
  2. 获取当前页面的url,title,博客标题 getCurrenrUrl() getTitle() By.cssSelector
  3. 校验
/**
 * 博客详情页校验
 * url
 * 博客标题
 * 页面title是"博客详情页"
 */
@Order(4)
@ParameterizedTest
@MethodSource("Generator")
void BlogDetail(String expected_url ,String expected_title,String expected_blog_title){
    //找到第一篇博客对应的查看全文的按钮
    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 blog_title=webDriver.findElement(By.cssSelector("body > div.container > div.right > div > h3")).getText();
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //校验
    Assertions.assertEquals(expected_title,cur_title);
    Assertions.assertEquals(expected_blog_title,blog_title);
    if(cur_url.contains(expected_url)){
        System.out.println("测试通过");
    }else{
        System.out.println("测试不通过");
    }
}

2.2.5写博客后,校验博客列表页

要求:博客列表页,检验第一个博客标题和时间是否正确

步骤:

        1.获取第一个博客的标题,检验是否是"自动化测试"

        2.获取第一篇的发布时间

/**
 *校验已发布博客标题
 * 检验已发布博客时间2.2
 */
@Order(5)
@Test
void BlogInfoChecked(){
    webDriver.get("http://192.168.182.128:8080/blog_system/blog_list.html");
    //获取第一个博客标题
    String first_blog_title=webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
    //获取第一篇发布时间
    String first_blog_time=webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div[2]")).getText();
    //校验博客标题是不是自动化测试
    Assertions.assertEquals("自动化测试",first_blog_title);
    //如果时间是2023-5-26发布,测试通过
    if(first_blog_title.contains("2023-05-26")){

        System.out.println("测试通过");
    }else{
        System.out.println("当前时间是:"+first_blog_time);
        System.out.println("测试不通过");
    }
}

2.2.6删除刚才测试发布的博客

要求:点击删除,检测是否已经删除(列表页第一篇博客不是测试时刚发布的博客)

步骤:

  1. 打开博客列表页
  2. 点击查看全文按钮
  3. 点击删除
  4. 校验第一篇博客标题是不是自动化测试
  5. 如果不是,通过
/**
 * 删除刚才发布的博客
 */
@Order(6)
 @Test
void DeleteBlog() throws InterruptedException {
    //打开博客列表页
    webDriver.get("http://192.168.182.128:8080/blog_system/blog_list.html");
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //点击查看全文按钮
    webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //点击删除
    webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).click();//点击删除后,会自动跳转到博客列表页
    sleep(3000);
    //校验博客列表第一篇博客标题不是"自动化测试"
    String first_blog_title=webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    //校验当前博客标题不等于"自动化测试"
    Assertions.assertNotEquals("自动化测试",first_blog_title);

}

2.2.7注销

要求:点击注销,检测是否跳转到登录页面

步骤:

  1. 找到注销按钮,点击
  2. 跳转到登录页后,检测url和提交按钮
/**
 * 注销
 */
@Order(7)
@Test
void Logout() throws InterruptedException {
    //复制注销按钮
    webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();

   sleep(3000);
   //校验url
    String cur_url= webDriver.getCurrentUrl();
    Assertions.assertEquals("http://192.168.182.128:8080/blog_system/blog_login.html",cur_url);
    sleep(3000);
    //校验提交按钮
    WebElement webElement =webDriver.findElement(By.cssSelector("#submit"));
    Assertions.assertNotNull(webElement);
    sleep(3000);

}

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

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

相关文章

【矩池云】YOLOv3~YOLOv5训练红外小目标数据集

一、数据集准备 数据集下载地址:https://github.com/YimianDai/sirst 1. 需要将数据集转换为YOLO所需要的txt格式 参考链接:https://github.com/pprp/voc2007_for_yolo_torch 1.1 检测图片及其xml文件 import os, shutildef checkPngXml(dir1, dir2…

OceanBase并行执行中 DTL消息接收处理的逻辑

OceanBase 并行执行的消息处理框架是很有意思的,里面用到了不少面向对象编程思想,值得分析。 DTL 从宏观上看可以分为三大部分: DTL 消息发送DTL 消息缓存DTL 消息处理 本文介绍 DTL 消息处理。 核心组件 DTL 消息缓冲区 DTL 消息缓冲区…

不懂这10个命令,别说你会调试网络设备

我的网工朋友大家好啊 好久没跟你们聊思科设备了。 虽然目前大方向上,企业用的设备越来越偏向国产化,学习华为、华三等厂商知识的人也越来越多。 但不可否认的是,思科仍然是厂商老大哥。 交换机、路由器这两块,思科占的全球市场…

若依框架请求magic-api接口出现Uncaught (in promise) error Promise.then (async)

错误描述: 在若依前端向magic-api发请求,实际上收到了返回的数据,但是仍出现错误提示。 错误截图: 猜测的原因: 请求参数错误返回参数错误magic-api内部语法错误 排除原因 在magic-api中仅返回一个数,同…

ChatGPT浪潮席卷,维智科技以时空AI赋能数实融合的未来城市

作者 | 伍杏玲 出品 | CSDN 每个时代都有新的技术浪潮,但在短短两年时间里见证两项颠覆全球的技术发展,实在出人意料之外:2021年以来,元宇宙成为互联网产业新风口,今年ChatGPT成为IT圈“顶流”,这两者为地…

Java访问QingCloud青云QingStor对象存储(公有云、私有云)

一、参考API 官网SDK文档参考:Java SDK - 公有云文档中心 (qingcloud.com) 二、环境说明 公有云跟私有云区别: 使用公有云QingStor,直接按照官网sdk直接可对接,私有云QingStor的话,需要设置具体的私有云请求地址及z…

chatgpt赋能python:Python中构造函数的名称

Python中构造函数的名称 作为一名有10年Python编程经验的工程师,我深知Python语言中构造函数的重要性。在本文中,我将着重介绍Python中构造函数的名称,并阐述其在Python编程中的作用。 什么是构造函数? 构造函数是一种特殊类型…

【C#学习记录】添加控件后工具箱不显示是什么原因

大家好,我是雷工! 今天在一个Winform程序中用到将WindowsMediaPlayer控件添加到工具箱,但添加了好几次,工具箱内均无法显示,经翻找资料和验证确认是跟创建项目时选择的模板有关,为了遇到同样问题的小伙伴能…

荣获用友年度十佳产业融合生态伙伴称号 | 图扑软件

2023 年 4 月 20 日,由中华全国工商业联合会联合工业和信息化部、国务院国资委组织开展的 2023 年度“百场万企”大中小企业融通对接活动——智能制造 MES 产业融通对接会暨 2023 用友 BIP 技术大会 MES 生态创新专题论坛在用友产业园顺利召开。 用友年度生态合作伙…

C语言学习分享(第九次)------数据的存储

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 数据的存储 1. 前言🚩2…

符合国情的supabase私有化部署(0)

符合国情的supabase私有化部署(0) 符合国情的supabase私有化部署(0) 前言开源 BaaS 解决方案快速开始 获取部署文件服务明细 容器启动后创建一个前端app注册邮箱SMTP协议jwt token和kong网关配置并应用更改数据库密码k8s 部署参考尾言常见问题 name resolution failedInvalid …

Python:Python编程:从入门到实践__超清版:Python标准库

Python标准库 1. OrderedDict2. threading三级目录 Python标准库是一组模块,按照的Python都包含了它,我们只需要在程序开头包含一条简单的 import 语句,就可以使用标准库中的任何函数和类。 下面我介绍几个重点 标准库 os : 提供一些与操作系…

Word控件Aspose.Words教程:使用 Java 处理 SXC 和 FODS 文件

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…

NUC980编译错误,multiple target patterns(多个目标匹配)

1:问题: 昨天环境编译的还是没问题的,今天就出错了 : Makefile:133: *** multiple target patterns. Stop 此时:make make clean make disclean 都不可以使用了,报一样的错误。 2:解决办法&…

二叉搜索树的操作、模拟实现、应用以及性能的介绍

一、二叉搜索树 1. 性质 (1)如果左子树不是空,那么左子树上的所有节点的值都小于根节点的值 (2)如果右子树不是空,那么右子树上的所有节点的值都大于根节点的值 (3)左右子树也分别为…

Redis的网络模型

计算机硬件包括CPU,内存,网卡 为了避免用户应用和操作系统内核产生冲突乃至内核崩溃,用户应用和内核是隔离开的 1)进程的寻址空间会被划分成两部分,内核空间和用户空间,内核和用户应用都无法直接访问物理内存&#xff…

【Linux】在Ubuntu上部署web项目(Ubuntu版本为16.04.7,jdk1.8、mysql5.7、tomcat9.0.48)

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

河道水位监测:河道水位监测用什么设备

中国地形复杂,气候多样,导致水资源分布不均,洪涝和干旱等问题时有发生。同时,人类活动也对水资源造成了很大压力,工业和农业用水增加,河道水位下降,生态环境受到威胁。因此,对河道水…

【面向对象三大特性之继承】

目录 1.什么是继承2.父类成员访问2.1 子类访问父类的成员变量2.1.1 子类和父类不存在同名成员变量2.1.2 子类和父类存在同名成员变量 2.2子类中访问父类的成员方法2.2.1. 成员方法名字不同2.2.22. 成员方法名字相同 3.super关键字4.子类构造方法5.super和this的异同点6.代码块的…

可视化探索开源项目的 contributor 关系

引语:作为国内外最大的代码托管平台,根据最新的 GitHub 数据,它拥有超 372,000,000 个仓库,其中有 28,000,000 是公开仓。分布式图数据库 NebulaGraph 便是其中之一,同其他开源项目一样,NebulaGrpah 也有自…