[自动化测试]博客系统测试用报告

目录

(一) 项目介绍

(二) 测试计划

1. 功能测试

        (1)测试环境

        (2)测试用例

        (3)部分的功能测试

2. 自动化测试


项目介绍

项目整体基于 HTTP 协议,前端使用 HTML+CSS+JS 构建页面整体布局,后端采用分层结构,分为Controller层,Service层,Mapper层,Model层,Config层,Common层的设计,以达到在设计上的高内聚低耦合。采用了Spring框架,JAVA开发语言,以及MySQL数据库等技术。系统主要实现了注册、登录、显示博客、展示详细,编辑博客、删除博客,注销。使用统⼀返回格式+全局错误信息定义处理前后端交互时的返回结果;使用@ControllerAdvice和@ExceptionHandler实现全局异常处理;使用拦截器实现用户登录校验;对密码进行加密处理。

访问地址:博客登陆页icon-default.png?t=N7T8http://124.223.187.220:8080/blog_login.html

功能测试

  • 测试环境

操作系统:Windows 11
项目运行环境:IIntelliJ IDEA Community Edition 2022.1.4、JDK1.8、MySQL8.0
浏览器:Chorme浏览器
自动化测试工具:selenium4

自动化测试框架:junit5
测试人员: 本人

访问链接:博客登陆页

  • 测试用例

功能测试

https://qqtc8bim4zx.feishu.cn/docx/AG8odbjjio0ZHzxWHejccX6hnec?openbrd=1&doc_app_id=501&blockId=doxcnfgFweqkNNiZq3luzzvFhVh&blockType=whiteboard&blockToken=WJF2w56hThPo5DbGhgAceWr2n5g#doxcnfgFweqkNNiZq3luzzvFhVhicon-default.png?t=N7T8https://qqtc8bim4zx.feishu.cn/docx/AG8odbjjio0ZHzxWHejccX6hnec?openbrd=1&doc_app_id=501&blockId=doxcnfgFweqkNNiZq3luzzvFhVh&blockType=whiteboard&blockToken=WJF2w56hThPo5DbGhgAceWr2n5g#doxcnfgFweqkNNiZq3luzzvFhVh

  •  部分的功能测试
(1)注册

对注册页面进行的测试

测试场景1:输入正确注册账号,输入两次密码一致,输入正确用户名,上传头像,点击"注册"按钮

预期结果:注册成功,弹出提示框

实际结果:注册成功,弹出提示框

测试场景2:输入已存在的帐号,输入两次密码一致,输入正确用户名,上传头像,点击"注册"按钮

预期结果:注册失败,弹出提示框

实际结果:注册失败,弹出提示框

(2)登录

对登录页面进行的测试

测试场景1:输入正确的帐号,输入正确的密码,点击"登录"按钮

预期结果:登录成功,跳转博客列表页

实际结果:登录成功,跳转博客列表页

测试场景2:输入正确的帐号,输入错误的密码,点击"登录"按钮

预期结果:登录失败,弹出提示框

实际结果:登录失败,弹出提示框

测试场景3:用户未注册,点击"登录"按钮

预期结果:登录失败,弹出提示框

实际结果:登录失败,弹出提示框

测试场景4:帐号密码为空,点击"登录"按钮

预期结果:登录失败,弹出提示框

实际结果:登录失败,弹出提示框

(3)博客列表

对博客列表页展示进行测试

测试场景1:登录状态下没有发布过博客

预期结果:列表不展示博客信息

实际结果:列表不展示博客信息

测试场景2:登录状态下发布一篇博客,标题为"测试"

预期结果:展示一篇标题为"测试"博客信息

实际结果:展示一篇标题为"测试"博客信息

(4)发布博客

对发布博客进行测试

测试场景1:登录状态下,输入标题,输入正文,点击"发布文章"按钮

预期结果:发布博客成功,跳转博客列表页展示相关信息

实际结果:发布博客成功,跳转博客列表页展示相关信息

测试场景2:登录状态下,标题或者正文为空

预期结果:发布失败,弹出提示框

实际结果:发布失败,弹出提示框

测试场景3:未登录状态下,无法发布博客

预期结果:弹出提示框,跳转登录页

实际结果:弹出提示框,跳转登录页

(5)修改博客

博客修改进行测试

测试场景1:登录状态下且当前博客详情是当前登录用户

预期结果:修改博文,修改成功

实际结果:修改博文,修改成功

测试场景2:登录状态下当前博客详情不是当前登录用户

预期结果:不可修改,没有可修改的接口

实际结果:不可修改,没有可修改的接口

(6)删除博客

对删除进行测试

测试场景1:登录状态下且当前博客详情是当前登录用户,点击删除

预期结果:删除成功

实际结果:删除成功

(7)注销

对注销进行测试

测试场景1:在已经登录状态下点击右上角"注销"按钮

预期结果:退出成功,跳转登录页

实际结果:退出成功,跳转登录页

自动测试

(1)代码编写

对主要功能进行自动化测试

  • 脑图

  • 添加依赖 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>AutoTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <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>

