🌟 欢迎来到 我的博客! 🌈
💡 探索未知, 分享知识 !💫
本文目录
1. 项目描述 2. 测试计划 2.1 功能测试 2.1.1 测试环境 2.1.2 编写测试用例 2.1.3 部分手工功能测试
2.2 ==自动化测试== 2.2.1 注册页面 2.2.2 登录页面 2.2.3 博客列表页面
1. 项目描述
一个基于Spring的前后端分离的论坛系统,用于提供一个学习交流,分享技术文章和个人见解的平台。支持帖子发布、评论、私信用户、管理等功能。
2. 测试计划
2.1 功能测试
2.1.1 测试环境
操作系统:Windows 10旗舰版 项目运行环境:IntelliJ IDEA 2023.2.3、MySQL5.7、JDK1.8 浏览器:Chorme, Edge, FireFox 自动化脚本环境:IntelliJ IDEA 2023.2.3, 测试技术: 手工单元测试和自动化测试 测试人员:我本人
2.1.2 编写测试用例
功能测试点 非功能测试点
2.1.3 部分手工功能测试
场景一 : 输入的用户名
在数据库中存在
,且两次输入密码相同预期结果: 提示用户已经存在 实际结果:提示用户已经存在,与预期结果一致。 场景二 : 输入用户名不存在,密码与却密码一致,点击注册预期结果:注册成功,跳转回登录界面 实际结果:注册成功,跳转回登录界面,与预期结果一致。
场景1 :输入用户名正确, 密码不正确,点击登录预期结果:登录失败,给出错误提示 实际结果:登录失败,给出错误提示, 与预期结果一致 场景2 :输入用户名正确, 密码正确,点击登录预期结果:登录成功,跳转到首页博客列表页 实际结果:登录成功,跳转到首页博客列表页, 与预期结果一致
场景1 :未登录状态下,点击首页 预期结果:跳转回登录界面 实际结果:跳转回登录界面,与预期结果一致场景2 :登录状态下,点击“首页” 预期结果:导航栏显示所有的版块名,下方显示所有帖子列表,右上方显示登录用户信息 实际结果:与预期结果一致 场景3 :登录状态下,点击导航栏处的版块名“Java” 预期结果:下方显示Java名称,该版块下的帖子数量,版块下的所有帖子列表,右上方显示登录用户信息 实际结果:与预期结果一致 场景4 :登录状态下,在搜索框输入关键字“数据库”搜索 预期结果:下方显示帖子正文中所有存在“数据库”这三个字的帖子; 实际结果:刷新回到首页界面,与预期不符。不支持搜索功能。场景5 :登录状态下,点击“月亮”按钮 预期结果:进入夜间模式的切换 实际结果:进入夜间模式的切换,与预期相符。场景6 :登录状态下,点击“发布帖子”按钮 预期结果:进入博客编辑页面,版块名默认选择Java 实际结果:与预期相符。 …
场景1 :未登录状态下,点击首页下的任意一条帖子内容 预期结果:跳转回登录界面 实际结果:跳转回登录界面,与预期结果一致。场景2 :登录状态下,点击首页下的一条帖子内容“西安” 预期结果:跳转到该帖子详情页面 实际结果:与预期相符。场景3 :登录状态下,点击首页下的一条帖子内容“测试”(帖子作者“newCharry”,当前登录作者“TestUser”) 预期结果:跳转到该帖子详情页面,最上方显示帖子信息,左侧显示帖子作者信息,下方显示该帖子的内容,下方只显示点赞按钮。 实际结果:与预期相符。 场景4 :登录状态下,下方点赞按钮 预期结果:上方显示的点赞数加1 实际结果:与预期相符。 …
2.2 自动化测试
2.2.1 注册页面
验证注册成功的情况 :
场景1 :注册用户名在数据库不存在,昵称,两次密码一致,注册成功,跳转回登录界面
@Order ( 1 )
@ParameterizedTest
@CsvSource ( value = "TestUser1,TestUser1,111111,111111" )
void Register ( String userName, String nickname, String password1, String password2) throws InterruptedException , IOException {
webDriver. get ( "http://124.71.152.247:8081/sign-in.html" ) ;
webDriver. findElement ( By . xpath ( "/html/body/div/div/div/div[1]/div/div[3]/a" ) ) . click ( ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#username" ) ) . sendKeys ( "userName" ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#nickname" ) ) . sendKeys ( "nickname" ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#password" ) ) . sendKeys ( "password1" ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#passwordRepeat" ) ) . sendKeys ( "password2" ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#policy" ) ) . click ( ) ;
webDriver. findElement ( By . cssSelector ( "#submit" ) ) . click ( ) ;
Thread . sleep ( 1000 ) ;
String expectUrl = "http://124.71.152.247:8081/sign-in.html" ;
String currentUrl = webDriver. getCurrentUrl ( ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . DAYS ) ;
Assertions . assertEquals ( expectUrl, currentUrl) ;
System . out. println ( "注册成功!" ) ;
File srcFile = ( ( TakesScreenshot ) webDriver) . getScreenshotAs ( OutputType . FILE ) ;
String fileName = "RegisterTest.png" ;
FileUtils . copyFile ( srcFile, new File ( fileName) ) ;
Thread . sleep ( 1000 ) ;
webDriver. navigate ( ) . back ( ) ;
}
验证注册失败的情况
场景2 :注册用户名在数据库存在,昵称,两次密码一致,注册失败,获取警告框信息。 代码同上。测试结果
2.2.2 登录页面
登录成功测试 场景1 :测试用户名正确,密码正确,登录成功
@Order ( 1 )
@ParameterizedTest
@CsvSource ( value = "TestUser1,111111" )
void Login1 ( String username, String password) throws InterruptedException , IOException {
webDriver. get ( "http://124.71.152.247:8081/sign-in.html" ) ;
webDriver. findElement ( By . cssSelector ( "#username" ) ) . sendKeys ( username) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
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 ) ;
Thread . sleep ( 1000 ) ;
String expectUrl = "http://124.71.152.247:8081/index.html" ;
String curUrl = webDriver. getCurrentUrl ( ) ;
Assertions . assertEquals ( expectUrl, curUrl) ;
System . out. println ( "登录成功 !" ) ;
File srcFile = ( ( TakesScreenshot ) webDriver) . getScreenshotAs ( OutputType . FILE ) ;
String fileName = "login1.png" ;
FileUtils . copyFile ( srcFile, new File ( fileName) ) ;
Thread . sleep ( 1000 ) ;
webDriver. navigate ( ) . back ( ) ;
}
登录失败测试 场景2 :测试用户名正确,密码错误,登录失败
@Order ( 2 )
@ParameterizedTest
@CsvSource ( value = "TestUser1,111" )
void Login2 ( String username, String password) throws InterruptedException , IOException {
webDriver. get ( "http://124.71.152.247:8081/sign-in.html" ) ;
webDriver. findElement ( By . cssSelector ( "#username" ) ) . sendKeys ( username) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#password" ) ) . sendKeys ( password) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#submit" ) ) . click ( ) ;
Thread . sleep ( 1000 ) ;
String text = webDriver. findElement ( By . cssSelector ( "body > div.jq-toast-wrap.bottom-right > div" ) ) . getText ( ) ;
System . out. println ( text) ;
}
2.2.3 博客列表页面
未登录状态下测试 场景1 :未登录状态下进入博客列表页,直接跳转回登录界面。测试通过。 实际结果: 未登录,直接跳转到登录页面
@Order ( 1 )
@Test
void BlogList1 ( ) throws InterruptedException , IOException {
webDriver. get ( "http://124.71.152.247:8081/index.html" ) ;
Thread . sleep ( 1000 ) ;
String expectUrl = "http://124.71.152.247:8081/sign-in.html" ;
String curUrl = webDriver. getCurrentUrl ( ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
Assertions . assertEquals ( expectUrl, curUrl) ;
File srcFile = ( ( TakesScreenshot ) webDriver) . getScreenshotAs ( OutputType . FILE ) ;
String fileName = "BlogListFailed.png" ;
FileUtils . copyFile ( srcFile, new File ( fileName) ) ;
}
登录状态下测试 场景2 :登录后进入博客列表页,查看“首页”元素是否存在,查看是否含有“发布帖子”按钮。
@Order ( 2 )
@ParameterizedTest
@CsvSource ( value = "TestUser1,111111" )
void BlogList2 ( String username, String password) throws InterruptedException , IOException {
webDriver. get ( "http://124.71.152.247:8081/sign-in.html" ) ;
webDriver. findElement ( By . cssSelector ( "#username" ) ) . sendKeys ( username) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#password" ) ) . sendKeys ( password) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. manage ( ) . timeouts ( ) . implicitlyWait ( 3 , TimeUnit . SECONDS ) ;
webDriver. findElement ( By . cssSelector ( "#submit" ) ) . click ( ) ;
Thread . sleep ( 1000 ) ;
String expectText1 = "首页" ;
String text1 = webDriver. findElement ( By . cssSelector ( "#nav_board_index > a > span.nav-link-title" ) ) . getText ( ) ;
Assertions . assertEquals ( expectText1, text1) ;
File srcFile = ( ( TakesScreenshot ) webDriver) . getScreenshotAs ( OutputType . FILE ) ;
String fileName = "BlogListSuccess1.png" ;
FileUtils . copyFile ( srcFile, new File ( fileName) ) ;
webDriver. findElement ( By . cssSelector ( "#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post" ) ) . click ( ) ;
String expectUrl = "http://124.71.152.247:8081/index.html" ;
String curUrl = webDriver. getCurrentUrl ( ) ;
Assertions . assertEquals ( expectUrl, curUrl) ;
System . out. println ( "已跳转到边界帖子页面" ) ;
File srcFile2 = ( ( TakesScreenshot ) webDriver) . getScreenshotAs ( OutputType . FILE ) ;
String fileName2 = "BlogListSuccess2.png" ;
FileUtils . copyFile ( srcFile2, new File ( fileName2) ) ;
}
......(部分自动化测试脚本)