博客学术汇测试报告

  Author:MTingle
major:人工智能


Build your hopes like a tower!


目录

一.项目简介

二.开发技术

三.测试用例设计

四.自动化测试代码

common包

博客编辑

博客列表

登录页面

未登录测试

主函数

五.性能测试

六.测试总结


一.项目简介

该项目是一款基于 SSM 框架搭建的个人博客系统。该系统依托 SSM 框架强大的稳定性和灵活性,实现了用户管理、文章发布等核心功能。用户可便捷注册登录,随心发布文章,分享生活感悟与专业见解。

二.开发技术

SpringBoot、SpringMVC、MyBatis、Token、MD5等。

三.测试用例设计


四.自动化测试代码

common包
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 {

        //     ./src/test/image/
        //                     /2024-07-17/
        //                                /test01-17453010.png
        //                                /test02-17453020.png
        //                     /2024-07-18/
        //                                /test01-17453030.png
        //                                /test02-17453034.png
        //屏幕截图
        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));
    }
}
博客编辑
ackage tests;

import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.security.Key;
import java.time.Duration;

public class EditPage extends Utils {
    public static String url = "http://8.137.19.140:9090/blog_edit.html";

    public EditPage() {
        super(url);
    }

    public void EditSuc() throws InterruptedException {

        String blogTile = "测试开发";
        driver.findElement(By.cssSelector("#title")).sendKeys(blogTile);

        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2));
        //第二种方法实现----下节课再讲
//        1.鼠标先挪动到博客内容区域
//        2.双击鼠标将内容删掉:鼠标双击内容+键盘DELETE
//        3.输入内容
        WebElement ele = driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span"));
        Actions actions = new Actions(driver);
        //perform作用:为了在页面看到效果
        Thread.sleep(1000);
        actions.doubleClick(ele).perform();
        Thread.sleep(1000);
        actions.sendKeys(Keys.DELETE).perform();
        // 输入新内容
        actions.sendKeys("键盘输入测试开发").perform();
        Thread.sleep(1000);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);
        driver.quit();
    }



}
博客列表
package tests;

import common.Utils;
import jdk.jshell.execution.Util;
import org.openqa.selenium.Alert;

import java.util.List;

public class ListPage extends Utils {
    public static String url = "http://8.137.19.140:9090/blog_list.htmlq";


    public ListPage() {
        super(url);
    }

    /**
     * 未登录状态下访问列表页
     */
    public void listNoLogin(){
        // 处理警告弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 调整到登录页面
        String expect = driver.getTitle();

        assert expect.equals("登录页面");
    }

}
登录页面
package tests;

import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.IOException;
import java.time.Duration;

public class LoginPage extends Utils {
    public static String url = "http://8.137.19.140:9090/blog_login.html";

    public LoginPage() {
        super(url);
    }

    public void loginPageRight(){
        // 通过查找元素判断页面加载成功与否
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)"));
        driver.findElement(By.cssSelector("body > div.container-login > div"));

    }

    public void loginSuc() throws IOException {
        // 通过查找元素判断页面加载成功与否

        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());
//        assert expect.equals("博客列表111");

//        driver.quit();
    }

    /**
     * 登录失败: 显示等待处理弹窗
     */
    public void loginFail() throws IOException {

        driver.navigate().back();


        // 通过 clear 保证输入框没有文本信息
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 通过查找元素判断页面加载成功与否

        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan111");
        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"));
//        getScreenShot(getClass().getName());
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
        try {
            Alert alert = wait.until(ExpectedConditions.alertIsPresent());
            alert.accept();
        } catch (Exception e) {
            System.out.println("等待5秒后仍未检测到弹窗");
        }
        // 页面标题判断是否登录成功
        String expect = driver.getTitle();
        System.out.println(expect);
//        assert expect.equals("博客列表");
//        assert expect.equals("博客列表111");
        driver.quit();
    }

}
未登录测试
package tests;

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

import java.io.IOException;

public class PageByNoLogin extends Utils {
    public static String listurl = "http://8.137.19.140:9090/blog_list.html";
    public static String editurl = "http://8.137.19.140:9090/blog_edit.html";
    public static String detailurl = "http://8.137.19.140:9090/blog_detail.html";


    public PageByNoLogin() {
        super("");
    }

    // 列表页未登录处理
    public void listNoLogin() throws IOException {
        driver.get(listurl);

        Alert alert = driver.switchTo().alert();
        alert.accept();

        String expect = driver.getTitle();
        getScreenShot(getClass().getName());
        assert expect.equals("博客登录页");
    }

    public void detailNoLogin() throws IOException {
        driver.get(detailurl);

        Alert alert = driver.switchTo().alert();
        alert.accept();

        String expect = driver.getTitle();
        getScreenShot(getClass().getName());
        assert expect.equals("博客登录页");
    }

    public void editNoLogin() throws IOException {
        driver.get(editurl);

        Alert alert = driver.switchTo().alert();
        alert.accept();

        String expect = driver.getTitle();
        getScreenShot(getClass().getName());
        assert expect.equals("博客登录页");
    }



}
主函数
package tests;

import java.io.IOException;

public class RunTests {
    public static void main(String[] args) throws IOException, InterruptedException {
        LoginPage login = new LoginPage();
//        login.loginPageRight();
        login.loginSuc();
//        login.loginFail();
        EditPage editPage = new EditPage();
        editPage.EditSuc();

//        ListPage listPage = new ListPage();
    }
}

五.性能测试

Jmeter测试

性能测试报告

cmd参考运行命令: jmeter -n -t  博客登录请求.jmx -l blog.jtl -e  -o ./blog/.

六.测试总结

1) 主功能测试通过,项目可以上线
2) 项目上线后高优观察线上数据,查看线上用户操作日志,及时跟进用户反馈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值