<!--        截图-->
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.1</version>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>
  • 注册历面测试
//注册成功测试用例

    @Test
    void registerSuccess() throws InterruptedException {
        //用当前时间自动生成随机帐号密码等
        String time = String.valueOf(System.currentTimeMillis());
        //打开博客注册页
        webDriver.get("http://124.223.187.220:8080/blog_register.html");
        //输入要注册的账号
        webDriver.findElement(By.cssSelector("#username")).sendKeys(time);
        //输入正确密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(time);
        //输入正确确认密码
        webDriver.findElement(By.cssSelector("#password_2")).sendKeys(time);
        //输入正确用户名
        webDriver.findElement(By.cssSelector("#as_username")).sendKeys(time);
        sleep(1000);
        //上传头像
        webDriver.findElement(By.cssSelector("#avatar")).sendKeys("D:\\网页文件包\\img\\16.jpg");
        //点击"注册"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(2000);
        //校验, 弹出提示框点确定,跳转登录页面,页面有展示"登陆"文本 则通过
        webDriver.switchTo().alert().accept();
        sleep(2000);
        String url = webDriver.getCurrentUrl();
        String text = webDriver.findElement(By.cssSelector("body > div.container-login > div > h3")).getText();
        Assertions.assertEquals(text, "登陆");
        Assertions.assertEquals("http://124.223.187.220:8080/blog_login.html", url);
    }


    //注册失败测试用例
    @Test
    void registerFail01() throws InterruptedException {
        //打开博客注册页
        webDriver.get("http://124.223.187.220:8080/blog_register.html");
        //输入已存在的帐号
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        //输入正确密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys("010306");
        //输入正确确认密码
        webDriver.findElement(By.cssSelector("#password_2")).sendKeys("010306");
        //输入正确用户名
        webDriver.findElement(By.cssSelector("#as_username")).sendKeys("010306");
        //上传头像
        webDriver.findElement(By.cssSelector("#avatar")).sendKeys("D:\\网页文件包\\img\\16.jpg");
        //点击"注册"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(1000);
        //校验, 弹出提示框,显示"内部内部发生错误, 请联系管理员" 则通过
        String text = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Assertions.assertEquals("内部发生错误, 请联系管理员", text);
    }


    @Test
    void registerFail02() throws InterruptedException {
        //打开博客注册页
        webDriver.get("http://124.223.187.220:8080/blog_register.html");
        //输入已存在的帐号
        webDriver.findElement(By.cssSelector("#username")).sendKeys("010306");
        //输入正确密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys("010306");
        //输入正确确认密码
        webDriver.findElement(By.cssSelector("#password_2")).sendKeys("0103067");
        //输入正确用户名
        webDriver.findElement(By.cssSelector("#as_username")).sendKeys("010306");
        //上传头像
        webDriver.findElement(By.cssSelector("#avatar")).sendKeys("D:\\网页文件包\\img\\16.jpg");
        //点击"注册"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(1000);
        //校验 弹出提示框,显示"两次密码不一致" 则通过
        String text = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Assertions.assertEquals("两次密码不一致", text);
    }
  • 登录页面测试

    //登录成功测试用例
    @Test
    void loginSuccess() throws InterruptedException {
        //打开博客登录页
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        //输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        //输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435");
        //点击"登录"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        //登录成功后,校验是否登陆成功
        String url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://124.223.187.220:8080/blog_list.html", url);
    }


    //登录失败测试用例
    @Test
    void loginFail01() throws InterruptedException {
        //打开博客登录页
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        //输入正确用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        //输入错误密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435555");
        //点击"登录"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        //检验, 如弹出提示框,显示"用户名或密码错误!!!则通过
        sleep(3000);
        String text = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();  //弹窗确定
        Assertions.assertEquals("用户名或密码错误!!!", text);
    }


    @Test
    void loginFail02() throws InterruptedException {
        //打开博客登录页
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        //不输入任何东西
        //点击"登录"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        //检验, 如弹出提示框,显示"用户名或密码为空"则通过
        sleep(3000);
        String text = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Assertions.assertEquals("用户名或密码为空", text);
    }

 

    @Test
    void loginFaill03() throws InterruptedException {
        //打开博客登录页
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        //输入未注册的用户
        webDriver.findElement(By.cssSelector("#username")).sendKeys("loginFail");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("loginFail");
        //点击"登录"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(1000);
        //检验, 如弹出提示框,显示"用户不存在"则通过
        String text = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Assertions.assertEquals("用户不存在", text);
    }
  • 博客列表测试
//博客列表登录状态下
@Test
    void blogLists01() throws InterruptedException {
        //登录
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435");
        //点击"登录"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        //没有发布博客 列表不展示博客信息
        sleep(2000);
        String text = webDriver.findElement(By.cssSelector("body > div.container > div.right")).getText();
        Assertions.assertEquals("", text);
    }


    //博客列表未登录状态下
    @Test
    void blogLists02() throws InterruptedException {
        //输入URL
        webDriver.get("http://124.223.187.220:8080/blog_list.html");
        sleep(3000);
        //校验 弹出提示框"用户未登录",点确定,跳转登录页面则通过
        webDriver.switchTo().alert().accept();
        sleep(3000);
        String url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://124.223.187.220:8080/blog_login.html", url);
    }
  • 发布博客测试
