妙语博客苑测试报告

目录

一、项目背景

二、项目功能


一、项目背景

1. 妙语博客苑是一个博客系统,采用前后端分离的方法来实现,使用数据库来存储数据,并且部署到了云服务器上。

前端主页主要有四个页面构成: 登录页面、博客列表页面、博客详情页面以及博客编辑页面,这四个页面模拟实现了最简单的个人博客系统。

结合后的功能主要有:登录、编辑博客、注销、删除博客、强制登陆等功能。

2. 妙语博客苑没有设计用户注册的功能,只能使用数据库中提前存储的账号进行登录,并且无法更改头像。

3. 妙语博客苑可以实现个人用户简单的博客记录, 时间、标题、内容以及发布者等都可以详细的查看。

二、项目功能

妙语博客苑主要实现了以下几个功能: 登录、注销、写博客以及删除博客等功能。

1. 登录功能: 使用数据库预先存储好的用户名及正确的密码进行登录。登录成功就会转跳博客列表页面, 页面右上角可以对账号进行注销。

2. 博客列表功能: 可以在博客列表界面查看数量有限的博客简介,其中包括博客标题、发布时间以及内容概要。在左侧可以看到登录用户以及用户的文章数、分类树等的模块。

在右上角,有主页、写博客和注销博客三个功能:主页即转跳到列表页、写博客转跳到博客编辑页面、注销即注销用户,回到登录界面。

3. 博客详情页面: 在列表页面点击"查看全文" 按钮就会跳转到详情页面,此时就可以看到该篇博客的完整内容。

在右上角有主页、写博客、删除和注销四个功能: 删除即删除该篇博客,删除之后就会跳转到列表页面,该篇博客就被成功删除。

4.写博客:在登录之后的任意界面点击“写博客”之后就会进入博客编辑页面,此时就可以进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到博客列表页。

三、测试计划

一) 功能测试

        1.测试用例

2. 实际执行测试的部分操作步骤/截图

        1) 正常登录

2) 登录成功

3. 写博客测试

4. 发布成功并查看详情页

5. 删除博客

点击删除后,22.38的博客就被删除了

6. 注销

点击注销后回到登录页面

二) 自动化测试

代码编写

1.添加相关依赖  pom.xml
<dependencies>
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.8.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>
2.新建包并在包下创建测试类以及公共类

1)公共类Utils: 
package common;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;

public class Utils {
    public static WebDriver driver;

    public static WebDriver createDriver(){
        if(driver == null){
            WebDriverManager.chromedriver().setup();
            ChromeOptions options = new ChromeOptions();
            //允许访问所有的链接
            options.addArguments("--remote-allow-origins=*");

            driver = new ChromeDriver(options);

            //等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
        }
        return driver;
    }

    public Utils(String url){
        //调用driver对象
        driver = createDriver();
        //访问url
        driver.get(url);
    }

    public void getScreenShot(String str) throws IOException {
        //屏幕截图
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");

        String dirTime = sim1.format(System.currentTimeMillis());
        String fileTime = sim2.format(System.currentTimeMillis());

        //./src/test/image/2024-07-17/test01-17453020.png
        String filename ="./src/test/image/"+ dirTime +"/" + str + "-" + fileTime+".png";
        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //srcFile放到指定位置
        FileUtils.copyFile(srcFile,new File(filename));
    }
}
2)LoginPage:
package tests;

import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;

import java.io.IOException;

import static java.lang.Thread.sleep;

public class LoginPage extends Utils {

    public static String url = "http://47.121.203.39:8080/blog_login.html";


    public LoginPage() {
        super(url);
    }

    /*
    检查页面是否加载成功
     */
    public void  loginPageRight() throws InterruptedException, IOException {
        //通过查看页面元素是否存在来检查页面加载成功与否
        //登录
        driver.findElement(By.cssSelector("body > div.container-login > div > h3"));
        //登陆输入框
        driver.findElement(By.cssSelector("#username"));

    }

    //检查登录功能---成功登录
    public void LoginSuc() throws IOException {

        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();

        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        driver.findElement(By.cssSelector("#submit")).click();
        //检查点击登陆之后是否登陆成功
        driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a"));
        //页面标题来检查是否登陆成功
        String expect = driver.getTitle();
        assert expect.equals("博客列表页");
        getScreenShot(getClass().getName());
        driver.navigate().back();
    }

    /*
   检查登录功能---登录失败
    */
    public void LoginFail() throws IOException, InterruptedException {
        //方法一:通过clear保证输入框没有文本
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();


        //方法二:通过刷新保证输入框没有文本
        //driver.navigate().refresh();

        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("666666");
        driver.findElement(By.cssSelector("#submit")).click();
        getScreenShot(getClass().getName());
        sleep(2000);
        driver.switchTo().alert().accept();
    }
}
3)ListPage:
package tests;

import common.Utils;
import org.openqa.selenium.By;

public class ListPage extends Utils {
    public static String url = "http://47.121.203.39:8080/blog_list.html";

    public ListPage() {
        super(url);
    }

    //未登录
    public void ListByNoLogin(){
        driver.findElement(By.cssSelector("body > div.container-login > div > h3"));
        driver.findElement(By.cssSelector("#username"));
    }
}
4)EditPage:
package tests;

import common.Utils;
import org.openqa.selenium.By;

import static java.lang.Thread.sleep;

public class EditPage extends Utils {
    public static String url = "http://47.121.203.39:8080/blog_edit.html";
    public EditPage() {
        super(url);
    }
    public void EditSuc() throws InterruptedException {

        driver.findElement(By.cssSelector("#title")).sendKeys("自动化测试标题");
        driver.findElement(By.cssSelector("#submit")).click();
        driver.findElement(By.cssSelector("body > div.container > div.left > div > img"));
        driver.navigate().back();
    }
}
5)释放驱动DriverQuite:
package tests;

import common.Utils;

public class DriverQuite extends Utils {
    public static String url = "http://47.121.203.39:8080/blog_login.html";
    public DriverQuite() {
        super(url);
    }
    public void DriverQuite(){
        driver.quit();
    }
}

代码测试

所有测试用例通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值