基于SSM前后端分离版本的论坛系统-自动化测试

目录

前言

一、测试环境

二、环境部署

三、测试用例

四、执行测试

4.1、公共类设计

创建浏览器驱动对象

测试套件

释放驱动类

4.2、功能测试

注册页面

登录页面

版块

 帖子

用户个人中心页

站内信

4.3、界面测试

注册页面

登录页面

版块

帖子

用户个人中心页

站内信


前言

        个人论坛系统是一种在线社交平台,为用户提供了丰富的功能,让他们能够轻松地创建帖子、分享信息、讨论话题以及互动交流。

        在开发阶段,实时进行了单元测试,所以本文章主要进行自动化测试(功能、界面),分为设计测试用例和进行测试两方面。

一、测试环境

操作系统: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){
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值