博客系统自动化测试项目实战(测试系列9)

2023-11-13

目录

前言:

1.博客前端页面测试用例图

2.测试用例的代码实现

2.1登录页面的测试

2.2博客列表页面的测试

2.3写博客测试

2.4博客详情页面的测试

2.5已发布博客的标题和时间的测试

2.6注销用户的测试

结束语:


前言:

之前小编给大家讲解了有关于Selenium和Junit5自动化测试的一些基础知识,那么下面我们就针对于我们自己做的一个项目来使用Junit来进行一下自动化测试。

博客项目的前后端博客链接:前端☞http://t.csdn.cn/jZkQd  后端☞http://t.csdn.cn/sN1Uq

博客项目的源码Gitee链接☞https://gitee.com/YAUGAOLELE/project

1.博客前端页面测试用例图

2.测试用例的代码实现

代码侧边的展示:

我们一共创建两个类一个是BlogCase另一个是InitAndEnd。具体代码的创建请看下边。

初始化代码的实现:

package BlogTest;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
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();
    }
}

2.1登录页面的测试

代码展示:

package BlogTest;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;

import java.util.concurrent.TimeUnit;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{
    /**
     * 输入正确的账号,密码,登录成功
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    void LoginSuccess(String username, String password, String blog_list_url){
        System.out.println(username + password + blog_list_url);
        //打开博客登录页面
        webDriver.get("http://43.138.29.216:8080/blog_system/login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号:zhangsan /lisi
        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://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过
        Assertions.assertEquals(blog_list_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //列表页展示的是zhangsan/lisi
        //用户名是zhangsan测试通过,否则测试不通过
        String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(username,cur_admin);
    }
}


结果展示:

2.2博客列表页面的测试

代码展示:

package BlogTest;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;

import java.util.concurrent.TimeUnit;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{
    /**
     * 输入正确的账号,密码,登录成功
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    void LoginSuccess(String username, String password, String blog_list_url){
        System.out.println(username + password + blog_list_url);
        //打开博客登录页面
        webDriver.get("http://43.138.29.216:8080/blog_system/login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号:zhangsan /lisi
        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://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过
        Assertions.assertEquals(blog_list_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //列表页展示的是zhangsan/lisi
        //用户名是zhangsan测试通过,否则测试不通过
        String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(username,cur_admin);
    }

    /**
     *博客列表页面的博客数量不为0
     */
    @Order(2)
    @Test
    void BlogList() {
        //打开博客列表页
        webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");
        //获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过
        //加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //断言:如果这个元素的数量不为0,则认为测试通过
        Assertions.assertNotEquals(0,title_num);
    }
}


结果展示:

2.3写博客测试

代码展示:

package BlogTest;

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

import java.util.concurrent.TimeUnit;

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{
    /**
     * 输入正确的账号,密码,登录成功
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    void LoginSuccess(String username, String password, String blog_list_url){
        System.out.println(username + password + blog_list_url);
        //打开博客登录页面
        webDriver.get("http://43.138.29.216:8080/blog_system/login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号:zhangsan /lisi
        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://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过
        Assertions.assertEquals(blog_list_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //列表页展示的是zhangsan/lisi
        //用户名是zhangsan测试通过,否则测试不通过
        String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(username,cur_admin);
    }

    /**
     *博客列表页面的博客数量不为0
     */
    @Order(2)
    @Test
    void BlogList() {
        //打开博客列表页
        webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");
        //获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过
        //加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //断言:如果这个元素的数量不为0,则认为测试通过
        Assertions.assertNotEquals(0,title_num);
    }

    /**
     * 写博客
     */
    @Order(3)
    @Test
    void EditBlog() throws InterruptedException {
        //找到写博客按钮,点击
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //找到对应的输入框,输入对应的标题。
        webDriver.findElement(By.cssSelector("#title-input"));
        //通过JS进行标题输入
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");
        sleep(3000);
        //点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        //校验
        //获取当前页面的url
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);

    }
}


结果展示:

2.4博客详情页面的测试

代码展示:

