个人博客系统测试报告(一)

作者:爱塔居

专栏:测试

目录

一、项目背景介绍

二、项目功能

三、测试计划

3.1自动化测试用例

3.2 性能测试 ​​​​​​​(未完)


一、项目背景介绍

个人博客系统前端由注册页、登录页、列表页、详情页、编辑页、个人博客列表页构成,结合后端实现了注册、登录、添加博客、删除博客、查看博客、修改博客、强制登录等功能。

部署链接:http://124.223.101.247:8080/login.html

项目源码:https://gitee.com/lao-chen-a/javacode/tree/master/myblog-sm/src/main

二、项目功能

1.注册功能:需要输入用户名,还有密码以及确认密码进行注册,密码和确认密码必须保持一致,进行注册后,会自动跳转到登录页面。

2.登录功能:虽然主页右上角有主页和注册按钮,但在未登录的情况,只能注册和登录

3.个人博客列表页:可以在个人博客列表页上查看博客标题、发布时间、简介信息,每篇博客下方都有查看全文、修改、删除按钮等。页面的右上角有三个按钮,点击主页就会跳转到列表页,点击写博客就会跳转到编辑页,点击注销就会退出登录。

4.博客列表页:在博客列表页,可以看到所有用户的文章,运用了分页功能,每一页仅显示两篇文章。

5.详情页:在个人博客列表页、博客列表页点击“查看全文”按钮,就会跳转到详情页,此刻就可以看到该篇博客的完整内容,包括发布时间和阅读量。在左边,我们还可以看到作者的一些信息。

三、测试计划

3.1自动化测试用例

自动化测试总代码:https://gitee.com/lao-chen-a/javacode/commit/8d2f0900dbd37e4e48da826512d392341547ec52 

我是分成几个页面(功能)进行测试,其中Screen文件存放的是截屏的方法。通过这个方法,我们得到测试结果后会自动截屏存放到target包中。 利用时间的命名方式,使得文件名不会重复。

 Screen.java

package Blog;

import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.*;
import org.openqa.selenium.*;

import java.io.File;
import java.io.IOException;

import static java.lang.Thread.sleep;
import static org.junit.jupiter.api.Assertions.assertEquals;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Screen {
    public  void taskScreenShot(WebDriver webDriver){
        long date = System.currentTimeMillis();
        String path = String.valueOf(date);
        String cusPath = System.getProperty("user.dir");
        path = path+".png";
        String screenPath = cusPath+"/"+path;
        System.out.println(screenPath);
        //实现截图
        File file = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(file,new File(screenPath));
        }catch (IOException e){
            e.printStackTrace();
        }
    }

}

 RegTests.java

package Blog;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class RegTests {
    @Test
    public void regSuccess(){
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/reg.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("XiaoChen2");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#password2")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#submit")).click();
//        webDriver.get("http://124.223.101.247:8080/login.html");
//        webDriver.findElement(By.cssSelector("#username")).sendKeys("XiaoChen2");
//        webDriver.findElement(By.cssSelector("#password")).sendKeys("12345");
//        webDriver.findElement(By.cssSelector("#submit")).click();
       webDriver.quit();
    }
    //用户名为空
    @Test
    public void regFalse1(){
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/reg.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#password2")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#submit")).click();
        System.out.println(webDriver.switchTo().alert().getText());
        webDriver.quit();
    }
    //密码为空
    @Test
    public void regFalse2(){
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/reg.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("XiaoChen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("");
        webDriver.findElement(By.cssSelector("#password2")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#submit")).click();
        System.out.println(webDriver.switchTo().alert().getText());
        webDriver.quit();
    }
    //确认密码为空
    @Test
    public void regFalse3(){
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/reg.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("XiaoChen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#password2")).sendKeys("");
        webDriver.findElement(By.cssSelector("#submit")).click();
        System.out.println(webDriver.switchTo().alert().getText());
        webDriver.quit();
    }
    //密码和确认密码不一致
    @Test
    public void regFalse4(){
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/reg.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("XiaoChen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#password2")).sendKeys("123");
        webDriver.findElement(By.cssSelector("#submit")).click();
        System.out.println(webDriver.switchTo().alert().getText());
        webDriver.quit();
    }
}

 LoginTests

package Blog;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

