论坛系统项目测试


前言

针对项目需求编写测试用例,对项目进行测试用例编写和通过 Selenium + JUnit 单元测试框架,来对项目的功能进行自动化测试


一、项目概述

使用SpringMVC + Spring + MyBatis实现的论坛系统。实现用户的注册登录,将密码进行加密存储在数据库,用户可以在个人信息页面查看和修改自己的个人信息,个人信息的存储通常在数据库中,可以通过用户的唯一标识符进行查询和更新。用户可以在论坛系统中发布新的帖子, 已发布的帖子可以通过用户的唯一标识符进行查询和修改。根据发布时间通过版块进行分类分页展示在主页,用户可以选择特定的用户作为收件人,向其发送站内信,通过站内信进行发送查阅和回复。

二、项目功能

用户注册登录、帖子分页展示、帖子详情查看、帖子发布、修改、删除、评论和点赞、用户发布帖子查看、用户个人信息展示和修改、用户间站内信发送和回复。

三、测试用例设计

1.界面测试

界面测试

2.功能测试

2.1.登陆注册模块测试用例

登录注册模块

2.2.主页展示模块测试用例

主页模块

2.3. 个人中心模块测试用例

个人中心模块

2.4.站内信模块测试用例

站内信模块

3.性能测试

性能测试

4.易用性测试

易用性测试

4.安全测试

安全测试

4.兼容性测试

兼容性

四.UI自动化测试

1.登录测试

package forum;

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.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