package BlogTest;

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.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;

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

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{
    private static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(
                "http://43.138.29.216:8080/blog_system/blog_detail.html",
                "博客详情页",
                "自动化测试"
        ));
    }
    /**
     * 输入正确的账号,密码,登录成功
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    void LoginSuccess(String username, String password, String blog_list_url){
        System.out.println(username + password + blog_list_url);
        //打开博客登录页面
        webDriver.get("http://43.138.29.216:8080/blog_system/login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号:zhangsan /lisi
        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://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过
        Assertions.assertEquals(blog_list_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //列表页展示的是zhangsan/lisi
        //用户名是zhangsan测试通过,否则测试不通过
        String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(username,cur_admin);
    }

    /**
     *博客列表页面的博客数量不为0
     */
    @Order(2)
    @Test
    void BlogList() {
        //打开博客列表页
        webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");
        //获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过
        //加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //断言:如果这个元素的数量不为0,则认为测试通过
        Assertions.assertNotEquals(0,title_num);
    }

    /**
     * 写博客
     */
    @Order(3)
    @Test
    void EditBlog() throws InterruptedException {
        //找到写博客按钮,点击
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //找到对应的输入框,输入对应的标题。
        webDriver.findElement(By.cssSelector("#title-input"));
        //通过JS进行标题输入
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");
        sleep(3000);
        //点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        //校验
        //获取当前页面的url
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);

    }

    /**
     * 博客详情页面的校验
     * 1.校验url
     * 2.校验博客标题
     * 3.页面title是“博客详情页”的测试
     */
    @Order(4)
    @ParameterizedTest
    @MethodSource("Generator")
    void BlogDetail(String expected_url, String expected_title, String expected_blog_title) {
        //找到第一篇博客对应查看全文的按钮
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/a")).click();
        //获取当前页面的url
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();
        //获取当前页面的title
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_title = webDriver.getTitle();
        //获取博客标题
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();
        //校验
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//        Assertions.assertEquals(expected_url,cur_url);
        Assertions.assertEquals(expected_title,cur_title);
        Assertions.assertEquals(expected_blog_title,cur_blog_title);
        if (cur_url.contains(expected_url)) {
            System.out.println("测试通过");
        }else {
            System.out.println(cur_url);
            System.out.println("测试不通过");
        }
    }
}


结果展示:

2.5已发布博客的标题和时间的测试

代码展示:

package BlogTest;

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.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;

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

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{
    private static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(
                "http://43.138.29.216:8080/blog_system/blog_detail.html",
                "博客详情页",
                "自动化测试"
        ));
    }
    /**
     * 输入正确的账号,密码,登录成功
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    void LoginSuccess(String username, String password, String blog_list_url){
        System.out.println(username + password + blog_list_url);
        //打开博客登录页面
        webDriver.get("http://43.138.29.216:8080/blog_system/login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号:zhangsan /lisi
        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://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过
        Assertions.assertEquals(blog_list_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //列表页展示的是zhangsan/lisi
        //用户名是zhangsan测试通过,否则测试不通过
        String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(username,cur_admin);
    }

    /**
     *博客列表页面的博客数量不为0
     */
    @Order(2)
    @Test
    void BlogList() {
        //打开博客列表页
        webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");
        //获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过
        //加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //断言:如果这个元素的数量不为0,则认为测试通过
        Assertions.assertNotEquals(0,title_num);
    }

    /**
     * 写博客
     */
    @Order(3)
    @Test
    void EditBlog() throws InterruptedException {
        //找到写博客按钮,点击
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //找到对应的输入框,输入对应的标题。
        webDriver.findElement(By.cssSelector("#title-input"));
        //通过JS进行标题输入
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");
        sleep(3000);
        //点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        //校验
        //获取当前页面的url
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);

    }

    /**
     * 博客详情页面的校验
     * 1.校验url
     * 2.校验博客标题
     * 3.页面title是“博客详情页”的测试
     */
    @Order(4)
    @ParameterizedTest
    @MethodSource("Generator")
    void BlogDetail(String expected_url, String expected_title, String expected_blog_title) {
        //找到第一篇博客对应查看全文的按钮
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/a")).click();
        //获取当前页面的url
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();
        //获取当前页面的title
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_title = webDriver.getTitle();
        //获取博客标题
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();
        //校验
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//        Assertions.assertEquals(expected_url,cur_url);
        Assertions.assertEquals(expected_title,cur_title);
        Assertions.assertEquals(expected_blog_title,cur_blog_title);
        if (cur_url.contains(expected_url)) {
            System.out.println("测试通过");
        }else {
            System.out.println(cur_url);
            System.out.println("测试不通过");
        }
    }

    @Order(5)
    @Test
    /**
     * 校验已发布博客的标题
     * 校验已发布博客时间
     */
    void BlogInfoChecked() {
        webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");
        //获取第一篇博客的标题
        String first_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > div.title")).getText();
        //获取第一篇博客的发布时间
        String first_blog_time = webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div[2]")).getText();
        //校验博客标题是不是自动化测试
        Assertions.assertEquals("自动化测试",first_blog_title);
        //如果是2023-09-03发布的,测试通过
        if (first_blog_time.contains("2023-09-03")) {
            System.out.println("测试通过");
        }else {
            System.out.println("当前时间是:" + first_blog_time);
            System.out.println("测试不通过");
        }
    }
    
}


