一、项目简介
本系统基于SSM框架精心打造。它为用户提供了一个便捷的创作与分享平台。用户可以轻松创建个性化的博客空间,自由撰写、编辑和发布博客。后台采用SSM框架,确保系统的稳定性和高效性。M有B按提示实现了数据的精确管理,优化了数据的存储和查询操作。Spring和Spring MVC则保障了系统的良好架构和流畅的交互体验。无论是个人记录生活点滴还是专业人士分享知识见解,本博客系统都能满足需求,成为用户展现自我,交流思想的理想之地。
二、测试
本博客旨在测试该项目是否能正常实现预期功能。下面,本博客将从功能、界面
性能、兼容性、易用性和安全性这五个方面来分析相关的测试用例。(因为本项目为web项目,故暂不考虑安装卸载方面的测试)
2.1 测试分析
2.1.1 功能上:
2.1.2 界面上
2.1.3 性能上
2.1.4 兼容性
2.1.4 易用性
2.1.5 安全性
2.2 实际测试
2.2.1 简单的手动测试
2.2.1.1 登录测试
1)成功登录时,跳转到博客列表页:正确的账号和密码
2)登录失败时,跳转到登录失败前端界面:错误的账号或密码
2.2.1.2 发布博客
1)点击写博客按钮
2)进入博客详情页,开始写博客
3)点击发布后,博客成功发布,且成功跳转到了博客列表页
2.2.1.3 删除博客
1)点击查看全文按钮
2)点击删除按钮
3)博客成功被删除,并跳转到博客列表页面
2.2.1.4 退出博客
1)进入博客列表页,点击注销按钮
2)成功注销,跳转到博客登录页
2.2.2 自动化测试
准备:
因为每次测试都需要创建驱动,打开浏览器,关闭浏览器,因此直接将创建驱动,关闭浏览器提取出来,分别通过注解使其在代码前后必定被执行到。
代码如下:
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 InitAndEndBrowser {
static WebDriver webDriver;
@BeforeAll
static void OpenBlogSystem(){
webDriver = new ChromeDriver();
}
@AfterAll
static void CloseBlogSystem(){
webDriver.quit();
}
}
2.2.2.1 登陆测试
1)登录成功测试:
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import static java.lang.Thread.sleep;
public class Tests extends InitAndEndBrowser {
//登录测试用例
@ParameterizedTest
@CsvSource({"'http://127.0.0.1:8080/blog_login.html','张三','http://127.0.0.1:8080/blog_list.html','123456'"})
void Login(String url, String userName, String expected_jump_url, String password) throws InterruptedException {
webDriver.get(url);
webDriver.get(url);
sleep(3000);
//输入用户名
webDriver.findElement(By.cssSelector("#username")).sendKeys(userName);
//输入密码
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
//点击提交
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(3000);
//登录成功后,校验是否登录成功
String username = webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
if (username.equals(userName)) {
System.out.println("登录成功测试用例,测试通过.....");
} else {
System.out.println("登录成功测试用例,测试不通过.....");
}
}
}
登录成功:
2)登录失败测试:
import org.openqa.selenium.By;
import static java.lang.Thread.sleep;
import org.openqa.selenium.WebElement;
import org.junit.jupiter.api.Test;
public class Tests extends InitAndEndBrowser {
@Test
void LoginError() throws InterruptedException {
String username = "张三";
String password = "12345";//错误密码
//打开页面
sleep(3000);
webDriver.get("http://127.0.0.1:8080/blog_login.html");
webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
//点击登录按钮
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(3000);
WebElement webElement = webDriver.findElement(By.cssSelector("body > h1"));
if (webElement.getText().equals("用户名或密码错误,登录失败!!!!")){
System.out.println("登录失败测试用例,测试用例通过.....");
}else{
System.out.println("登录失败测试用例,测试用例不通过.....");
}
//也可以通过断言来判断是否一致。如果测试失败,直接就通过不了,且会告知错期望的值和实际值是什么
// Assertions.assertEquals("用户名或密码错误,登录失败!!!!", webElement.getText());
}
}
测试成功:
2.2.2.2 发布博客测试
登录成功以后,测试发布博客(只有登录以后才能写博客并发布,因为在登录界面并无写博客按钮)
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import static java.lang.Thread.sleep;
import org.openqa.selenium.JavascriptExecutor;
public class Tests extends InitAndEndBrowser {
//登录测试用例
@ParameterizedTest
@CsvSource({"'http://127.0.0.1:8080/blog_login.html','张三','http://127.0.0.1:8080/blog_list.html','123456'"})
void Login(String url, String userName, String expected_jump_url, String password) throws InterruptedException {
webDriver.get(url);
webDriver.get(url);
sleep(3000);
//输入用户名
webDriver.findElement(By.cssSelector("#username")).sendKeys(userName);
//输入密码
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
//点击提交
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(3000);
//登录成功后,校验是否登录成功
String username = webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
if (username.equals(userName)) {
System.out.println("登录成功测试用例,测试通过.....");
} else {
System.out.println("登录成功测试用例,测试不通过.....");
}
//测试发布博客
String cur_url = webDriver.getCurrentUrl();
if (cur_url.equals(expected_jump_url)) {
System.out.println("博客页面测试用例,测试通过......");
} else {
System.out.println("博客页面测试用例,测试不通过....");
}
sleep(3000);
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
sleep(3000);
//输入标题(通过Selenium执行JS脚本来完成)document.querySelector("#title").value="测试"
((JavascriptExecutor) webDriver).executeScript("document.querySelector(\"#title\").value=\"测试\"");
sleep(2000);
//点击发布博客按钮
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(10000);
System.out.println("发布博客测试用例通过....");
//校验博客发布成功
//1.找到发布成功的博客的标题
String title = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
sleep(2000);
//2.校验标题对应的元素跟我们所写的标题一致,如果一致,则测试通过,否则测试不通过【可以拿到刚发布的博客的title,即使之前有博客的名字跟现在刚发布的博客的名字一样,也无法通过测试】
Assertions.assertEquals("测试", title);
sleep(2000);
}
}
成功发布:
2.2.2.3 删除博客测试
成功发布博客以后,测试是否能成功删除博客
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import static java.lang.Thread.sleep;
import org.openqa.selenium.JavascriptExecutor;
public class Tests extends InitAndEndBrowser {
//登录测试用例
@ParameterizedTest
@CsvSource({"'http://127.0.0.1:8080/blog_login.html','张三','http://127.0.0.1:8080/blog_list.html','123456'"})
void Login(String url, String userName, String expected_jump_url, String password) throws InterruptedException {
webDriver.get(url);
webDriver.get(url);
sleep(3000);
//输入用户名
webDriver.findElement(By.cssSelector("#username")).sendKeys(userName);
//输入密码
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
//点击提交
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(3000);
//登录成功后,校验是否登录成功
String username = webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
if (username.equals(userName)) {
System.out.println("登录成功测试用例,测试通过.....");
} else {
System.out.println("登录成功测试用例,测试不通过.....");
}
//测试发布博客
String cur_url = webDriver.getCurrentUrl();
if (cur_url.equals(expected_jump_url)) {
System.out.println("博客页面测试用例,测试通过......");
} else {
System.out.println("博客页面测试用例,测试不通过....");
}
sleep(3000);
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
sleep(3000);
//输入标题(通过Selenium执行JS脚本来完成)document.querySelector("#title").value="测试"
((JavascriptExecutor) webDriver).executeScript("document.querySelector(\"#title\").value=\"测试\"");
sleep(2000);
//点击发布博客按钮
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(10000);
System.out.println("发布博客测试用例通过....");
//校验博客发布成功
//1.找到发布成功的博客的标题
String title = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
sleep(2000);
//2.校验标题对应的元素跟我们所写的标题一致,如果一致,则测试通过,否则测试不通过【可以拿到刚发布的博客的title,即使之前有博客的名字跟现在刚发布的博客的名字一样,也无法通过测试】
Assertions.assertEquals("测试", title);
sleep(2000);
//删除博客
//加以个校验是否是自己的博客,只有自己的博客,自己才有资格删除
//点击查看全文【如果只有一条博客,删完就没了,该如何校验呢?如果不知一条,又要如何校验呢】
webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
sleep(3000);
//点击删除按钮
webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();
sleep(10000);
//校验是否成功删除
String url2 = webDriver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:8080/blog_list.html", url2);
System.out.println("校验删除博客成功......");
}
}
删除成功:
2.2.2.4 退出博客测试
校验能否成功退出
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import static java.lang.Thread.sleep;
import org.openqa.selenium.JavascriptExecutor;
public class Tests extends InitAndEndBrowser {
//登录测试用例
@ParameterizedTest
@CsvSource({"'http://127.0.0.1:8080/blog_login.html','张三','http://127.0.0.1:8080/blog_list.html','123456'"})
void Login(String url, String userName, String expected_jump_url, String password) throws InterruptedException {
webDriver.get(url);
webDriver.get(url);
sleep(3000);
//输入用户名
webDriver.findElement(By.cssSelector("#username")).sendKeys(userName);
//输入密码
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
//点击提交
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(3000);
//登录成功后,校验是否登录成功
String username = webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
if (username.equals(userName)) {
System.out.println("登录成功测试用例,测试通过.....");
} else {
System.out.println("登录成功测试用例,测试不通过.....");
}
//测试发布博客
String cur_url = webDriver.getCurrentUrl();
if (cur_url.equals(expected_jump_url)) {
System.out.println("博客页面测试用例,测试通过......");
} else {
System.out.println("博客页面测试用例,测试不通过....");
}
sleep(3000);
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
sleep(3000);
//输入标题(通过Selenium执行JS脚本来完成)document.querySelector("#title").value="测试"
((JavascriptExecutor) webDriver).executeScript("document.querySelector(\"#title\").value=\"测试\"");
sleep(2000);
//点击发布博客按钮
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(10000);
System.out.println("发布博客测试用例通过....");
//校验博客发布成功
//1.找到发布成功的博客的标题
String title = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
sleep(2000);
//2.校验标题对应的元素跟我们所写的标题一致,如果一致,则测试通过,否则测试不通过【可以拿到刚发布的博客的title,即使之前有博客的名字跟现在刚发布的博客的名字一样,也无法通过测试】
Assertions.assertEquals("测试", title);
sleep(2000);
//删除博客
//加以个校验是否是自己的博客,只有自己的博客,自己才有资格删除
//点击查看全文【如果只有一条博客,删完就没了,该如何校验呢?如果不知一条,又要如何校验呢】
webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
sleep(3000);
//点击删除按钮
webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();
sleep(10000);
//校验是否成功删除
String url2 = webDriver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:8080/blog_list.html", url2);
System.out.println("校验删除博客成功......");
//校验注销
//找到注销按钮,点击
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
sleep(3000);
String url3 = webDriver.getCurrentUrl();
String username1 = webDriver.findElement(By.cssSelector("body > div.container-login > div > div:nth-child(2) > span")).getText();
Assertions.assertEquals("http://127.0.0.1:8080/blog_login.html",url3);
Assertions.assertEquals("用户名",username1);
System.out.println("测试注销成功......");
}
}
成功退出: