目录
前言
个人论坛系统是一种在线社交平台,为用户提供了丰富的功能,让他们能够轻松地创建帖子、分享信息、讨论话题以及互动交流。
在开发阶段,实时进行了单元测试,所以本文章主要进行自动化测试(功能、界面),分为设计测试用例和进行测试两方面。
一、测试环境
操作系统:Window11专业版
项目运行环境:IntelliJ IDEA 2022.3.3、JDK1.8、MySQL5.7
浏览器:Chrome、Microsoft Edge
浏览器驱动:ChromeDriver、EdgeDriver
web自动化测试工具:selenium4
单元测试框架:Junit5
测试技术:主要进行功能与界面方面的自动化测试
二、环境部署
在pom.xml中部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.0</version>
<scope>test</scope>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.10.0</version>
</dependency>
<!--保存屏幕截图文件所要用到的包 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
三、测试用例
四、执行测试
4.1、公共类设计
创建浏览器驱动对象
为了避免在每次测试时都重复创建浏览器驱动对象,浪费资源和时间,我们可以考虑创建一个公共类来统一管理浏览器驱动对象的创建。
public class AutotestUtils {
public static ChromeDriver chromeDriver;
public static EdgeDriver edgeDriver;
//创建驱动对象
public static ChromeDriver createChromeDriver(){
//驱动创建好了/没有创建
if (chromeDriver==null){
ChromeOptions options=new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
chromeDriver=new ChromeDriver(options);
//隐式等待
Duration duration=Duration.ofSeconds(10);
long millis= duration.toMillis();
chromeDriver.manage().timeouts().implicitlyWait(millis, TimeUnit.MILLISECONDS);
}
return chromeDriver;
}
public static EdgeDriver createEdgeDriver(){
//驱动创建好了/没有创建
if (edgeDriver==null){
EdgeOptions options=new EdgeOptions();
options.addArguments("--remote-allow-origins=*");
edgeDriver=new EdgeDriver(options);
//隐式等待
Duration duration=Duration.ofSeconds(10);
long millis= duration.toMillis();
edgeDriver.manage().timeouts().implicitlyWait(millis,TimeUnit.MILLISECONDS);
}
return edgeDriver;
}
}
测试套件
使用suite测试套件来进行测试,指定类来运行用例
@Suite
@SelectClasses({RegisterPrepareTest.class, LoginPrepareTest.class, BoardPrepareTest.class, ArticlePrepareTest.class,UserPrepareTest.class,MailPrepareTest.class,driverQuitTest.class})
public class runSuite {
}
释放驱动类
单独写一个释放驱动类
public class driverQuitTest extends AutotestUtils {
public static ChromeDriver chromeDriver;
public static EdgeDriver edgeDriver;
@Test
static void driverQuit(){
if (chromeDriver!=null){
chromeDriver.quit();
} else if (edgeDriver!=null) {
edgeDriver.quit();
}else {
chromeDriver.quit();
edgeDriver.quit();
}
}
}
4.2、功能测试
注册页面
首先定义浏览器对象和url
/**
* 1、浏览器对象
* 2、访问登录页面的url
*/
public static ChromeDriver chromeDriver=createChromeDriver();
@BeforeAll
static void baseControl(){
chromeDriver.get("http://49.232.185.203:58080/sign-up.html");
}
测试空的用户名能否正常注册
/**
* 测试空的用户名
* @param username
* @param nickname
* @param password
* @param passwordRepeat
* @throws InterruptedException
*/
@Order(1)
@ParameterizedTest
@CsvSource({",baekhyun,1992,1992"})
public void testRegisterNullUsername(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
chromeDriver.findElement(By.cssSelector("#username")).clear();
chromeDriver.findElement(By.cssSelector("#nickname")).clear();
chromeDriver.findElement(By.cssSelector("#password")).clear();
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
if (nickname!=null){
chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
}
if (password!=null){
chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
}
if (passwordRepeat!=null){
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
}
chromeDriver.findElement(By.cssSelector("#policy")).click();
chromeDriver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(1000);
String except="用户名不能为空";
String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[1]/div")).getText();
Assertions.assertEquals(except,actual);
Thread.sleep(1000);
//复原勾选框
chromeDriver.findElement(By.cssSelector("#policy")).click();
}
测试空的昵称能否正常注册
/**
* 测试空的昵称
* @param username
* @param nickname
* @param password
* @param passwordRepeat
*/
@Order(2)
@ParameterizedTest
@CsvSource({"baekhyun,,1992,1992"})
public void testRegisterNullNickname(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
chromeDriver.findElement(By.cssSelector("#username")).clear();
chromeDriver.findElement(By.cssSelector("#nickname")).clear();
chromeDriver.findElement(By.cssSelector("#password")).clear();
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
if (username!=null){
chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
}
if (password!=null){
chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
}
if (passwordRepeat!=null){
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
}
chromeDriver.findElement(By.cssSelector("#policy")).click();
chromeDriver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(1000);
String except="昵称不能为空";
String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[2]/div")).getText();
Assertions.assertEquals(except,actual);
Thread.sleep(1000);
//复原勾选框
chromeDriver.findElement(By.cssSelector("#policy")).click();
}
测试空的密码能否正常注册
/**
* 测试空的密码
* @param username
* @param nickname
* @param password
* @param passwordRepeat
* @throws InterruptedException
*/
@Order(3)
@ParameterizedTest
@CsvSource({"baekhyun,baekhyun,,1992"})
public void testRegisterNullPassword(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
chromeDriver.findElement(By.cssSelector("#username")).clear();
chromeDriver.findElement(By.cssSelector("#nickname")).clear();
chromeDriver.findElement(By.cssSelector("#password")).clear();
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
if (username!=null){
chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
}
if (nickname!=null){
chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
}
if (passwordRepeat!=null){
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
}
chromeDriver.findElement(By.cssSelector("#policy")).click();
chromeDriver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(1000);
String except="密码不能为空";
String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[3]/div/div")).getText();
Assertions.assertEquals(except,actual);
Thread.sleep(1000);
//复原勾选框
chromeDriver.findElement(By.cssSelector("#policy")).click();
}
测试空的确认密码能否正常注册
/**
* 测试空的确认密码
* @param username
* @param nickname
* @param password
* @param passwordRepeat
* @throws InterruptedException
*/
@Order(4)
@ParameterizedTest
@CsvSource({"baekhyun,baekhyun,1992,"})
public void testRegisterNullPasswordRepeat(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
chromeDriver.findElement(By.cssSelector("#username")).clear();
chromeDriver.findElement(By.cssSelector("#nickname")).clear();
chromeDriver.findElement(By.cssSelector("#password")).clear();
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
if (username!=null){
chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
}
if (nickname!=null){
chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
}
if (password!=null){
chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
}
chromeDriver.findElement(By.cssSelector("#policy")).click();
chromeDriver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(1000);
String except="请检查确认密码";
String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[4]/div/div")).getText();
Assertions.assertEquals(except,actual);
Thread.sleep(1000);
//复原勾选框
chromeDriver.findElement(By.cssSelector("#policy")).click();
}
测试密码和确认密码不一致时能否正常注册
/**
* 测试密码和确认密码不一致
* @param username
* @param nickname
* @param password
* @param passwordRepeat
* @throws InterruptedException
*/
@Order(5)
@ParameterizedTest
@CsvSource({"baekhyun,baekhyun,1992,1993"})
public void testRegisterNullSame(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
chromeDriver.findElement(By.cssSelector("#username")).clear();
chromeDriver.findElement(By.cssSelector("#nickname")).clear();
chromeDriver.findElement(By.cssSelector("#password")).clear();
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
if (username!=null){
chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
}
if (nickname!=null){
chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
}
if (password!=null){
chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
}
if (passwordRepeat!=null){
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
}
chromeDriver.findElement(By.cssSelector("#policy")).click();
chromeDriver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(1000);
String except="请检查确认密码";
String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[4]/div/div")).getText();
Assertions.assertEquals(except,actual);
Thread.sleep(1000);
//复原勾选框
chromeDriver.findElement(By.cssSelector("#policy")).click();
}
测试用户名已注册时能否正常注册
/**
* 测试用户名已存在
* @param username
* @param nickname
* @param password
* @param passwordRepeat
* @throws InterruptedException
*/
@Order(6)
@ParameterizedTest
@CsvSource({"baekhyun,baekhyun,1992,1992"})
public void testRegisterNullExistUsername(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
chromeDriver.findElement(By.cssSelector("#username")).clear();
chromeDriver.findElement(By.cssSelector("#nickname")).clear();
chromeDriver.findElement(By.cssSelector("#password")).clear();
chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
if (username!=null){
chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
}
if (nickname!=null){
chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
}
if (password!=null){
chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
}
if (passwordRepeat!=null){