/**
 * @author HeM_JianK
 * @version 1.0
 * @date 2023/10/30 20:19
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginTest {
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
//            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://39.104.54.203:58880/sign-in.html");
        driver.manage().window().maximize();
        sleep(2000);
    }
    //测试页面元素是否正常
    @Test
    @Order(1)
    public void appearance() throws InterruptedException {
        String login = driver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[2]/div/h2")).getText();
        Assertions.assertEquals(login,"用户登录");
        String label5 = driver.findElement(By.xpath("//*[@id=\"signInForm\"]/div[1]/label")).getText();
        Assertions.assertEquals(label5,"用户名");
        String placeholder5 = driver.findElement(By.cssSelector("#username")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder5,"请输入用户名");
        String label6 = driver.findElement(By.xpath("//*[@id=\"signInForm\"]/div[2]/label")).getText();
        Assertions.assertEquals(label6,"密码");
        String placeholder6 = driver.findElement(By.cssSelector("#password")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder6,"请输入密码");
    }
    //错误登录
    @ParameterizedTest
    @CsvSource(value = {"y,123", "yu,123", "yue,123", "yuey,123",
            "yueyu,123", "yueyue,123"})
    @Order(2)
    void falseLogin(String username,String password){
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.id("submit")).click();
    }
    @ParameterizedTest
    @CsvSource(value = {"yueyue,yueyue3344", "weizi,123456", "huazi,123456"})
    @Order(3)
    void rightLogin(String username,String password) throws InterruptedException {
//        String windowHandle = driver.getWindowHandle();
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.id("submit")).click();
        sleep(2000);
//        String user = driver.findElement(By.xpath("//*[@id=\"article_list_board_title\"]")).getText();
        String user  = driver.findElement(By.id("article_list_board_title")).getText();
        Assertions.assertEquals(user,"首页");
        driver.navigate().back();
    }
    @Test
    @Order(4)
    void nullLogin() throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#submit")).click();
        sleep(2000);
    }
    @Test
    @Order(5)
    void notUnLogin() throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        sleep(2000);
    }
    @Test
    @Order(6)
    void notPwLogin() throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).sendKeys("yue");
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#submit")).click();
        sleep(2000);
    }
    @Test
    @Order(7)
    void quit(){
        driver.quit();
    }
}

2.注册测试

package forum;

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.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

/**
 * @author HeM_JianK
 * @version 1.0
 * @date 2023/10/31 8:15
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class RegistTest {
    private static ChromeDriver driver;
    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
        }
        return driver;
    }
    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://39.104.54.203:58880/sign-in.html");
        driver.manage().window().maximize();
        sleep(2000);
    }
    @Test
    @Order(1)
    public void registUi(){
        String label = driver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[3]/a")).getText();
        Assertions.assertEquals(label,"点击注册");
        driver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[3]/a")).click();
        String url = driver.getCurrentUrl();
        Assertions.assertEquals(url,"http://39.104.54.203:58880/sign-up.html");
        String register = driver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/h2")).getText();
        Assertions.assertEquals(register,"用户注册");
        String label1 = driver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[1]/label")).getText();
        Assertions.assertEquals(label1,"用户名");
        String placeholder1 = driver.findElement(By.cssSelector("#username")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder1,"请输入用户名");
        String label2 = driver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[2]/label")).getText();
        Assertions.assertEquals(label2,"昵称");
        String placeholder2 = driver.findElement(By.cssSelector("#nickname")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder2,"请输入昵称");
        String label3 = driver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[3]/label")).getText();
        Assertions.assertEquals(label3,"密码");
        String placeholder3 = driver.findElement(By.cssSelector("#password")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder3,"请输入密码");
        String label4 = driver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[4]/label")).getText();
        Assertions.assertEquals(label4,"确认密码");
        String placeholder4 = driver.findElement(By.cssSelector("#passwordRepeat")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder4,"再次输入密码");
    }
    //注册功能测试
    //正确注册、输入两次密码不一致的用户、输入已存在用户
    @ParameterizedTest
    @CsvSource(value = {"test01,测试01,123,123", "test02,测试02,123,1234","weizi,威子,123456,123456"})
    @Order(2)
    void registInput(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        //若当前在登录页面则点击注册跳转至注册页面
        if(driver.findElement(By.xpath("//*[@id=\"submit\"]")).getText().equals("登录")){
            driver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[3]/a")).click();
        }
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#nickname")).clear();
        driver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#passwordRepeat")).clear();
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        driver.findElement(By.cssSelector("#policy")).click();
        driver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
    }
    @Test
    @Order(3)
    void quit(){
        driver.quit();
    }
}

3.主页测试

package forum;


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.Keys;
import org.openqa.selenium.chrome.ChromeDriver;


import static java.lang.Thread.sleep;

/**
 * @author HeM_JianK
 * @version 1.0
 * @date 2023/10/31 8:44
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class HomePageTest {
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
        }
        return driver;
    }
    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://39.104.54.203:58880/sign-in.html");
        driver.manage().window().maximize();
        sleep(2000);
    }
    @ParameterizedTest
    @CsvSource(value = {"yueyue,yueyue3344"})
    @Order(1)
    void login(String username,String password){
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.id("submit")).click();
    }
    //主页UI测试
    @Test
    @Order(2)
    void homePageUI() throws InterruptedException {
        sleep(2000);
        String board_title = driver.findElement(By.id("article_list_board_title")).getText();
        Assertions.assertEquals(board_title,"首页");
        driver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a")).click();
        sleep(1000);
        String board_title2 = driver.findElement(By.id("article_list_board_title")).getText();
        Assertions.assertEquals(board_title2,"Java");
        driver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[9]/a")).click();
        sleep(1000);
        String board_title3 = driver.findElement(By.id("article_list_board_title")).getText();
        Assertions.assertEquals(board_title3,"测试");
//        sleep(2000);
//        String nickname = driver.findElement(By.id("index_nav_nickname")).getText();
//        Assertions.assertEquals(nickname,"岳岳");
    }
    //发布帖子测试
    @Test
    @Order(3)
    void post() throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/a[1]")).click();
        sleep(3000);
        String title = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div/h2")).getText();
        Assertions.assertEquals(title,"发新贴");
        driver.switchTo().activeElement().sendKeys("UI自动化测试正文");
        driver.findElement(By.id("article_post_title")).sendKeys("UI自动化测试标题");
        driver.executeScript("window.scrollTo(0,1000)");
        sleep(2000);
        driver.findElement(By.id("article_post_submit")).click();
        //切换帖子版块至"测试"后再次测试
    }

    //帖子详情页展示测试
    @Test
    @Order(4)
    void details() throws InterruptedException {
//        login("yueyue","yueyue3344");
        sleep(2000);
        String title = driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a/strong")).getText();
        String visitCount = driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[2]/div/div[2]/ul/li[1]")).getText();
        int vct = Integer.parseInt(visitCount);
        driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a")).click();
        sleep(2000);
        //重新获取详情页面帖子标题和页面中间帖子标题 判断是否与主页展示标题一致
        String checktitle = driver.findElement(By.id("details_article_title")).getText();
        String checktitle2 = driver.findElement(By.id("details_article_content_title")).getText();
        Assertions.assertEquals(checktitle,title);
        Assertions.assertEquals(checktitle2,title);
        //浏览量判断
        String checkVisitCount = driver.findElement(By.id("details_article_visitCount")).getText();
        int cvct = Integer.parseInt(checkVisitCount);
        Assertions.assertEquals(vct + 1,cvct);
        //点击点赞按钮 判断是否增加
        String likeCount = driver.findElement(By.id("details_article_likeCount")).getText();
        int lc = Integer.parseInt(likeCount);
        driver.findElement(By.id("details_btn_like_count")).click();
        sleep(2000);
        likeCount = driver.findElement(By.id("details_article_likeCount")).getText();
        Assertions.assertEquals(lc + 1,Integer.parseInt(likeCount));
        driver.findElement(By.xpath("//*[@id=\"nav_board_index\"]/a")).click();
    }
    //帖子修改测试
    @Test
    @Order(5)
    void update() throws InterruptedException {
        //标题删除重写 正文追加
//        login("yueyue","yueyue3344");
        sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a")).click();
        sleep(1000);
        driver.findElement(By.id("details_artile_edit")).click();
        sleep(1000);
        driver.findElement(By.id("edit_article_title")).clear();
        driver.findElement(By.id("edit_article_title")).sendKeys("UI自动化测试标题修改");
        driver.findElement(By.id("edit_article_title")).sendKeys(Keys.TAB,Keys.END);
        driver.switchTo().activeElement().sendKeys("修改");
        driver.executeScript("window.scrollTo(0,1000)");
        sleep(2000);
        driver.findElement(By.id("edit_article_submit")).click();
        sleep(1000);
        String title = driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a/strong")).getText();
        Assertions.assertEquals(title.substring(title.length() - 2),"修改");
    }
    //帖子删除测试
    @Test
    @Order(6)
    void delete() throws InterruptedException {
        //通过记录删除前第一条时间 删除后用时间判断当前帖子是否删除成功
//        login("yueyue","yueyue3344");
        sleep(2000);
        String articleCreatTime = driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[2]/div/div[1]/ul/li[2]")).getText();
        driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a")).click();
        sleep(1000);
        driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div[1]/div[2]/div[2]/div/div[3]/div/a")).click();
        sleep(1000);
        driver.findElement(By.id("details_artile_delete")).click();
        sleep(1000);
        String cact = driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[2]/div/div[1]/ul/li[2]")).getText();
        Assertions.assertNotEquals(articleCreatTime,cact);
    }

    @Test
    @Order(7)
    void quit(){
        driver.quit();
    }
}

4.个人中心测试

package forum;

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.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

/**
 * 个人中心
 * @author HeM_JianK
 * @version 1.0
 * @date 2023/10/31 8:47
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class PersonalCenterTest {
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
        }
        return driver;
    }
    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://39.104.54.203:58880/sign-in.html");
        driver.manage().window().maximize();
        sleep(2000);
    }
    @ParameterizedTest
    @CsvSource(value = {"yueyue,yueyue3344"})
    @Order(1)
    void login(String username,String password){
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.id("submit")).click();
    }
    @Test
    @Order(2)
    void CenterUITest() throws InterruptedException {
//        login("yueyue","yueyue3344");
        sleep(2000);
        driver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[3]")).click();
        sleep(6000);
        driver.findElement(By.id("index_user_settings")).click();
        sleep(1000);
        String nickname = driver.findElement(By.id("index_nav_nickname")).getText();
        String cnickname = driver.findElement(By.id("settings_nickname")).getText();
        Assertions.assertEquals(nickname,cnickname);
        String label1 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/h3[1]")).getText();
        Assertions.assertEquals(label1,"昵称");
        String label2 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/h3[2]")).getText();
        Assertions.assertEquals(label2,"邮箱地址");
        String label3 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/h3[3]")).getText();
        Assertions.assertEquals(label3,"电话号码");
        String label4 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/h3[4]")).getText();
        Assertions.assertEquals(label4,"修改密码");
        String mlabel1 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/div[5]/div/div/form/div[1]/label")).getText();
        Assertions.assertEquals(mlabel1,"原密码");
        String placeholder1 = driver.findElement(By.id("settings_input_oldPassword")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder1,"请输入密码");
        String placeholder2 = driver.findElement(By.id("settings_input_newPassword")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder1,"请输入密码");
        String placeholder3 = driver.findElement(By.id("settings_input_passwordRepeat")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder1,"请输入密码");
        String mlabel2 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/div[5]/div/div/form/div[2]/label")).getText();
        Assertions.assertEquals(mlabel2,"新原密码");
        String mlabel3 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/div[5]/div/div/form/div[3]/label")).getText();
        Assertions.assertEquals(mlabel3,"确认密码");
        driver.executeScript("window.scrollTo(0,1000)");
        sleep(1000);
        String label5 = driver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/h3[5]")).getText();
        Assertions.assertEquals(label5,"个人简介");
        String placeholder4 = driver.findElement(By.id("settings_textarea_remark")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder4,"写点自我介绍,可以让朋友们了解你...");
    }
//    @Test
//    @Order(3)
//    void modifyAvatar(){
//      获取当前头像url
//      需要使用AutoIT工具编写脚本
//      使用AutoIT来识别Windows控件信息
//      然后在点击头像上传之后运行脚本执行windows窗口操作完成上传
//      之后点击修改头像
//      重新获取头像url
//      断言url判断头像是否已修改
//    }
    @Test
    @Order(3)
    void updateBasic() throws InterruptedException {
        sleep(1000);
        driver.executeScript("window.scrollTo(0,-1000)");
        sleep(1000);
        driver.findElement(By.id("setting_input_nickname")).clear();
        driver.findElement(By.id("setting_submit_nickname")).click();
        driver.findElement(By.id("setting_input_nickname")).sendKeys("UIAutoTest");
        driver.findElement(By.id("setting_submit_nickname")).click();
        sleep(1500);
        driver.executeScript("window.scrollTo(0,1000)");
        driver.findElement(By.id("setting_input_email")).clear();
        driver.findElement(By.id("setting_submit_email")).click();
        driver.findElement(By.id("setting_input_email")).sendKeys("UIAutoTest@yeah.net");
        driver.findElement(By.id("setting_submit_email")).click();
        sleep(1500);
        driver.executeScript("window.scrollTo(0,1000)");
        driver.findElement(By.id("setting_input_phoneNum")).clear();
        driver.findElement(By.id("setting_submit_phoneNum")).click();
        driver.findElement(By.id("setting_input_phoneNum")).sendKeys("18888888888");
        driver.findElement(By.id("setting_submit_phoneNum")).click();
        driver.executeScript("window.scrollTo(0,10000)");
        sleep(1500);
        driver.findElement(By.id("settings_textarea_remark")).clear();
        driver.findElement(By.id("settings_submit_remark")).click();
        driver.findElement(By.id("settings_textarea_remark")).sendKeys("UI自动化测试");
        driver.findElement(By.id("settings_submit_remark")).click();
    }
    @ParameterizedTest
    @CsvSource(value = {"yueyue3344,yueyue3355,yueyue3355"})
    @Order(4)
    void falseUpdatePassword(String oldPassword,String newPassword,String passwordRepeat) throws InterruptedException {
        sleep(1500);
        // 原密码、新原密码、确认密码都为空
        driver.findElement(By.id("settings_input_oldPassword")).clear();
        driver.findElement(By.id("settings_input_newPassword")).clear();
        driver.findElement(By.id("settings_input_passwordRepeat")).clear();
        driver.findElement(By.id("settings_submit_password")).click();
        sleep(1500);
        //原密码为空、新原密码、确认密码不为空
        driver.findElement(By.id("settings_input_oldPassword")).clear();
        driver.findElement(By.id("settings_input_newPassword")).clear();
        driver.findElement(By.id("settings_input_newPassword")).sendKeys(newPassword);
        driver.findElement(By.id("settings_input_passwordRepeat")).clear();
        driver.findElement(By.id("settings_input_passwordRepeat")).sendKeys(passwordRepeat);
        driver.findElement(By.id("settings_submit_password")).click();
        sleep(1500);
        //新原密码和确认密码不一致
        driver.findElement(By.id("settings_input_oldPassword")).clear();
        driver.findElement(By.id("settings_input_oldPassword")).sendKeys(oldPassword);
        driver.findElement(By.id("settings_input_newPassword")).clear();
        driver.findElement(By.id("settings_input_newPassword")).sendKeys(newPassword);
        driver.findElement(By.id("settings_input_passwordRepeat")).clear();
        driver.findElement(By.id("settings_input_passwordRepeat")).sendKeys(passwordRepeat + "123");
        driver.findElement(By.id("settings_submit_password")).click();
        sleep(1500);
        driver.findElement(By.id("settings_input_oldPassword")).clear();
        driver.findElement(By.id("settings_input_newPassword")).clear();
        driver.findElement(By.id("settings_input_passwordRepeat")).clear();
    }
    @ParameterizedTest
    @CsvSource(value = {"yueyue3344,yueyue3355,yueyue3355"})
    @Order(5)
    void rightUpdatePassword(String oldPassword,String newPassword,String passwordRepeat) throws InterruptedException {
        sleep(1000);
        driver.findElement(By.id("settings_input_oldPassword")).clear();
        driver.findElement(By.id("settings_input_oldPassword")).sendKeys(oldPassword);
        driver.findElement(By.id("settings_input_newPassword")).clear();
        driver.findElement(By.id("settings_input_newPassword")).sendKeys(newPassword);
        driver.findElement(By.id("settings_input_passwordRepeat")).clear();
        driver.findElement(By.id("settings_input_passwordRepeat")).sendKeys(passwordRepeat);
        sleep(1500);
        driver.findElement(By.id("settings_submit_password")).click();
    }
    @Test
    @Order(6)
    void checkUpdate() throws InterruptedException {
        sleep(1500);
        login("yueyue","yueyue3355");
        sleep(1500);
        driver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[3]")).click();
        sleep(5000);
        driver.findElement(By.id("index_user_settings")).click();
        sleep(1000);
        String nickname = driver.findElement(By.id("index_nav_nickname")).getText();
        String cnickname = driver.findElement(By.id("settings_nickname")).getText();
        Assertions.assertEquals(nickname,cnickname);
        driver.executeScript("window.scrollTo(0,1000)");
        rightUpdatePassword("yueyue3355","yueyue3344","yueyue3344");
        sleep(1000);
        driver.quit();
    }

}

上传头像功能暂未通过自动化实现

5.站内信测试

package forum;

import javafx.scene.control.Alert;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

/**
 * @author HeM_JianK
 * @version 1.0
 * @date 2023/10/31 8:49
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MailTest {
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
//            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://39.104.54.203:58880/sign-in.html");
        driver.manage().window().maximize();
        sleep(2000);
    }
    @ParameterizedTest
    @CsvSource(value = {"weizi,123456"})
    @Order(1)
    void login(String username,String password){
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.id("submit")).click();
    }
    //点击给自己发送 发送失败
    @ParameterizedTest
    @ValueSource(strings = "UI自动化测试站内信")
    @Order(2)
    void sendForMe(String mail) throws InterruptedException {
        sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a")).click();
        sleep(1000);
        driver.findElement(By.id("btn_details_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_receive_cancel")).click();
        sleep(1000);
        driver.findElement(By.id("btn_details_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_receive_content")).clear();
        driver.findElement(By.id("btn_index_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("btn_details_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_receive_content")).clear();
        driver.findElement(By.id("index_message_receive_content")).sendKeys(mail);
        driver.findElement(By.id("btn_index_send_message")).click();
        driver.findElement(By.xpath("//*[@id=\"nav_board_index\"]/a")).click();
        sleep(1000);
//        driver.navigate().back();
    }
    //点击给其他人发送 以未读消息出现为成功 切换用户登录
    @ParameterizedTest
    @ValueSource(strings = "UI自动化测试站内信")
    @Order(3)
    void sendForOther(String mail) throws InterruptedException {
//        login("weizi","123456");
//        sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[2]/div/div[2]/div[1]/a")).click();
        sleep(1000);
        driver.findElement(By.id("btn_details_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_receive_cancel")).click();
        sleep(1000);
        driver.findElement(By.id("btn_details_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_receive_content")).clear();
        driver.findElement(By.id("btn_index_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("btn_details_send_message")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_receive_content")).clear();
        driver.findElement(By.id("index_message_receive_content")).sendKeys(mail);
        driver.findElement(By.id("btn_index_send_message")).click();
        driver.findElement(By.xpath("//*[@id=\"nav_board_index\"]/a")).click();
        sleep(1000);
        driver.navigate().back();
    }
    @ParameterizedTest
    @CsvSource(value = {"yueyue,yueyue3344"})
    @Order(4)
    void checkUnRead(String username,String password) throws InterruptedException {
        login(username,password);
        sleep(3000);
        driver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[2]/div/a")).click();
        sleep(1000);
        String state = driver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a/span[1]")).getText();
        Assertions.assertEquals(state,"[未读]");
    }
    //点击未读消息 判断是否转变为已读
    @Test
    @Order(5)
    void checkRead() throws InterruptedException {
//        checkUnRead("yueyue","yueyue3344");
//        sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_reply_cancel")).click();
        sleep(500);
        String state = driver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a/span[1]")).getText();
        Assertions.assertEquals(state,"[已读]");
    }
    //回复消息后 判断是否变为已回复 同时接收方出现未读消息
    @ParameterizedTest
    @CsvSource(value = {"weizi,123456,UI自动化测试回复"})
    @Order(6)
    void checkReplied(String username,String password,String mail) throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a")).click();
        sleep(1000);
        driver.findElement(By.id("btn_index_message_reply")).click();
        sleep(1000);
        driver.findElement(By.id("index_message_reply_receive_content")).clear();
        driver.findElement(By.id("index_message_reply_receive_content")).sendKeys(mail);
        sleep(1000);
        driver.findElement(By.id("btn_index_send_message_reply")).click();
        sleep(1000);
        driver.findElement(By.xpath("//*[@id=\"index_message_offcanvasEnd\"]/div[1]/button")).click();
        driver.navigate().back();
        checkUnRead(username,password);
        sleep(1000);
        driver.quit();
    }

}

6.注销测试

package forum;

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.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

/**
 * @author HeM_JianK
 * @version 1.0
 * @date 2023/10/31 8:55
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LogoutTest {
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
//            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://39.104.54.203:58880/sign-in.html");
        driver.manage().window().maximize();
        sleep(2000);
    }
    @ParameterizedTest
    @CsvSource(value = {"yueyue,yueyue3344"})
    @Order(1)
    void login(String username,String password){
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.id("submit")).click();

    }
    @Test
    @Order(2)
    void logout() throws InterruptedException {
        sleep(1000);
        driver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[3]")).click();
        sleep(1000);
        driver.findElement(By.id("index_user_logout")).click();
        sleep(1000);
    }
    @Test
    @Order(3)
    void quit(){
        driver.quit();
    }
}

7.通过 Suite 套件测试

package forum;

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

/**
 * @author HeM_JianK
 * @version 1.0
 * @date 2023/11/1 22:23
 */
@Suite
@SelectClasses({LoginTest.class, RegistTest.class, HomePageTest.class, PersonalCenterTest.class, MailTest.class, LogoutTest.class})
public class RunAllSuite {
}

8.测试结果

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值