【测试报告】论坛系统
1.项目背景
随着科学技术的飞速发展,相关编程人员数量激增,大家需要一个平台来进行互相交流,解决问题,论坛系统作为信息化建设的重要组成部分,是十分有必要的。基于Spring Boot的校园论坛系统旨在通过科技手段提高程序员内信息共享、学术讨论和文化交流的效率,为程序员们提供一个开放、便捷、互动性强的交流平台。
2.测试环境
硬件: Vivobook_ASUSLaptop X1603ZA_X1603ZA
操作系统: Windows 11 家庭中文版
浏览器: 1Google Chrome 133.0.6943.142(正式版本) (64 位)
测试工具: 自动化测试Selenium,性能测试Jmeter
自动化脚本运行环境: IntelliJ IDEA 2024.3.3
3.测试分类
3.1 功能测试
测试用例
功能测试结果:测试用例100%通过
3.2 非功能测试
3.3 手动测试
对注册页面进行的测试
场景1:在输入部分注册信息时,由于信息不全,点击注册按钮后系统应该给出相应的提示。
预期结果:页面提示部分信息不能为空。
实际结果:系统确实给出了相应的提示,要求补全所有必填项,与预期一致。
场景2:输入一个已经存在的用户名,并确保密码和确认密码一致,然后点击注册按钮。
预期结果:系统应该提示用户该用户名已经存在。
实际结果:系统确实给出了提示,提示用户该用户名已经存在,与预期结果一致。
场景3:输入一个不存在的用户名,并且输入密码与确认密码不一致,然后点击注册按钮。
预期结果:系统应该提示用户检查确认密码是否输入一致。
实际结果:系统确实给出了相应的提示,指示用户检查确认密码,与预期结果一致
场景4:输入一个不存在的用户名,同时确保密码和确认密码一致,然后点击注册按钮。
预期结果:系统应该显示注册成功,并跳转回登录界面。
实际结果:系统确实显示了注册成功,并且跳转回了登录界面,符合预期。
对登录页面进行的测试
场景1:输入一个已经存在的用户名,并确保密码输入正确,然后点击登录按钮。
预期结果:系统应该显示登录成功,并跳转到论坛首页。
实际结果:系统确实显示了登录成功,并且跳转到了论坛首页,与预期结果一致
场景2:输入一个已经存在的用户名,并且输入错误的密码,然后点击登录按钮。
预期结果:系统应该显示登录失败,并给出相应的错误提示。
实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。
场景3:输入一个不存在的用户名,然后点击登录按钮。
预期结果:系统应该显示登录失败,并给出相应的错误提示。
实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。
4. 自动化测试
4.1. 封装常用的方法
这部分代码是为了在测试过程中初始化和关闭浏览器驱动,并提供了截图功能来记录测试执行的结果。
package com.example.seleniumautotestpractice.commom;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
public class Utils {
/**
* 创建驱动对象,隐式等待
*/
public static WebDriver driver;
public static WebDriver createWebDriver() {
if (driver == null) {
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
//允许访问所有连接
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);
//隐式等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
}
return driver;
}
/**
* 屏幕截图
*/
public void getshot(String str) throws IOException {
SimpleDateFormat sim1=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sim2=new SimpleDateFormat("HHmmssSS");
String dirTime=sim1.format(System.currentTimeMillis());
String fileTime=sim2.format(System.currentTimeMillis());
String filename="./src/test/image/"+dirTime+"/"+str+"-"+fileTime+".png";
File srcShot= ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcShot,new File(filename));
}
public Utils(String url) {
//调用driver对象
driver = createWebDriver();
//访问URL
driver.get(url);
}
}
提供了以下功能:
- 在测试开始前,通过 Selenium WebDriver 初始化浏览器驱动(ChromeDriver)。
- 获取屏幕截图并保存的方法(getScreenShot),根据时间戳生成文件名并将截图保存到指定路径。
4.2. 注册页面测试
4.2.1. 验证注册成功的情况
场景1:注册用户名在数据库中不存在,昵称正常输入,两次密码输入一致,执行注册操作后,预期注册成功并跳转回登录页面。
具体流程如下:
- 使用 WebDriver 打开登录页面。
- 点击页面中的注册按钮,跳转到注册页面。
- 输入不存在于数据库中的用户名 “haha17”、昵称 “haha”,并输入两次相同的密码 “123”。
- 勾选同意协议复选框。
- 点击注册按钮进行注册。
- 等待页面跳转,然后获取当前页面的 URL。
- 判断页面跳转后的 URL 是否是预期的登录页面的 URL。
- 如果跳转成功,断言注册成功。
void regSuccess() throws IOException, InterruptedException {
//创建驱动对象,并打开登陆页面
createDriver("http://47.93.222.41:58080/sign-in.html");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
//点击注册按钮跳转
driver.findElement(By.cssSelector("body > div.page.page-center >" +
" div > div > div:nth-child(1) > div" +
" > div.text-center.text-muted.mt-3 > a")).click();
//输入用户名
driver.findElement(By.cssSelector("#username")).sendKeys("haha17");
//输入昵称
driver.findElement(By.cssSelector("#nickname")).sendKeys("haha");
//输入密码
driver.findElement(By.cssSelector("#password")).sendKeys("123");
//输入确认密码
driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
//点击同意许可
driver.findElement(By.cssSelector("#policy")).click();
//点击注册按钮
driver.findElement(By.cssSelector("#submit")).click();
System.out.println(driver.findElement(By.cssSelector("#submit")).getText());
Thread.sleep(2000);
//注册成功后会跳转到登录页面
String loginHtmlUrl = "http://127.0.0.1:9580/sign-in.html";
//获取当前页面的URL
String nowUrl = driver.getCurrentUrl();
//截图记录
getScreenshot(getClass().getName());
//断言
assert nowUrl.equals(loginHtmlUrl);
}
自动化测试测试结果:pass
4.2.2. 验证注册失败的情况
场景2:用户名已存在于数据库中,但昵称和两次输入的密码仍然符合要求,执行注册操作后,预期注册失败并停留在注册页面。
具体流程如下:
- 使用 WebDriver 打开登录页面。
- 点击页面中的注册按钮,跳转到注册页面。
- 输入已存在于数据库中的用户名 “wangzian”、昵称 “hz”,并输入两次相同的密码 “123”。
- 勾选同意协议复选框。
- 点击注册按钮进行注册。
- 等待页面响应,获取当前页面的 URL。
- 判断页面是否停留在注册页面,即当前页面的 URL 是否是预期的注册页面的 URL。
- 如果停留在注册页面,断言注册失败。
void regAbnomal() throws IOException, InterruptedException {
//创建驱动对象,并打开登陆页面
createDriver("http://47.93.222.41:58080/sign-in.html");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
//点击注册按钮跳转
driver.findElement(By.cssSelector("body > div.page.page-center >" +
" div > div > div:nth-child(1) > div" +
" > div.text-center.text-muted.mt-3 > a")).click();
//输入用户名
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
//输入昵称
driver.findElement(By.cssSelector("#nickname")).sendKeys("hz");
//输入密码
driver.findElement(By.cssSelector("#password")).sendKeys("123");
//输入确认密码
driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
//点击同意许可
driver.findElement(By.cssSelector("#policy")).click();
//点击注册按钮
driver.findElement(By.cssSelector(" #submit")).click();
Thread.sleep(2000);
//注册失败后不会跳转
String regHtmlUrl = "http://127.0.0.1:9580/sign-up.html";
//获取当前页面的URL
String nowUrl = driver.getCurrentUrl();
//截图记录
getScreenshot(getClass().getName());
//断言
assert nowUrl.equals(regHtmlUrl);
}
自动化测试测试结果:pass
4.3. 登录界面测试
4.3.1. 登录失败测试
场景1:用户名正确但密码错误,执行登录操作后,预期登录失败并出现警告提示。
具体流程如下:
- 使用 WebDriver 打开论坛的登录页面。
- 输入正确的用户名 “admin” 和错误的密码 “123”。
- 点击登录按钮进行登录操作。
- 等待页面响应并获取警告提示的文本内容。
- 验证警告提示内容是否与预期一致。
- 截图保存测试结果。
- 断言警告提示内容与预期是否一致
void loginAbnormal() throws IOException, InterruptedException {
// 使用 WebDriver 打开论坛的登录页面。
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和错误的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("1234");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 等待页面响应并获取警告提示的文本内容。
String str = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
// 验证警告提示内容是否与预期一致。
getScreenshot(getClass().getName());
// 截图保存测试结果。
assert str.equals("警告");
}
自动化测试测试结果:pass
4.3.2. 登录成功测试
场景2:用户名和密码都正确,执行登录操作后,预期登录成功并跳转到系统主页。
具体流程如下:
- 使用 WebDriver 打开论坛的登录页面。
- 用户名和密码数据,例如 “wutong, 123456”。
- 输入正确的用户名和密码。
- 点击登录按钮进行登录操作。
- 等待页面响应并获取当前首页元素。
- 确保登录成功后跳转到系统主页。
void loglinSuccess() throws IOException {
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 等待页面响应进入首页,检查页面是否有首页标题
driver.findElement(By.cssSelector("#article_list_board_title"));
getScreenshot(getClass().getName());
// 截图保存测试结果。
}
自动化测试测试结果:pass
4.4. 显示帖子列表测试
4.4.1. 未登录状态下测试
场景1:未登录状态下,直接通过 URL 访问主页帖子列表,预期返回登录页面。
具体流程如下:
- 使用 WebDriver 直接访问论坛的主页列表页面。
- 获取当前页面的 URL。
- 验证当前页面的 URL 是否是预期的登录页面的 URL。
- 截图保存测试结果。
- 断言当前页面的 URL 是否与预期的登录页面的 URL 一致,确保未登录状态下访问主页列表会被重定向到登录页面。
void BlogList1() throws InterruptedException, IOException {
//打开列表页
createDriver("http://47.93.222.41:58080/index.html");
String loginUrl = "http://47.93.222.41:58080/sign-in.html";
Thread.sleep(2000);
//获取当前页面的URl
String nowUrl = driver.getCurrentUrl();
//截图记录
getScreenshot(getClass().getName());
//断言
assert nowUrl.equals(loginUrl);
}
自动化测试测试结果:pass
4.4.2. 登录状态下测试
场景2:登录状态下,进入论坛首页,验证页面是否正确显示帖子相关的控件信息。
具体流程如下:
- 使用 WebDriver 进行登录操作,输入用户名和密码并点击登录按钮。
- 等待页面响应,并验证页面的导航栏是否显示了 “首页” 文本。
- 截图保存测试结果。
- 断言导航栏中是否包含 “首页” 文本,确保页面正确显示了导航栏信息。
- 查看是否有发布帖子的按钮,并点击该按钮。
- 等待页面响应,查看是否跳转到了帖子编辑页面,并验证页面是否包含 “发新贴” 文本。
- 截图保存测试结果。
- 断言页面是否包含 “发新贴” 文本,确保跳转到了帖子编辑页面
void BlogList2() throws InterruptedException, IOException {
//打开登录页
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 等待页面响应进入首页,检查页面是否有首页标题
driver.findElement(By.cssSelector("#article_list_board_title"));
// 定位发帖子按钮并点击
driver.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 text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
// 截图
getScreenshot(getClass().getName());
assert text.equals("发新贴");
}
自动化测试测试结果:pass
4.5. 发布帖子测试
4.5.1. 登录后测试标题和内容其中一个为空
场景1:登录后,点击发布帖子,进入编辑页分别 输入帖子标题但不输入帖子内容 和 不输入帖子标题但输入帖子内容,分别点击发布按钮,测试这两种情况能否成功发布。
具体流程如下:
场景1):登录状态下,测试标题和内容其中一个为空时,发布帖子失败并出现相应提示。
- 打开登录页面,输入用户名和密码进行登录。
- 点击发布帖子按钮,进入帖子编辑页面。
- 第一个场景中,只输入标题而不输入内容,点击发布按钮。
- 验证发布失败后页面出现的提示信息是否为 “请输入帖子内容”。
- 截图保存测试结果并断言提示信息是否符合预期。
场景2):不输入标题,只输入内容时,发布帖子失败并出现相应提示。
- 清空标题输入框内容。
- 编辑帖子内容,因为使用了第三方md插件,不能直接通过sendkeys输入内容,通过模拟点击事件插入内容。
- 点击发布按钮。
- 验证发布失败后页面出现的提示信息是否为 “请输入帖子标题”。
- 截图保存测试结果并断言提示信息是否符合预期。
void writeBlog1() throws IOException, InterruptedException {
//打开登录页
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(2000);
// 等待页面响应进入首页,检查页面是否有首页标题
driver.findElement(By.cssSelector("#article_list_board_title"));
// 定位发帖子按钮并点击
driver.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 text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
// 截图
getScreenshot(getClass().getName());
//确认进入发贴页
assert text.equals("发新贴");
//输入标题
driver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");
Thread.sleep(2000);
//点击发布#article_post_submit
// 使用 Actions 类可以模拟鼠标操作
WebElement element = driver.findElement(By.cssSelector("#article_post_submit"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().perform();
//查看提示
text = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
getScreenshot(getClass().getName());
assert text.equals("提示");
//清空标题,输入内容
driver.findElement(By.cssSelector("#article_post_title")).clear();
//内容区域不支持sendKeys输入,但是可以点击
driver.findElement(By.cssSelector("#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i")).click();
//点击发布
driver.findElement(By.cssSelector("#article_post_submit")).click();
text = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
getScreenshot(getClass().getName());
assert text.equals("提示");
}
自动化测试测试结果:pass
4.5.2. 登录后测试标题和内容都不为空
场景:登录后,点击发布帖子,进入编辑页输入帖子标题帖子内容,预期能够成功发布。
具体流程如下:
- 打开登录页面,输入用户名和密码进行登录。
- 点击发布帖子按钮,进入帖子编辑页面。
- 输入标题和内容,这里测试输入的标题为 “测试发布”。
- 点击发布按钮。
- 等待页面响应,验证发布成功后是否跳转到首页,并查看首页的帖子列表中是否包含刚发布的标题 “测试发布”。
- 截图保存测试结果并断言首页帖子列表中是否包含期望的标题。
void writeBlog2() throws InterruptedException, IOException {
//打开登录页
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(2000);
// 等待页面响应进入首页,检查页面是否有首页标题
driver.findElement(By.cssSelector("#article_list_board_title"));
// 定位发帖子按钮并点击
driver.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 text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
// 截图
getScreenshot(getClass().getName());
//确认进入发贴页
assert text.equals("发新贴");
//输入标题
driver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");
//点击的方式加入内容
driver.findElement(By.cssSelector("#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i")).click();
Thread.sleep(2000);
//点击发布#article_post_submit
// 使用 Actions 类可以模拟鼠标操作
WebElement element = driver.findElement(By.cssSelector("#article_post_submit"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().perform();
Thread.sleep(2000);
//检查首页标签,判断是否发布成功
text = driver.findElement(By.cssSelector("#article_list_board_title")).getText();
//截图记录
getScreenshot(getClass().getName());
assert text.equals("首页");
}
自动化测试测试结果:pass
4.6. 查询帖子内容测试
场景1:登录后,查看帖子内容,分别查看 帖子作者和当前登录用户一致 和 不一致 的帖子,是否正确显示对应帖子的信息。
具体流程如下:
- 点击帖子标题为“测试”的帖子,验证帖子标题是否正确,是否有点赞按钮,并截图保存测试结果。
- 点击帖子标题为“自动化测试”的帖子,验证帖子标题是否正确,是否有点赞按钮、编辑按钮和删除按钮,并截图保存测试结果。
void showBlog() throws InterruptedException, IOException {
//查看别人的贴子,有点赞按钮,没有删除按钮
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(2000);
//点击页面第一个帖子的标题
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
"> div > div.col > div.text-truncate > a > strong")).click();
//定位发布时间,浏览,点赞,评论标签
driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none " +
"> div > div.col-auto.d-none.d-md-inline > ul"));
//定位点赞按钮
String text = driver.findElement(By.cssSelector("#details_btn_like_count")).getText();
//截图
getScreenshot(getClass().getName());
assert text.equals("点赞");
}
自动化测试测试结果:pass
4.7 编辑修改帖子测试
场景1:登录状态下,修改登录用户自己的帖子,修改标题和内容,重新发布,重新查看帖子内容看是否更新。
具体流程如下:
- 登录并点击帖子标题为“与风行”的帖子,进入帖子详情页。
- 点击编辑按钮,跳转到编辑页面。
- 清空原标题,更新标题为“自动化修改标题”,同时添加样式表示修改。
- 点击提交按钮,保存修改并跳转到主页。
- 验证帖子列表中相应帖子的标题是否已更新为“自动化修改标题”。
void updataBlog() throws InterruptedException, IOException {
//查看自己的贴子,有点赞按钮,有删除按钮
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(2000);
getScreenshot(getClass().getName());
//点击页面第一个帖子的标题
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
"> div > div.col > div.text-truncate > a > strong")).click();
Thread.sleep(2000);
//定位编辑按钮,并点击
driver.findElement(By.cssSelector("#details_artile_edit > span")).click();
Thread.sleep(2000);
//定位标题输入框,并清除之前的内容
driver.findElement(By.cssSelector("#edit_article_title")).clear();
//重新输入
driver.findElement(By.cssSelector("#edit_article_title")).sendKeys("自动化修改标题!");
//点击页面下方提交按钮
// 使用 Actions 类可以模拟鼠标操作
WebElement element = driver.findElement(By.cssSelector("#edit_article_submit > span"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().perform();
Thread.sleep(2000);
String text = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
"> div > div.col > div.text-truncate > a > strong")).getText();
//截图记录
getScreenshot(getClass().getName());
assert text.equals("自动化修改标题!");
}
自动化测试测试结果:pass
4.8. 删除帖子测试
场景1:登录状态下,进入帖子详情页,点击删除按钮,删除帖子成功,成功跳转回帖子列表页面。
具体流程如下:
- 登录并点击第一个帖子标题为“测试发布”的帖子,进入帖子详情页。
- 在帖子详情页点击删除按钮,弹出删除确认弹窗。
- 点击确定按钮,确认删除帖子。
- 验证帖子列表中第一条帖子标题是否已更新为其他值(比如"1111")
void deleteBlog() throws InterruptedException, IOException {
//删除自己写的帖子
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(1000);
//点击进入第一个贴子,并记录第二个帖子标题
String text = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(2) " +
"> div > div.col > div.text-truncate > a > strong")).getText();
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
"> div > div.col > div.text-truncate > a > strong")).click();
Thread.sleep(1000);
//定位删除按钮,并点击
driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div " +
"> div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end " +
"> div > div:nth-child(3) > div > a > span")).click();
Thread.sleep(1000);
//定位提示弹窗,并点击删除按钮
driver.findElement(By.cssSelector("#details_artile_delete")).click();
Thread.sleep(1000);
//跳转到首页,获取的一个帖子的标题,用于对比
String newtext = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
"> div > div.col > div.text-truncate > a > strong")).getText();
getScreenshot(getClass().getName());
assert newtext.equals(text);
}
自动化测试测试结果:pass
4.9. 我的帖子查询测试
场景1:登录状态下,进入主页,点击我的帖子,跳转到个人中心页面,显示用户昵称等信息。
具体流程如下:
- 登录并点击头像,进入个人中心查看选项。
- 点击我的帖子。
- 验证我的帖子详情页面中注册账号时间。
void myBlog() throws InterruptedException, IOException {
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
//Thread.sleep(1000);
//点击头像
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
//点击我的帖子
driver.findElement(By.cssSelector("#index_user_profile")).click();
//进入个人主页可以看到账号注册时间,查看元素
driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none " +
"> div > div > div.col > div > div:nth-child(3)"));
getScreenshot(getClass().getName());
}
自动化测试测试结果:pass
4.10. 点赞测试
场景1:登录状态下,进入帖子详情页,点击点赞按钮,验证点赞数是否相应增加。
具体流程如下:
- 登录并进入帖子详情页。
- 获取点赞前的点赞数。
- 点击点赞按钮。
- 获取点赞后的点赞数。
- 验证点赞后的点赞数是否等于点赞前的点赞数加一
void showLike() throws IOException, InterruptedException {
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
//Thread.sleep(1000);
//点击一个帖子
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div " +
"> div.col > div.text-truncate > a > strong")).click();
Thread.sleep(1000);
//查看帖子的点赞数
String cur = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
//点击点赞按钮
driver.findElement(By.cssSelector("#details_btn_like_count")).click();
Thread.sleep(1000);
String now = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
getScreenshot(getClass().getName());
int num = Integer.parseInt(now)-Integer.parseInt(cur);
assert num==1;
}
自动化测试测试结果:pass
4.11. 退出测试
场景1:登录后,点击用户头像下的退出按钮,跳转回登录界面,退出成功。
具体流程如下:
登录并进入个人中心页面。
点击头像,再点击退出。
验证退出后是否跳转到登录页面
void Exit() throws IOException {
createDriver("http://47.93.222.41:58080/sign-in.html");
// 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
driver.findElement(By.cssSelector("#password")).sendKeys("123");
// 点击登录按钮进行登录操作。
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
//Thread.sleep(1000);
//点击头像
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
//点击退出
driver.findElement(By.cssSelector("#index_user_logout > span")).click();
getScreenshot(getClass().getName());
//获取当前URL
String url = driver.getCurrentUrl();
assert url.equals("http://127.0.0.1:9580/sign-in.html");
}
5.遗留风险
测试时间紧张,先保证博客主体功能没问题,可能存在细节测试不到位
6.测试结果评估
1)主线功能测试通过,项目可以上线
2)项目上线后高优观察线上数据