对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)(下)

简介: 对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)(下)

四、博客列表页测试

a0c859d458d545eda2e493e41b247836.png

首先对于博客列表页面来说,分为登录情况下的测试和未登录情况下的测试

登录情况下的测试

package webAutoTest.logined_tests;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import webAutoTest.common.AutotestUtils;
/**
 * 用户登录状态下的博客列表测试
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) // 说明当前类中的测试方法要按一定的顺序来执行---和order配合使用
public class blogListTest extends AutotestUtils {
    private static ChromeDriver driver = new ChromeDriver();
    @Test
    @BeforeAll
    static void init() {
        driver.get("http://49.235.66.46:9000/blog_list.html");
    }
    /**
     * 测试总的博客列表页面的完整性
     */
    @Test
    @Order(1)
    void pageTest() { // 不能用private修饰该方法——》我们的selenium还要调用该方法
        // 看看是否能够获取到博客列表页面的翻页按钮(只有总的博客列表页有,个人主页也没有)
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(1)"));
        // 查看页面的文本内容显示是否正确
        String expect = "Linux删除文件操作";
        String actual = driver.findElement(By.cssSelector("body > div.container > div > div:nth-child(2) > div.title")).getText();
        Assertions.assertEquals(expect, actual); // 断言
        // 查看是否有个人主页的超链接
        driver.findElement(By.cssSelector("#myblog")).click();
        String  expectURL = "http://49.235.66.46:9000/myblog_list.html";
        String actualURL = driver.getCurrentUrl();
        // 利用断言看:在登录成功的情况下,界面是否跳转到了个人主页
        Assertions.assertEquals(expectURL, actualURL);
    }
    @Test
    @AfterAll
    static void exit() {
        driver.quit();
    }
}

未登录情况下的测试

package webAutoTest.unlogined_tests;
import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import webAutoTest.common.AutotestUtils;
/**
 * 用户未登录状态下的博客列表测试
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) // 说明当前类中的测试方法要按一定的顺序来执行---和order配合使用
public class blogListTest extends AutotestUtils {
    private static ChromeDriver driver = new ChromeDriver();
    @Test
    @BeforeAll
    static void init() {
        driver.get("http://49.235.66.46:9000/blog_list.html");
    }
    /**
     * 测试总的博客列表页面的完整性
     */
    @Test
    @Order(1)
    void pageTest() throws InterruptedException { // 不能用private修饰该方法——》我们的selenium还要调用该方法
        // 看看是否能够获取到博客列表页面的翻页按钮(只有总的博客列表页有,个人主页也没有)
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(1)"));
        // 查看页面的文本内容显示是否正确
        String expect = "Linux删除文件操作";
        String actual = driver.findElement(By.cssSelector("body > div.container > div > div:nth-child(2) > div.title")).getText();
        Assertions.assertEquals(expect, actual); // 断言
        // 查看是否有个人主页的超链接
        driver.findElement(By.cssSelector("#myblog")).click();
        Thread.sleep(100); // 强制等待弹窗的出现(隐式等待无法处理弹窗/显示等待和隐式等待尽量不共存)
        // 在未登录的情况下,页面跳转到个人主页是否会出现弹窗(以及弹窗内容是否和我们预期的一致)
        Alert alert = driver.switchTo().alert();
        String expectAlert = "当前用户未登录,你即将跳转到登录页面";
        String actualAlert = alert.getText();
        Assertions.assertEquals(expectAlert, actualAlert);
        // 不要忘了关闭弹窗
        alert.accept();
    }
    @Test
    @AfterAll
    static void exit() {
        driver.quit();
    }
}

一些问题,在实际测试的时候,我发现当用private修饰测试方法时


0efac3480ac04d268f515299227bb072.png

这是因为private修改的方法只在当前类中可见,外部类不可见。

但是我们是借助selenium来进行自动化测试,那么这样一来,selenium就调用不了这个测试方法了————》当然也就执行不了测试用例了。


