博客项目测试

针对 博客系统 项目测试

过对 博客系统 项目做测试,使用Selenium 自动化套件 + JUnit 单元测试框架,来对项目的功能进行自动化测试。
项目的主要功能:登录,注册,博客列表主页面,博客列表个人页,编辑博客,修改博客,删除博客。

针对博客系统的测试用例

界面测试

在这里插入图片描述

易用性测试

在这里插入图片描述

性能测试

在这里插入图片描述

兼容性测试

在这里插入图片描述

安全性测试

在这里插入图片描述

功能测试

在这里插入图片描述

功能测试实现

工具类

AutotestUtils类设定为所有工具类的父类,封装了静态的浏览器对象及获取浏览器对象方法,以及对页面进行截图的方法,

public class AutotestUtils {
    public static ChromeDriver driver;

    //创建驱动对象
    public  static ChromeDriver createDriver(){
        // 驱动对象已经创建好了/没有创建好
        if(driver == null){
            driver = new ChromeDriver();
            //创建隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        }
        return driver;
    }

    //截图文件的时间
    public List<String> getTime() {
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyyMMdd-HHmmssSS");
        SimpleDateFormat sim2 = new SimpleDateFormat("yyyyMMdd");
        String filename = sim1.format(System.currentTimeMillis());
        String dirname = sim2.format(System.currentTimeMillis());
        List<String> list = new ArrayList<>();
        list.add(dirname);
        list.add(filename);
        return list;
    }

    /**
     * 获取屏幕截图,将用例执行的结果保存下来
     */
    public void getScreenShot(String str) throws IOException {
        List<String> list = getTime();
        String filename = "./src/test/java/com/blogWebAutoTest/"+list.get(0)+"/"+str+"_"+list.get(1)+".png";
        File srcfile = driver.getScreenshotAs(OutputType.FILE);
        //把屏幕截图生成的文件放到指定的路径
        FileUtils.copyFile(srcfile,new File(filename));
    }

}

登录页测试

/**
 * 测试登录页面
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogLoginTest extends AutotestUtils {
    // 1.创建浏览器对象
    public static ChromeDriver driver = createDriver();
    // 2.访问登录页面的url
    @BeforeAll
    public static void baseControl() {
        driver.get("http://124.220.57.89:8082/login.html");
    }

    /**
     * 检查登录页面打开是否正确
     * 检查点:用户名 密码 主页等元素是否存在
     */
    @Test
    @Order(1)
    void loginPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(3) > span"));
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(4) > span"));
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)"));
        getScreenShot(getClass().getName());
    }

    /**
     * 检查正常登录情况
     * 测试环境使用 万能验证码BKXT
     */
    @ParameterizedTest
    @CsvSource({"admin,admin,BKXT","zhangsan,123,BKXT","lisi,123,BKXT"})
    @Order(2)
    void loginSuc(String name , String password, String checkcode) throws IOException, InterruptedException {
        // 先对输入框内可能缓存的数据进行清空
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement((By.cssSelector("#password"))).clear();
        driver.findElement((By.cssSelector("#checkcode"))).clear();
        //自动输入测试
        driver.findElement((By.cssSelector("#username"))).sendKeys(name);
        driver.findElement((By.cssSelector("#password"))).sendKeys(password);
        driver.findElement((By.cssSelector("#checkcode"))).sendKeys(checkcode);
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        //对登录结果进行检测,如果跳转到了个人博客列表页即成功
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)"));
        getScreenShot(getClass().getName());
        driver.navigate().back();

    }

    /**
     * 检查错误账号密码登录情况
     * 测试环境使用 万能验证码BKXT
     */
    @ParameterizedTest
    @CsvSource({"a,123,BKXT","b,123,BKXT","c,123,BKXT"})
    @Order(3)
    void loginFail(String name , String password, String checkcode) throws IOException, InterruptedException {
        // 先对输入框内可能缓存的数据进行清空
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement((By.cssSelector("#password"))).clear();
        driver.findElement((By.cssSelector("#checkcode"))).clear();
        //自动输入测试
        driver.findElement((By.cssSelector("#username"))).sendKeys(name);
        driver.findElement((By.cssSelector("#password"))).sendKeys(password);
        driver.findElement((By.cssSelector("#checkcode"))).sendKeys(checkcode);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        //处理弹窗
        driver.switchTo().alert().accept();

    }

    // 账号为空
    @Test
    @Order(4)
    void noUser() throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement((By.cssSelector("#password"))).clear();
        driver.findElement((By.cssSelector("#checkcode"))).clear();
        driver.findElement((By.cssSelector("#password"))).sendKeys("abc");
        driver.findElement((By.cssSelector("#checkcode"))).sendKeys("BKXT");
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        Thread.sleep(2000);
        driver.switchTo().alert().accept();
    }

    //密码为空
    @Test
    @Order(5)
    void noPassword() throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement((By.cssSelector("#password"))).clear();
        driver.findElement((By.cssSelector("#checkcode"))).clear();
        driver.findElement((By.cssSelector("#username"))).sendKeys("abc");
        driver.findElement((By.cssSelector("#checkcode"))).sendKeys("BKXT");
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        Thread.sleep(2000);
        driver.switchTo().alert().accept();
    }

    //验证码为空
    @Test
    @Order(6)
    void noCheckcode() throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement((By.cssSelector("#password"))).clear();
        driver.findElement((By.cssSelector("#checkcode"))).clear();
        driver.findElement((By.cssSelector("#username"))).sendKeys("abc");
        driver.findElement((By.cssSelector("#password"))).sendKeys("dd");
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        Thread.sleep(2000);
        driver.switchTo().alert().accept();
    }

}