结果展示: 

2.6注销用户的测试

代码展示:

package BlogTest;

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.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;

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

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{
    private static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(
                "http://43.138.29.216:8080/blog_system/blog_detail.html",
                "博客详情页",
                "自动化测试"
        ));
    }
    /**
     * 输入正确的账号,密码,登录成功
     */
    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    void LoginSuccess(String username, String password, String blog_list_url){
        System.out.println(username + password + blog_list_url);
        //打开博客登录页面
        webDriver.get("http://43.138.29.216:8080/blog_system/login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号:zhangsan /lisi
        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://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过
        Assertions.assertEquals(blog_list_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //列表页展示的是zhangsan/lisi
        //用户名是zhangsan测试通过,否则测试不通过
        String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(username,cur_admin);
    }

    /**
     *博客列表页面的博客数量不为0
     */
    @Order(2)
    @Test
    void BlogList() {
        //打开博客列表页
        webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");
        //获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过
        //加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //断言:如果这个元素的数量不为0,则认为测试通过
        Assertions.assertNotEquals(0,title_num);
    }

    /**
     * 写博客
     */
    @Order(3)
    @Test
    void EditBlog() throws InterruptedException {
        //找到写博客按钮,点击
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //找到对应的输入框,输入对应的标题。
        webDriver.findElement(By.cssSelector("#title-input"));
        //通过JS进行标题输入
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");
        sleep(3000);
        //点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        //校验
        //获取当前页面的url
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);

    }

    /**
     * 博客详情页面的校验
     * 1.校验url
     * 2.校验博客标题
     * 3.页面title是“博客详情页”的测试
     */
    @Order(4)
    @ParameterizedTest
    @MethodSource("Generator")
    void BlogDetail(String expected_url, String expected_title, String expected_blog_title) {
        //找到第一篇博客对应查看全文的按钮
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/a")).click();
        //获取当前页面的url
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();
        //获取当前页面的title
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_title = webDriver.getTitle();
        //获取博客标题
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();
        //校验
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//        Assertions.assertEquals(expected_url,cur_url);
        Assertions.assertEquals(expected_title,cur_title);
        Assertions.assertEquals(expected_blog_title,cur_blog_title);
        if (cur_url.contains(expected_url)) {
            System.out.println("测试通过");
        }else {
            System.out.println(cur_url);
            System.out.println("测试不通过");
        }
    }

    @Order(5)
    @Test
    /**
     * 校验已发布博客的标题
     * 校验已发布博客时间
     */
    void BlogInfoChecked() {
        webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");
        //获取第一篇博客的标题
        String first_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > div.title")).getText();
        //获取第一篇博客的发布时间
        String first_blog_time = webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div[2]")).getText();
        //校验博客标题是不是自动化测试
        Assertions.assertEquals("自动化测试",first_blog_title);
        //如果是2023-09-03发布的,测试通过
        if (first_blog_time.contains("2023-09-03")) {
            System.out.println("测试通过");
        }else {
            System.out.println("当前时间是:" + first_blog_time);
            System.out.println("测试不通过");
        }
    }

    /**
     * 注销
     */
    @Order(6)
    @Test
    void Logout() {
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        //校验url(登录)
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://43.138.29.216:8080/blog_system/login.html",cur_url);
        //校验提交按钮
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        Assertions.assertNotNull(webElement);
    }
}


结果展示:

结束语:

好了这节小编就给大分享到这里啦,希望这节对大家有关于使用Junit5的自动化测试有一定帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