五、博客详情页测试



b22a72ad4951449da3beee33f983246c.png


用户已登录的情况下测试

package webAutoTest.logined_tests;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import webAutoTest.common.AutotestUtils;
/**
 * 用户已经登录的状态下,对博客详情页进行测试
 */
public class blogDetailTest extends AutotestUtils {
    // 这里我们不重新生成驱动,我们用的还是登录界面的驱动,因为我们要保留登录状态
    @Test
    @BeforeAll
    static void init() {
        driver.get("http://49.235.66.46:9000/blog_content.html?id=2");
    }
    @Test
    void pageTest() {
        // 测试左侧信息框中的用户名是否能正常显示
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3"));
        // 测试删除博客按钮是否存在(文本显示是否正确)
        String expect1 = "删除博客";
        String actual1 = driver.findElement(By.cssSelector("body > div.nav > a.del")).getText();
        Assertions.assertEquals(expect1, actual1);
        // 测试修改博客按钮是否存在(文本显示是否正确)
        String expect2 = "修改博客";
        String actual2 = driver.findElement(By.cssSelector("body > div.nav > a.update")).getText();
        Assertions.assertEquals(expect2, actual2);
    }
    @Test
    @AfterAll
    static void exit() {
        driver.quit();
    }
}


测试视频

我们通过测试套件可以同时执行多个类的测试用例

image.png

image.gif

用户未登录的情况下测试

package webAutoTest.unlogined_tests;
import org.checkerframework.checker.units.qual.A;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
/**
 * 用户登录的状态下,对博客详情页进行测试
 */
public class blogDetailTest {
    static ChromeDriver driver = new ChromeDriver();
    @Test
    @BeforeAll
    static void init() {
        driver.get("http://49.235.66.46:9000/blog_content.html?id=2");
    }
    @Test
    void pageTest() throws InterruptedException {
        // 未登录状态下,可以访问博客详情页,但不可以进行删除博客、修改博客的操作
        driver.findElement(By.cssSelector("body > div.nav > a.update")).click();
        // 点击删除博客,应该会出现-----是否要删除该博客的弹窗,点击确定
        Thread.sleep(300);
        Alert alert1 = driver.switchTo().alert(); // 点击完——确定要删除该博客——》在未登录状态,会出现下一个弹窗
        String expect = "当前用户未登录,你即将跳转到登录页面";
        String actual = alert1.getText();
        alert1.accept();
        Assertions.assertEquals(expect,actual);
    }
    @Test
    @AfterAll
    static void quit() {
        driver.quit();
    }
}


image.png

六、个人主页测试

1f042ca073674f7991471636117928ca.png

package webAutoTest.logined_tests;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import webAutoTest.common.AutotestUtils;
public class myBlogListTest extends AutotestUtils {
    @Test
    @BeforeAll
    static void init() {
        driver.get("http://49.235.66.46:9000/myblog_list.html?uid=2");
    }
    @Test
    void pageTest() {
        // 测试是否存在博客列表页的超链接(以及该超链接所显示的文本是否正确,只有在个人主页该超链接的文本才是“首页”这两个字)
        String expect = "首页";
        String actual = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals(expect, actual);
        // 是否能找到个人信息栏
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3"));
    }
    @Test
    @AfterAll
    static void exit() {
        driver.quit();
    }
}

image.png


七、博客编辑页面测试

d42d1aea0ac74d7193e2d88f9b772652.png

package webAutoTest.logined_tests;
import org.checkerframework.checker.units.qual.A;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import webAutoTest.common.AutotestUtils;
import javax.swing.tree.TreeNode;
/**
 * 用户已经登录的情况下,对博客编辑页进行测试
 */