//发布博客登录状下
    //发布成功
    @Test
    void blogEditSuccess() throws InterruptedException {
        //登录
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        //点击"写博客"按钮
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        sleep(3000);
        // document.querySelector("#title").value="测试"
        // 输入标题(通过Selenium执行JS脚本完成)
        ((JavascriptExecutor) webDriver).executeScript("document.querySelector(\"#title\").value=\"测试\"");
        sleep(2000);
        //点击"发布文章"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(2000);
        //校验, 如跳转博客列表页,博客列表页面展示一条博客信息和用户文章数变为1 刚测试通过 否则不通过
        WebElement title = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title"));
        String count = webDriver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(5) > span")).getText();
        Assertions.assertNotEquals("0", count);
        Assertions.assertNotNull(title);
    }

 
    //发布失败
    @Test
    void blogEditFail01() throws InterruptedException {
        //登录
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(1000);
        //点击"写博客"按钮
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        sleep(4000);
        // document.querySelector("#title").value="测试"
        // 输入标题(通过Selenium执行JS脚本完成)
        ((JavascriptExecutor) webDriver).executeScript("document.querySelector(\"#title\").value=\"测试\"");
        //清空正文
        //使用JavaScript来清空指定元素中的内容
        ((JavascriptExecutor) webDriver).executeScript("document.querySelector('#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i').click()");
        sleep(1000);
        //点击"发布文章"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(1000);
        //校验 弹出提示框,显示"标题或正文不能空" 则通过
        String text = webDriver.switchTo().alert().getText();
        Assertions.assertEquals("标题或正文不能空", text);
    }


    //发布博客未登录状态下
    @Test
    void blogEditFail02() throws InterruptedException {
        //打开编缉页面
        webDriver.get("http://124.223.187.220:8080/blog_edit.html");
        //点击"发布文章"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(5000);
        //检验 弹出提示框,显示"用户未登录",点确定,跳转登录页面 则通过
        webDriver.switchTo().alert().accept();
        sleep(3000);
        String url = webDriver.getCurrentUrl();
        Assertions.assertEquals("http://124.223.187.220:8080/blog_login.html", url);
    }
  • 修改博客测试
//修改博客 登录状态下
    //修改成功
    @Test
    void updateBlogSuccess() throws InterruptedException {
        String text = String.valueOf(System.currentTimeMillis());
        //登录
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        String text1 = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        sleep(1000);
        //点击"查看详情"按钮
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
        sleep(2000);
        //点击"编辑"按钮
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")).click();
        sleep(2000);
        ((JavascriptExecutor) webDriver).executeScript("document.querySelector(\"#title\").value = '" + text + "';");
        //点击"更新文章"按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(2000);
        String text2 = webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        Assertions.assertNotEquals(text1, text2);
    }


    //修改博客未登录状态下
    //修改失败
    @Test
    void updateBlogFail() throws InterruptedException {
        //直接打开编缉页
        webDriver.get("http://124.223.187.220:8080/blog_update.html?blogId=39");
        //校验 无法跳转到编辑页 则通过
        String url = webDriver.getCurrentUrl();
        sleep(3000);
        Assertions.assertEquals("http://124.223.187.220:8080/blog_login.html", url);
    }
  • 删除博客测试
//删除博客 是登录状态且是当前用户的博客
    @Test
    void deleteBlog() throws InterruptedException {
        //登录
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
//        webDriver.manage().timeouts().implicitlyWait(3, SECONDS);
        //点击"查看全文"按钮
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
        sleep(2000);
//        webDriver.manage().timeouts().implicitlyWait(3, SECONDS);
        //点击"删除"按钮
        webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();
        //校验
        sleep(2000);
//        webDriver.manage().timeouts().implicitlyWait(3, SECONDS);
        String text = webDriver.findElement(By.cssSelector("body > div.container > div.right")).getText();
        Assertions.assertEquals("", text);
    }
  • 注销测试
//注销(是已登录) 退出成功
    @Test
    void LogOut() throws InterruptedException {
        //登录
        webDriver.get("http://124.223.187.220:8080/blog_login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("lirunkun");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("135435");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(3000);
        //进入已登录进的页面
        webDriver.get("http://124.223.187.220:8080/blog_list.html");
        //点击"注销"按钮,
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        sleep(1000);
        //校验, 跳转登录页面却页面有展示"登陆"文本 则通过
        String url = webDriver.getCurrentUrl();
        String loginText = webDriver.findElement(By.cssSelector("body > div.container-login > div > h3")).getText();
        Assertions.assertEquals("http://124.223.187.220:8080/blog_login.html", url);
        Assertions.assertEquals("登陆", loginText);
    }

源码链接:JAVA: 放弃容易,但坚持一定很帅 - Gitee.comicon-default.png?t=N7T8https://gitee.com/akun-it/java/tree/master/Selenium/AutoTest-blogSystem

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值