自动化测试

这篇自动化测试,是针对自己做的线上论坛系统进行设计,论坛系统可点击http://111.230.107.237:58080/sign-in.html

1.自动化测试用例

2.前期的准备工作

1.创建Maven项目

2.创建好项目后,在java文件底下创建测试包,并创建forum类和InitAndEnd类

3.在pom.xml文件导入自动化测试需要的相关依赖.

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
       </dependencies>

3.根据设计用例图设计论坛系统自动化测试用例

3.1 准备工作

创建驱动对象


import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class InitAndEnd {
    static WebDriver webDriver;
    @BeforeAll
    static void SetUp(){
        webDriver = new ChromeDriver();
    }
    @AfterAll
    static void TearDown(){
        webDriver.quit();
    }
}
3.2 测试论坛注册页面

1. 注册页面是否能正常打开.

2. 输入用户名,昵称,密码,确认密码,勾选协议.

3. 如果注册失败,会弹出用户名已存在用户框.

4. 如果注册成功,则会成功跳转到登录页面.

/**
     * 注册
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "register.csv")
    void Register(String username, String nickName, String password , String passwordRepeat,String url) throws InterruptedException {
        // 打开注册页面
        webDriver.get("http://127.0.0.1:58080/sign-up.html");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入昵称
        webDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickName);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入确认密码
        webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 勾选协议
        webDriver.findElement(By.cssSelector("#policy")).click();
        // 点击注册按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        //webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        sleep(2000);
        // 检测是否注册成功,如果注册成功会自动跳转登录页,检查url即可
        // 获取到当前页面url
        String cur_url = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        Assertions.assertEquals(url,cur_url);
    }

register.csv 文件内容:

3.3 测试论坛登录页面

1. 输入用户名,密码,确认密码.

2. 如果登录成功会直接跳转到帖子列表页面.

3. 如果登录失败,会弹出对应的弹框.

4. 登录成功会进行验证,获取当前url,和个人信息进行比较.

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;

import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;

import static java.lang.Thread.sleep;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class forumCases extends InitAndEnd{
        
    /**
     * 输入正确的账号,密码登陆成功
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    void LoginSuccess(String username,String password, String url) throws InterruptedException {
        //打开登陆页面
        webDriver.get("http://127.0.0.1:58080/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //输入账号admin
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //输入密码123
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //点击提交按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //跳转列表页
        // 获取到当前页面url
        String cur_url = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 如果url = http://127.0.0.1:58080/index.html,测试通过
        //sleep(3000);
        Assertions.assertEquals(url,cur_url);
        //列表展示用户信息是admin
        //用户名是admin测试通过,否则测试不通过
        //webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        sleep(3000);
        WebElement webElement = webDriver.findElement(By.cssSelector("#index_nav_nickname"));
        sleep(30000);
        String cur_admin = webElement.getText();
        System.out.println(cur_admin);
        Assertions.assertEquals(username,cur_admin);
    }

LoginSuccess.csv文件内容

3.4 测试帖子列表页

1. 验证登录成功后,帖子列表页是否正常.

    /**
     * 帖子列表页页面帖子的数量不为0
     */
    @Order(2)
    @Test
    void BlogList(){
        // 打开博客列表页
        webDriver.get("http://127.0.0.1:58080/index.html");
        // 获取页面上所有博客标题对应的元素
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".text-truncate")).size();
        // 如果元素数量不为0 测试通过
        Assertions.assertNotEquals(0,title_num);
    }
3.5 测试帖子详情页

1. 进入帖子详情页.

2. 验证帖子标题,和当前页面url是否和设置的参数一致.

 /**
     *帖子详情页校验
     * url
     * 帖子标题
     */
    @Order(3)
    @ParameterizedTest
    @MethodSource("Generator")
    void BlogDetail(String url, String title){
        // 找到第一篇帖子对应的帖子标题进行点击
        webDriver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a ")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 获取当前页面的url
        String cur_url = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 获取帖子标题
        String cur_title = webDriver.findElement(By.cssSelector("#details_article_title")).getText();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 校验参数
        Assertions.assertEquals(url,cur_url);
        Assertions.assertEquals(title,cur_title);
    }
    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments("http://127.0.0.1:58080/index.html","11"));
    }
3.6 测试帖子编辑页,发布帖子以及删除帖子

1.点击发布帖子按钮.

2.选择版块,输入标题,输入正文内容.

3.点击发布,如果发布失败会跳出响应的弹窗.

4.点击发布的帖子标题,进行验证.

5.点击删除按钮,测试删除功能,成功或者失败都会跳出响应的弹窗.

    /**
     * 新建帖子
     */
    @Order(5)
    @Test
    void EditBlog() throws InterruptedException {
        // 找到发布帖子按钮,点击
        webDriver.findElement(By.cssSelector("#nav_board_index > a > span.nav-link-title")).click();
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击版块选择
        webDriver.findElement(By.cssSelector("#article_post_borad")).click();

        // 选择想要发布的版块
        webDriver.findElement(By.cssSelector("#article_post_borad > option:nth-child(3)")).click();
        sleep(3000);
        // 找到标题输入框 通过Js将内容输入
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"article_post_title\").value=\"自动化测试\"");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        ((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,document.body.scrollHeight)");
        sleep(1000);
        // 点击发布博客
        webDriver.findElement(By.cssSelector("#article_post_submit")).click();
    }
/**
     * 校验已发布的帖子标题
     * 校验发布时间
     */
    @Order(6)
    @Test
    void BlogInfoChecked(){
        webDriver.get("http://127.0.0.1:58080/index.html");
        // 获取第一篇帖子标题
        String title = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a")).getText();
        // 获取第一篇帖子发布时间
        String time = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(2)")).getText();
        // 校验帖子标题是不是11
        Assertions.assertEquals("自动化测试",title);
       // Assertions.assertEquals("2023-09-09",time);
        if(time.contains("2023-09-09")){
            System.out.println("测试通过");
        }else {
            System.out.println("当前时间是:" + time);
            System.out.println("测试不通过");
        }
    }
    /**
     * 删除帖子
     * 校验删除后第一篇帖子是不是11
     */
    @Order(7)
    @Test
    void DeleteBlog() throws InterruptedException {
        // 打开帖子列表页面
        webDriver.get("http://127.0.0.1:58080/index.html");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击帖子标题进入帖子详情页
        webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击删除按钮
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a")).click();
        sleep(1000);
        // 点击确认删除
        webDriver.findElement(By.cssSelector("#details_artile_delete")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 帖子列表页第一篇帖子不是"自动化测试"
        String title = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a")).getText();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //校验当前帖子标题不等于
        Assertions.assertNotEquals(title,"自动化测试");
    }
3.7 测试注销功能
/**
     * 注销功能
     */
    @Order(8)
    @Test
    void Logout() throws InterruptedException {
        webDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a > div")).click();
        sleep(1000);
        webDriver.findElement(By.cssSelector("#index_user_logout")).click();
        // 校验url(登陆url)
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://127.0.0.1:58080/sign-in.html",cur_url);
        sleep(2000);
        // 校验登陆按钮是否存在
        WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));
        Assertions.assertNotNull(webElement);

    }
 3.8 测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值