public class LoginTests extends Screen {
    //账号密码正确
    @Test
    void LoginSuccess() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        sleep(300);
        webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(300);
        String cur_url=webDriver.getCurrentUrl();
        Assertions.assertEquals("http://124.223.101.247:8080/myblog_list.html",cur_url);
        taskScreenShot(webDriver);
        webDriver.quit();
    }
    //账号密码不正确
    @Test
    public void loginFalse1() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(300);
        System.out.println(webDriver.switchTo().alert().getText());
        webDriver.switchTo().alert().accept();
        taskScreenShot(webDriver);
        webDriver.quit();
    }
    //测试账号为空
    @Test
    public void loginFalse2() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12345");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(300);
        System.out.println(webDriver.switchTo().alert().getText());
        webDriver.switchTo().alert().accept();
        webDriver.quit();
    }
    @Test
    public void loginFalse3() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(300);
        System.out.println(webDriver.switchTo().alert().getText());
        webDriver.switchTo().alert().accept();
        webDriver.quit();
    }
    //测试回车键
    @Test
    public void loginFalse4() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12");
        webDriver.findElement(By.cssSelector("#password")).sendKeys(Keys.ENTER);
        sleep(300);
        String cur_url=webDriver.getCurrentUrl();
        Assertions.assertEquals("http://124.223.101.247:8080/login.html",cur_url);
        webDriver.quit();
    }
}

 MyblogListTests

package Blog;

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

public class MyblogLitsTests extends Screen {
    //测试删除键是否可用
    @Test
   void DeleteButton() throws InterruptedException {
       WebDriver webDriver=new ChromeDriver();
       webDriver.get("http://124.223.101.247:8080/login.html");
       sleep(300);
       webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
       webDriver.findElement(By.cssSelector("#password")).sendKeys("12");
     webDriver.findElement(By.cssSelector("#submit")).click();
    sleep(300);
    webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a:nth-child(6)")).click();
  taskScreenShot(webDriver);
  webDriver.quit();
   }
    @Test
    void DetailButton() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        sleep(300);
        webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(300);
        webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a:nth-child(4)")).click();
        taskScreenShot(webDriver);
        webDriver.quit();
    }
    @Test
    void ModifyButton() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        sleep(300);
        webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(300);
        webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a:nth-child(5)")).click();
        taskScreenShot(webDriver);
        webDriver.quit();
    }
}

 QuiteTests

package Blog;

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import static java.lang.Thread.sleep;

public class QuiteTests extends Screen {
    @Test
    void quite() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://124.223.101.247:8080/login.html");
        sleep(300);
        webDriver.findElement(By.cssSelector("#username")).sendKeys("chen");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("12");
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(300);
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        webDriver.switchTo().alert().accept();
        taskScreenShot(webDriver);
    }
}

3.2 性能测试 

首先了解一点点概念。

性能测试定义:测试人员借助性能测试工具,模拟系统在不同场景下,对应的性能指标是否达到预期。

性能测试和功能测试的区别: 

功能测试:依靠人工执行

性能测试:依靠工具完成

功能测试:不管在什么场景下,只要能够正常运行即可

性能测试:软件在一些极端的情况下,是不是能够完成运行

影响一个软件性能因素有哪些?

硬件:服务器CPU利用率、内存、磁盘操作频率、CPU核心数

软件:算法、编程语言

用户:用户数量、用户使用时长、用户访问频率

面试题:你在做性能测试的时候,关注哪些指标?

并发用户数、响应时间/平均响应时间、事务响应时间、每秒事务通过数、点击率、吞吐量、思考时间、资源利用率

性能测试分类:

1.基准性能测试:让系统在正常情况下运行,观察软件性能指标(应用场景:软件刚上线需要性能摸底)

2.负载性能测试:验证软件在一定的压力情况下运行,观察性能指标是否出现了拐点

3.压力性能测试:系统处于饱和情况下,观察系统性能指标

4.可靠性能测试 :验证系统在一个持续的时间段内运行,在这个运行时间段,观察系统的性能指标

执行流程:需求分析->测试计划->选择一款性能测试工具->性能测试脚本编写->执行性能测试脚本

性能瓶颈是一定有的,只能不断优化。

我用的性能测试工具是LoadRunner,以下是LoadRunner的三大组件。

VUG:录制脚本

Controller:设计场景,运行场景

Analysis:产生性能测试报告

在loadrunner文件下载路径,找到WebTours文件夹,里面有一个文件名为StarServer.bat,双击进去,

接下来,又在WebTours下面找到conf文件夹里,能找到 httpd.conf文件。

在360浏览器中打开链接。

 我们可以注册账号。在安装路径下WebTours文件夹下cgi-bin文件夹下users文件夹下会存放我们的账号密码。

 打开VUG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值