目录
测试环境
Chorme浏览器 版本号:112.0.5615.138(正式版本) (64 位)操作系统:win10
博客系统界面
测试用例
1. 博客登录页面测试用例
功能测试
界面测试
性能测试
安全性测试
易用性测试
兼容性测试
2. 博客详情页面测试用例
功能测试
界面测试
性能测试
安全性测试
兼容性测试
易用性测试
3. 删除功能测试用例
功能测试
性能测试
界面测试
安全性测试
易用性测试
兼容性测试
自动化测试
AutoTestUtils
在每个测试类中都要创建和销毁驱动对象,频繁的创建和销毁会浪费很多系统资源,所以我们将其单独创建一个方法并封装起来.
import org.openqa.selenium.chrome.ChromeOptions;
import java.time.Duration;
public class AutoTestUtils {
public static ChromeDriver chromeDriver;
//创建出驱动对象
public static ChromeDriver createDriver() {
//要是还没有创建出对象,就创建出一个浏览器/驱动对象
if (chromeDriver == null) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
chromeDriver = new ChromeDriver(options);
//要是代码执行得很快,就会导致前端没渲染好,找不到元素的问题,所以要使用等待机制
//最多等待10s(隐式等待)
chromeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
}
return chromeDriver;
}
}
博客登录页面测试
博客登录页面主要测试界面文字是否正常显示,登录情况是否会有异常出现
界面文字测试
public void appearance() {
getDriver();
//检测系统名称是否正确
String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
Assertions.assertEquals("我的博客系统",str1);
//主页,和写博客是否正常
String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
Assertions.assertEquals("主页",str2);
//登录窗口的内容
String str3 = driver.findElement(By.cssSelector("body > div.login-container > form > div > h3")).getText();
Assertions.assertEquals("登录",str3);
String str4 = driver.findElement(By.cssSelector
("body > div.login-container > form > div > div:nth-child(2) > span")).getText();
Assertions.assertEquals("用户名",str4);
String str5 = driver.findElement(By.cssSelector("body > div.login-container > form > div > div:nth-child(3) > span")).getText();
Assertions.assertEquals("密码",str5);
String str6 = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
Assertions.assertEquals("提交",str6);
}
窗口大小测试
public void windowSize() {
driver.manage().window().maximize();
driver.manage().window().minimize();
driver.manage().window().setSize(new Dimension(1000,800));//自定义大小
}
登录成功测试
public void LoginSuc(String name, String password) throws IOException {
//当登录别的账号的时候,就要先将之前的账号密码框清空,再进行登录
driver.findElement(By.cssSelector("#username")).clear();
driver.findElement(By.cssSelector("#password")).clear();
driver.findElement(By.cssSelector("#username")).sendKeys(name);
driver.findElement(By.cssSelector("#password")).sendKeys(password);
driver.findElement(By.cssSelector("body > div.login-container > form > div > div:nth-child(4)")).click();
//上面的三步只是登录的基本步骤,并不能保证能登录成功,所以还要对跳转之后的页面进行检查,要是找不到元素的话就会报错
driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a"));
driver.findElement(By.cssSelector("body > div.container > div.left > div > h3"));
//当一个账号登录成功的时候,想再登录另一个账号的时候,此时就找不到上面的3个元素了,因为此时页面已经不再是登录页面了,所以要退回到登录的页面
driver.navigate().back();
}
登录失败测试
public void LoginFail(String name, String password) throws IOException, InterruptedException {
driver.findElement(By.cssSelector("#username")).clear();
driver.findElement(By.cssSelector("#password")).clear();
driver.findElement(By.cssSelector("#username")).sendKeys(name);
driver.findElement(By.cssSelector("#password")).sendKeys(password);
Thread.sleep(5000);
driver.findElement(By.cssSelector("#submit")).click();
//检查登录页面跳转失败的情况,结果发现,在登录成功的页面中也有这个元素,所以仅仅只有这个元素是不能判断的,可以获取一下文本
Thread.sleep(5000);
String expectation = "用户名或者密码错误,登录失败!";
String actual = chromeDriver.findElement(By.cssSelector("body")).getText();
Assertions.assertNotEquals(expectation, actual);
Thread.sleep(5000);
driver.navigate().back();
}
整体代码
package BlogAutoTest;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.Ch