博客系统自动化测试项目实战(测试系列9) 的相关文章

  • 最佳利用Mock提升测试效率的7个技巧!

    再聊这个问题之前 我们先了解一下公司技术架构的演变过程 这样我们才能真正体会到我们为什么要使用 Mock功能 单体应用 在早期 大部分公司的应用技术栈主要可以分为两大类 LAMP Linux Apache MySQL PHP 和 MVC S
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 19年通过校招进入广州某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • 软件测试|SQLAlchemy环境安装与基础使用

    简介 SQLAlchemy 是一个强大的 Python 库 用于与关系型数据库进行交互 它提供了高度抽象的对象关系映射 ORM 工具 允许使用 Python 对象来操作数据库 而不必编写原生SQL查询 本文将介绍如何安装 SQLAlchem
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 软件测试/测试开发/全日制/测试管理丨Android WebView 技术原理

    Android WebView是一个内置的组件 允许在Android应用中嵌套显示Web内容 Android WebView的技术原理涉及到使用WebKit引擎来渲染Web内容 并提供一系列API和回调函数 使得开发人员可以控制和定制Web
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • 一文让你快速写出高效的软件测试用例

    前言 编写测试用例的目的就是确保测试过程全面高效 有据可查 但要编写出高效的测试用例 需要搞清楚什么是测试用例 以及如何编写出高效的测试用例 接下来将从以下几个部分来进行展开 1 什么是测试用例 2 如何编写测试用例 3 软件测试学习资源分
  • 为什么 @DisplayName 在 JUnit 5 中不能为我工作?

    出于某种原因 我真的很难让显示名称在带有 Kotlin 的 JUnit 5 中得到真正的尊重 这是我出于示例目的创建的测试文件 import org assertj core api Assertions import org junit
  • 如何在 JUnit 5 中参数化 beforeEach()?

    我使用 JUnit 5 作为我的测试运行程序 在设置方法中 我硬编码了 3 个参数 platformName platformVersion and deviceName 我有一个测试方法 应该测试各种组合 这意味着 当运行我的testLo
  • IntelliJ + JUnit 5(木星)

    My build gradle has testCompile org junit jupiter junit jupiter api 5 0 0 使用标准示例http junit org junit5 docs current user
  • 使用 Junit5 在 Spring Boot 应用程序中测试服务层时如何避免数据库连接

    我正在尝试对内部调用存储库方法的服务方法进行单元测试 我的测试方法如下 SpringBootTest public class EmployeeServiceImplTest MockBean private EmployeeReposit
  • 当 JUnit 5 外部测试用例失败时,不要启动嵌套测试用例

    我有以下测试类 import org junit jupiter api Nested import org junit jupiter api Test import org junit jupiter api TestInstance
  • JUnit 5 中的参数化 beforeEach/beforeAll

    我想为一个小型的类似数据库的应用程序编写一个测试 此应用程序使用查询 查询应返回正确的结果 这在 JUnit 5 中很容易实现 比如 BeforeEach void before database prepareDatabase Test
  • 如何在 JUnit5 中为测试套件设置自定义测试执行顺序?

    我在 JUnit5 上进行了大量测试 并在多个线程中并行运行 还有有关每次测试时间的信息 我想在最长的测试开始时运行 并将最快的测试留在最后以优化公共执行时间 我还没有找到在 JUnit5 中执行此操作的方法 版本中5 4有一个org ju
  • 如何将 JUnit 5 与 Gradle 结合使用?

    在成功运行 JUnit 4 测试后 我尝试将 JUnit 5 与 Gradle 一起使用 预期结果 JUnit 4 测试在输出中给出了很好的 通过 结果 并在build reports tests 实际结果 下面的 JUnit 5 测试不输
  • 如何使用 maven-failsafe-plugin 并行运行 JUnit 4 和 JUnit 5 测试

    我正在尝试使用 Junit Jupiter 和 Junit Vintage 包在混合 JUnit 4 和 JUnit 5 中运行并行集成测试 并在最新的 maven failsafe plugin 依赖项中添加 junit 5 的 Sure

