目录
博客系统项目界面展示
登录页
博客列表页
博客详情页
博客发布页
测试用例的设计
包括功能测试,性能测试,界面测试,易用性测试
功能测试(部分功能测试采用自动化方式进行)
对博客系统进行自动化测试
登录测试
测试1:输入正确的账号密码,成功登录并跳转到博客列表页
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:用户名zhangsan,密码123
测试步骤:代码如下
@Order(1)
@ParameterizedTest
@CsvFileSource(resources = "/login.csv")
void LoginSuccessTest(String username,String password){
//1.先进入到登录页面
driver.get("http://127.0.0.1:8080/blog_system/blog_login.html");
//2.找到输入框输入账号密码
driver.findElement(By.cssSelector("#username")).sendKeys(username);
driver.findElement(By.cssSelector("#password")).sendKeys(password);
//3.点击提交
driver.findElement(By.cssSelector("#submit")).click();
//让他显示等待一下
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//4.判断页面的url是否是列表页
String url = driver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:8080/blog_system/blog_list.html",url);
//当前用户的信息是zhangsan
String cur_name =driver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
Assertions.assertEquals(username,cur_name);
//是则测试通过,不是测测试失败
}
期望结果:用例正常通过
实际结果:
用例正常通过,代码无报错
博客列表页测试
测试2:登录成功,测试博客列表的博客数量不为0
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:无
测试步骤:代码如下
@Order(2)
@Test
void BlogListNumTest(){
//1.先跳转到博客列表页
driver.get("http://127.0.0.1:8080/blog_system/blog_list.html");
//2.获取页面上所有页面标题对应的元素,注意使用的是findElements,后面有个s
int title_num = driver.findElements(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).size();
//如果元素数量不为0,那么测试通过
Assertions.assertNotEquals(0,title_num);
}
期望结果:用例正常通过
实际结果:
用例正常通过,代码无报错
写博客以及发布博客测试
测试3:点击发布按钮,博客跳转到详情页,第一条博客是刚刚发布的博客,对比名称和时间
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:博客标题:自动化测试
测试步骤:代码如下
@Order(3)
@Test
void writeTest(){
//1.点击写博客按钮,进入到写博客页面
driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
//显示等待3s
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//2.在输入框内输入,通过js脚本输入“自动化测试”标题
driver.executeScript("document.getElementById(\"title\").value=\"自动化测试\"");
//3.点击发布按钮
driver.findElement(By.cssSelector("#submit")).click();
//4.这个时候会跳转到列表页面
//对比一下当前的url是否是列表页的url
//显示等待3s
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String curUrl = driver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:8080/blog_system/blog_list.html",curUrl);
//看看当前页面的第一篇博客标题和时间是不是刚刚发布的博客
String curTitle = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
Assertions.assertEquals("自动化测试",curTitle);
String curTime = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.date")).getText();
Assertions.assertTrue(curTime.contains("2023-09-04"));
}
期望结果:用例正常通过
实际结果:
用例正常通过,代码无报错
删除博客测试
测试4:删除刚刚添加的自动化测试博客,点击删除按钮,跳转到博客列表页,博客列表页的第一篇博客已经不是原来被删除的博客名字
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:无
测试步骤:代码如下
@Order(4)
@Test
void deleteTest(){
//1.先进入到博客列表页
driver.get("http://127.0.0.1:8080/blog_system/blog_list.html");
//2.点击查看全文按钮,进入到博客详情页
driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
//进行一下显示等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//3.点击删除按钮进行删除博客
driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).click();
//4.对比一下跳转后的页面是不是详情页
String curUrl = driver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:8080/blog_system/blog_list.html",curUrl);
//5.当前页面的第一篇博客名字已经不是被删除的博客名字了
String curTitle = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
Assertions.assertTrue(!"自动化测试".equals(curTitle));
}
期望结果:用例正常通过
实际结果:
用例正常通过,代码无报错
查看博客测试
测试5:点击查看全文跳转到博客详情页 ,博客标题和博客列表页的标题是匹配的
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:博客标题:这是第三篇博客
测试步骤:代码如下
@Order(5)
@ParameterizedTest
@MethodSource()
void BlogTitle(String blogUrl,String BlogTitle){
//1.先跳转到博客列表页
driver.get("http://127.0.0.1:8080/blog_system/blog_list.html");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//2.点击全文链接跳转
driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
//显示等待一下
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//3.对比一下是博客的url,和博客标题,由于每个blogId都不一样所以用contains比较
String url = driver.getCurrentUrl();
Assertions.assertTrue(url.contains(blogUrl));
//拿到详情页的标题进行对比
String title = driver.findElement(By.cssSelector("body > div.container > div.right > div > h3")).getText();
Assertions.assertEquals(BlogTitle,title);
}
static Stream<Arguments> BlogTitle(){
return Stream.of(Arguments.arguments("http://127.0.0.1:8080/blog_system/blog_detail.html?blogId=","这是第三篇博客"));
}
期望结果:用例正常通过
实际结果:
用例正常通过,代码无报错
退出功能测试
测试6:注销功能对应的测试,点击退出按钮,退回到登录页面
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:博客标题:这是第三篇博客
测试步骤:代码如下
@Order(6)
@Test
void LogOut(){
driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
//校验对应的Url
//显示等待一下
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String curUrl = driver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:8080/blog_system/blog_login.html",curUrl);
//校验提交按钮
String button = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
Assertions.assertEquals("提交",button);
}
期望结果:用例正常通过
实际结果:
用例正常通过,代码无报错
自动化执行过程录屏
非自动化测试
博客系统登录功能
测试7.输入错误的用户名和密码后,是否登录失败并显示错误信息
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:输入数据库中不存在的账号haha,密码123
测试步骤:
- 在用户名输入框输入haha
- 在密码框输入123
- 点击提交按钮
期望结果: 会提示用户名或者密码不对
实际结果:当输入了错误的用户名或密码的时候系统会提示我们用户名或者密码不对!
测试8.不输入用户名和密码直接点击提交按钮后,是否提示必须填写用户名和密码。
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:无
测试步骤:
- 删除账号和密码框中的数据
- 直接点击提交按钮
期望结果: 会提示用户名或者密码为空
实际结果:当不输入用户名和密码直接提交时系统会提示我们用户名或者密码为空!
发布博客功能
测试9.不填写博客标题或内容,或者只填写其中一个,是否能提示必须填写完整信息。
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:无
测试步骤:
- 登录账号
- 点击右上角的写博客按钮
- 不填写博客标题或内容,直接点击发布按钮
期望结果: 会提示博客参数缺失!
实际结果:不填写博客标题或内容,直接点击发布按钮会提示博客参数缺失!
测试10.填写包含特殊字符的博客标题和内容,系统是否能正确处理。
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:博客标题:!@#$%^&(() 博客内容:!@#$%^&()(&^$#@@$^)<>?”:}{+_}
测试步骤:
- 登录账号
- 点击右上角的写博客按钮
- 填写博客标题:!@#$%^&(()
- 填写博客内容:!@#$%^&()(&^$#@@$^)<>?”:}{+_}
- 点击发布按钮
期望结果:发布成功并成功显示
实际结果:博客发布成功,系统可以正确处理包含特殊字符的博客标题和内容
删除博客功能
测试11.删除自己发布的博客后,该博客是否从数据库中被成功删除。
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:博客标题:你好世界 博客内容:hello world
测试步骤:
- 登录账号
- 点击右上角的写博客按钮
- 填写博客标题:你好世界
- 填写博客内容:hello world
- 点击发布按钮
- 再点击标题为你好世界的博客下方的查看全文按钮
- 在博客详情页点击右上角的删除按钮进行删除
- 在blogSystem数据库中通过select * from blog来查看该博客是否从数据库中被删除
期望结果:删除自己发布的博客后,该博客从数据库中被成功删除。
实际结果:点击删除按钮之后,该博客从数据库中被删除
测试12.尝试删除其他用户发布的博客时,是否无法删除。
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:无
测试步骤:
- 登录账号
- 点击非登录用户的博客下的查看全文按钮
- 查看右上角是否有删除按钮
期望结果:尝试删除其他用户发布的博客时,无删除按钮。
实际结果:当前登录用户为zhangsan,当我们点击lisi的博客的时候,并不会显示删除按钮
博客系统退出功能
测试13.退出登录后,是否无法再访问需要登录才能查看的页面。
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:无
测试步骤:
- 登录账号
- 点击右上角的退出按钮
- 在未登录的状态下点击右上角的主页按钮
期望结果:退出登录后,无法再访问需要登录才能查看的页面。
实际结果:退出之后无法访问需要登录才能查看的页面
测试14.在退出登录状态下,访问博客列表页、博客详情页等页面,是否自动跳转到登录页面。
测试环境:win10,IntelliJ IDEA Community Edition 2022.3.3
测试数据:无
测试步骤:
- 登录账号
- 点击右上角的退出按钮
- 在未登录的状态下点击右上角的主页按钮
- 弹出未登录的提示框
- 点击提示框的确定按钮
期望结果:退出登录状态下,访问博客列表页、博客详情页等页面,会弹出提示框,点击确定按钮之后,会跳转到登录页面
实际结果:退出之后再访问其他页面会弹出提示框,点击确定之后会跳转到登录页面。