public class blogEditTest extends AutotestUtils {
    // 这里我们不重新生成驱动,我们用的还是登录界面的驱动,因为我们要保留登录状态
    @Test
    @BeforeAll
    static void init() {
        driver.get("http://49.235.66.46:9000/blog_edit.html");
    }
    @Test
    void pageTest() throws InterruptedException {
        // 测试是否能够找到博客编辑页的提示按钮
        driver.findElement(By.cssSelector("#submit"));
        // 测试是否能够找到对应页面的超链接
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)"));
        // 在博客标题中输入内容
        driver.findElement(By.cssSelector("#title")).sendKeys("测试开发实战");
        // 在博客内容中输入内容,因为我们这里使用了第三方的插件,所以我们不能直接通过sendkeys来输入内容(但我们可以通过click点击事件,往模块内容中插入横线等(本身插件提供的元素)
        driver.findElement(By.cssSelector("#editorDiv > div.editormd-toolbar > div > ul > li:nth-child(21) > a > i")).click();
        Thread.sleep(100);
        driver.findElement(By.cssSelector("#submit")).click(); // 点击提交
        // 如果发布成功,会出现一个弹窗——》提示发布成功
        Thread.sleep(100); // 等待弹窗出现
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 页面会跳到我们的总的博客列表页面,在博客列表页的最后一个元素看是否能够找到我们刚刚提交的数据
        // 1、到博客列表的末页
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(4)")).click();
        Thread.sleep(100);
        String expect = "测试开发实战";
        String actual = driver.findElement(By.xpath("/html/body/div[2]/div/div[last()]/div[1]")).getText(); // 获取该页中最后一个title标签,通过last()
        Assertions.assertEquals(expect, actual);
    }
    @Test
    @AfterAll
    static void exit() {
        driver.quit();
    }
}


其中在检测新增的博客是否添加成功的时候,因为新添加的博客自动就添加到了总的博客列表的末尾,因此:

1、通过博客列表的末页标签,跳转到博客列表的最后一页。

2、通过xpath的

/html/body/div[2]/div/div[last()]/div[1]


定位到当前页面的最后一个title标签,其中last()保障了当前界面有几个博客标题,我们获取到的都是最后一个标题(最新的那个,也就是刚刚我们发表的那个)

3、找到对应博客的标题元素后,看文本内容是否和我们编辑时候输入的文章标题一致


八、博客修改页面测试

15f724ea8987470aaa0fe14102d89a0a.png

package webAutoTest.logined_tests;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import webAutoTest.common.AutotestUtils;
/**
 * 用户登录状态下对博客修改页面进行测试
 */
public class blogUpdateTest extends AutotestUtils {
    @Test
    @BeforeAll
    static void init() {
        driver.get("http://49.235.66.46:9000/blog_content.html?id=17");
    }
    @Test
    void pageTest() {
        // 查看博客标题是否存在
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div > h3"));
        // 查看修改博客和删除博客按钮是否存在
        driver.findElement(By.cssSelector("body > div.nav > a.del"));
        driver.findElement(By.cssSelector("body > div.nav > a.update"));
    }
    @Test
    @AfterAll
    static void exit() {
        driver.quit();
    }
}


image.png

九、总结


image.png

总测试视频



image.png

总代码

gitee:  博客系统的web自动化测试——完整代码

相关文章
|
2天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
13天前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
构建互联网高性能WEB系统经验总结
|
6天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
4天前
|
jenkins 测试技术 持续交付
软件测试中的自动化测试策略
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和效率的关键工具。本文将探讨自动化测试的重要性、实施策略以及面临的挑战,旨在为软件开发团队提供实用的指导和建议。
|
28天前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
134 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
10天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
41 2
|
12天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
3天前
|
测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
【10月更文挑战第31天】 在当今快速迭代的软件开发环境中,自动化测试成为确保软件质量和加速产品上市的关键。本文探讨了自动化测试的重要性、实施策略以及一些最佳实践。通过分析不同类型的自动化测试工具和框架,本文旨在为软件开发团队提供一套实用的指导方案,以提高测试效率和质量。
|
4天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
7天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。

热门文章

最新文章

下一篇
无影云桌面