随机推荐

  • CSS弹性布局

    弹性布局 弹性布局 也称为flex box 常用于一些自适应网站 可以让网站随浏览器大小变化而变化的网站 从而给用户更好的使用体验 基本属性 1 声明弹性布局 通过display flex 可以让元素声明为flex容器 简称 容器 而它的所
  • android中完全退出当前应用程序的四种方法

    Android程序有很多Activity 比如说主窗口A 调用了子窗口B 如果在B中直接finish 接下里显示的是A 在B中如何关闭整个Android应用程序呢 本人总结了几种比较简单的实现方法 1 Dalvik VM的本地方法 andr
  • Flutter 获取验证码倒计时实现

    Timer countdownTimer String codeCountdownStr 获取验证码 int countdownNum 59 void reGetCountdown setState if countdownTimer nu
  • 机器学习随笔

    1 随机森林在大数据量和feature较多的时候效果比较好 反之的环境下还不如单独的决策树 森林中的每棵树都是独立的 99 9 不相关的树做出的预测结果涵盖所有的情况 这些预测结果将会彼此抵消 少数优秀的树的预测结果将会超脱于芸芸 噪音 做
  • 【Spring

    Resource Resource 接口 介绍 核心方法 常见接口 优缺点 内置 Resource 实现 UrlResource ClassPathResource FileSystemResource PathResource Servl
  • 多线程(C++)临界区Critical Sections问题

    多线程中用来确保同一时刻只有一个线程操作被保护的数据 InitializeCriticalSection cs 初始化临界区 EnterCriticalSection cs 进入临界区 操作数据 MyMoney 10 所有访问MyMoney
  • 重塑自监督学习: DINO 网络如何颠覆视觉特征表示的常规方法

    欢迎关注 CVHub 官方微信公众号 Title Emerging Properties in Self Supervised Vision Transformers Paper https openaccess thecvf com co
  • 解决idea中Cannot resolve method ‘setAttribute

    在学习jsp的时候 在idea上写代码遇上request setAttribute中setAttribute爆红错误 由于找到了解决方法 错误不想复现了 即下面的setAttribute爆红 但是可以正常运行 网上找了好多解决方法但是不适用
  • AD官方八月直播学习笔记-02

    文章目录 答疑 PCB导入logo 安装脚本 prjscr 在sripting syatem里的global projects里面点击安装 找到对应脚本文件 文件 运行脚本 弹出框里点load 位图文件 默认配置 界面里可以直接更改 框选
  • rpm包的rpmbuild spec文件详解

    http machael blog 51cto com 829462 213477 上一篇日志写到 为什么要制作rpm包 以及如何使用 src rpm文件生成rpm包 最后部分还看到 src rpm的内容 实际上 就是由 tar gz源码
  • JAVA单元测试框架-5-timeOut测试

    这篇先来介绍 Test注释下的一个属性 timeOut 主要用来超时判断 详细点说 如果哪个测试方法需要监听执行的时间 那么就可以考虑采用timeOut属性 例如 实际的接口测试中 加入登录接口时间不能超过3秒中 下面来看看如何监控这个方法
  • python为什么int()无法将float转化成int

    原因可能是你用了np zeros count 它的默认数据类型是float64类型的 而且不管你往这个np列表传入什么类型的值 或者后期怎么int 都没用 因为它会自动又改为float类型 并且这个float类型可不是原生的浮点类型 虽然
  • 【手势识别小车】---------(1)项目发起计划与准备

    嵌入式学习从大一到大二已经有两年了 学习了很多零零散散的东西 单片机 通信 视觉 ROS等等 但是没有进行系统的管子所以设计如下一个项目 作为自己阶段性的总结 功能设计 1 小车根据指令前进 后退 转向 停止 2 上位机摄像头进行人脸识别
  • GitHub 搜索技巧

    GitHub 作为目前广大程序猿最大的游乐场 在今年 6 月被 微软 以 75 亿美元价值的微软股票收购 GitHub 再次成为业界讨论的焦点 GitHub 以自由开放的定位吸引了相当多的个人开发者和企业 不断发布和更新相当好用的软件和工具
  • 毕业了

    自己的学生时代快告一段落 即将迎来的是工作时代 对未来充满了好奇 兴奋 希望我保有激情的去面对工作 在写论文的过程中 我也有对自己的论文感兴趣的 比如对Hadoop 但是对于另外一方面没了兴趣 也没有怎么深究 因此 这也是自己的论文的一个遗
  • Spock单元测试框架介绍及在美团优选的实践_第二章(static静态方法mock方式)

    Spock单元测试框架介绍 文章目录 Spock单元测试框架介绍 前言 一 什么是Spock单元测试框架 二 使用步骤 1 引入maven依赖 2 创建GoodsService订单业务类进行单测 3 创建Groovy class类 4 创建
  • pip安装yaml出错问题及解决方案

    pip安装yaml出错问题及解决方案 在使用Python开发过程中 可能会遇到需要安装第三方库的情况 而有时候我们在使用pip install安装某些库时 会遇到一些错误提示 其中就有可能会出现 ERROR Could not find a
  • python删除列数据,另存为xls格式带表头

    使用python删除列数据 import pandas as pd from pandas import DataFrame data pd read excel r 统计 xls sheet name Sheet1 del data 统计
  • LoadRunner 引入在eclipse中写的java项目,并介绍LR的使用(不是简单的打印语句项目)

    摸索了4天中终于在LoadRunner中把java脚本编译通过了 可以正常的运行Java脚本进行性能测试 一 介绍环境 eclipse JDK1 8 32位的 LR12 55 如果有需要LR12 55的小伙伴 在百度网盘直接下 链接 htt
  • 博客系统自动化测试项目实战(测试系列9)

    目录 前言 1 博客前端页面测试用例图 2 测试用例的代码实现 2 1登录页面的测试 2 2博客列表页面的测试 2 3写博客测试 2 4博客详情页面的测试 2 5已发布博客的标题和时间的测试 2 6注销用户的测试 结束语 前言 之前小编给大