注册页测试

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogLogonTest extends AutotestUtils {
    // 1.创建浏览器对象
    public static ChromeDriver driver = createDriver();

    @BeforeAll
    public static void baseControl() {
        driver.get("http://124.220.57.89:8082/login.html");
    }

    /*
    完成跳转到注册页面操作
     */
    @Test
    @Order(1)
    public void start() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
    }

    /*
    跳转到注册页后,检查注册页的元素
     */
    @Test
    @Order(2)
    public void logonPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(2) > span"));
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(3) > span"));
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(4) > span"));
        driver.findElement(By.cssSelector("body > div.login-container > div > div.row1 > span"));
        getScreenShot(getClass().getName());
    }

    /*
    测试正确的注册功能,输入账号和两次密码相同的注册
     */
    @ParameterizedTest
    @CsvSource(value = {"333,123,123,BKXT", "333,123,123,BKXT"})
    @Order(3)
    public void logonSuc(String username, String password1, String password2, String checkCode) throws InterruptedException {
        //先对输入框里可能有的数据进行清空
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password2")).clear();
        driver.findElement(By.cssSelector("#checkcode")).clear();
        //测试要测试的数据
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password1);
        driver.findElement(By.cssSelector("#password2")).sendKeys(password2);
        driver.findElement(By.cssSelector("#checkcode")).sendKeys(checkCode);
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        Thread.sleep(3000);
        driver.switchTo().alert().accept();
        Thread.sleep(3000);
        driver.switchTo().alert().dismiss();
    }

    /*
    测试两次密码不一致的注册
     */
    @ParameterizedTest
    @CsvSource(value = {"nnn,123,321,BKXT","vvv,123,321,BKXT"})
    @Order(4)
    public void logonFail(String username, String password1, String password2, String checkCode) throws InterruptedException {
        //先对输入框里可能有的数据进行清空
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password2")).clear();
        driver.findElement(By.cssSelector("#checkcode")).clear();
        //测试要测试的数据
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password1);
        driver.findElement(By.cssSelector("#password2")).sendKeys(password2);
        driver.findElement(By.cssSelector("#checkcode")).sendKeys(checkCode);
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        Thread.sleep(3000);
        driver.switchTo().alert().accept();
        Thread.sleep(3000);
    }

}

博客列表个人页测试

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogListPersonalTest extends AutotestUtils {
    // 1.创建浏览器对象
    public static ChromeDriver driver = createDriver();
    // 2.访问登陆页面的url
    @BeforeAll
    public static void baseControll(){
        driver.get("http://124.220.57.89:8082/login.html");
    }
    // 3. 跳转到博客列表个人列表页
    @ParameterizedTest
    @CsvSource(value = {"admin,admin,BKXT"})
    @Order(1)
    public void start(String username, String password, String checkCode) throws InterruptedException, IOException {
        // 先对输入框内可能缓存的数据进行清空
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement((By.cssSelector("#password"))).clear();
        driver.findElement((By.cssSelector("#checkcode"))).clear();
        //自动输入测试
        driver.findElement((By.cssSelector("#username"))).sendKeys(username);
        driver.findElement((By.cssSelector("#password"))).sendKeys(password);
        driver.findElement((By.cssSelector("#checkcode"))).sendKeys(checkCode);
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        //对登录结果进行检测,如果跳转到了个人博客列表页即成功
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)"));
        getScreenShot(getClass().getName());
    }

    // 4.在博客个人列表页完成相关操作
    @Test
    @Order(2)
    public void passageCheck() {
        // 点击查看全文操作
        driver.findElement(By.cssSelector("#artlistDiv > div:nth-child(1) > div:nth-child(4) > a:nth-child(2)")).click();
        // 进入文章详情页,对比页面元素
        driver.findElement(By.cssSelector("#title"));
        // 返回博客列表页,点击修改操作
        driver.navigate().back();
        driver.findElement(By.cssSelector("#artlistDiv > div:nth-child(1) > div:nth-child(4) > a:nth-child(1)")).click();
        // 对比修改页面的元素
        driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button"));
        driver.navigate().back();
    }

    // 5. 在个人博客列表页完成写博客测试
    @Test
    @Order(3)
    public void passageEditCheck() throws IOException {
        // 点击写博客
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        // 对比写博客页面的元素
        String curText = driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).getText();
        Assertions.assertEquals("发布文章",curText);
        getScreenShot(getClass().getName());
    }

    // 6. 测试发布博客功能是否正常
    @Test
    @Order(4)
    public void passageSumbit() throws InterruptedException {
        String title = "测试标题";
        driver.findElement(By.cssSelector("#title")).sendKeys(title);
        // 点击发布按钮
        driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).click();
        // 处理弹窗
        Thread.sleep(2000);
        driver.switchTo().alert().accept();
    }

}

博客列表主页测试

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogListPublicTest extends AutotestUtils {
    // 1.创建浏览器操作对象
    public static ChromeDriver driver = createDriver();
    // 2.直接访问公共博客列表页
    @BeforeAll
    public static void baseControll() {
        driver.get("http://124.220.57.89:8082/blog_list.html");
    }

    // 3. 比较公共博客列表页的元素
    @Test
    @Order(1)
    public void publicListPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(1)"));
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(2)"));
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(3)"));
        driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(4)"));
        getScreenShot(getClass().getName());

    }
}

浏览器对象退出类

public class driverQuitTest extends AutotestUtils {
    public static ChromeDriver driver = createDriver();

    @Test
    public void driverQuit(){
        driver.quit();
    }
}

测试套件

@Suite
@SelectClasses({BlogLoginTest.class, BlogLogonTest.class,BlogListPersonalTest.class,BlogListPublicTest.class})
public class runSuite {
}

测试结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值