在线抽奖系统测试报告(改)

 

一、编写目的

本报告为在线抽奖系统测试报告,本项目是为了解决抽奖发烧友准备的,包括了用户注册,用户登录,修改奖项等功能。

二、项目背景

在线抽奖系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将其部署到云服务器上。前端主要有三个页面构成:登录页、奖项页、抽奖页,以上模拟实现了较复杂的在线抽奖系统。其结合后端实现了以下的主要功能:登录、修改奖品、删除奖品、以及注销等功能。
但是该项目没有设计用户注册功能,只能提前在数据库中存储用户信息后经过校验登录;并且用户头像不能自己设定,在进行前端页面的书写过程中已经将头像的图片写为静态了;而用户信息中的文章数以及分类数也没有在后端中具体实现,直接在前端页面中写为了静态的。
该在线抽奖系统可以实现个人用户简单的获奖记录,时间、标题、内容以及发布者等都可以进行详细地查看。  

三、相关模块

1登录模块:登录时用Session获取用户表,在获取用户id来使后端将用户信息存储在Session中.

2抽奖模块:用户通过请求发送数据到后端,后端获取抽奖人员id并通过RequestMapping注解来处理前端的请求并返回响应。

3奖项模块:通过后端实现了新增奖项,修改奖项,删除奖项等功能,在修改奖项采用了批量更新,使用的方法是Mybaits批量操作,提升了效率。

四、测试环境

硬件配置

内存:8.00 GB

软件配置

Windows10,Chrome浏览器(功能测试)

1框架升级: 将从Servlet升级到SSM框架,框架变得更高级。

2拦截统一:通过拦截器对http请求进行统一拦截并采用统一的响应数据格式。

3流行框架: 设计了现代流行的前端框架,如elementui饿了么UI框架,vueJavaScript框架,axiosAjax请求框

五  测试功能

该在线抽奖系统主要实现了以下几个功能:登录,奖项页面设置,抽奖页面设置以及用户管理等功能。

登录功能:用户名以及密码已经在后端写入了数据库,没有实现账户注册功能,即:用户名以及密码是已经存在的。登录成功后就会跳转到奖项页面。在右上角有个人中心和注销,但是在未登录情况下按下均只会跳转到登录页面。
奖项页面:可以在奖项页面看有奖品数量,可以修改奖品模块,删除奖品模块。增加奖品模块。在右上角点击头像有个人中心和注销和设置三个功能,点击去抽奖跳转抽奖页面,下方还有参会人员列表,实现了增删改查,并实现了重置抽奖功能
抽奖页面:在抽奖页面点击“开始”按钮就会开始抽奖,此时就可以看到抽奖机在抽奖。在右下角有停止按钮,点击停止看查看结果,还有清空抽奖结果按钮。可随时清空结果

六、测试过程

一功能测试

1测试用例:


实际执行测试的部分操作步骤/截图
1正常登录:

2用户注册测试

3头像选择

4奖品修改成功并保存成功

5奖品删除成功

6奖品增加成功并保存成功

7点击去抽奖跳转抽奖页面

8点击开始按钮,抽奖开始,点击停止,抽奖结束

9点击刷新按钮,清空抽奖结果

10点击注销信息,注销成功

11点击重置抽奖结果,重置奖品

二 自动化测试


代码编写

根据脑图进行测试用例的编写,可以按照每个页面一个测试类的方式来组织。首先,需要单独创建一个公共属性类,以方便进行代码复用。

接下来,在各个测试类中进行测试用例的编写。为了便于运行以及修改,可以使用测试套件。此外,启动和现场截图是频繁进行复用的操作,因此可以单独创建一个类进行存储,并在需要的时候进行调用。

在编写测试用例时,需要注意添加隐式等待,以确保页面能够正确加载和显示。这样可以有效避免因页面未完全加载导致的测试失败情况。

总之,按照脑图的规划,可以将测试用例按照页面进行分组,结合测试套件和公共属性类,以及单独存储启动和现场截图的类,来进行测试用例的编写和组织。

1. 添加相关依赖pom.xml

<dependencies>
<!--        添加selenium依赖-->
        <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>
 
        <!--        添加junit5依赖-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>


2. 新建包并在包下创建测试类以及公共类
以下是所建立的是common公共包和Tests测试包:

1公共类DuoXo
创建驱动、保存现场截图
注意:在保存现场截图的时候命名是按时间来进行文件夹的划分,然后图片的名称要体现出测试类的类名,方便进行问题的追溯。
注意文件名的动态获取,注意时间格式的设置。

2登录页面测试 

 创建驱动,并打开页面
 测试页面是否正常打开
 测试正常登录:多参数测试
 测试用户注册:多参数测试
 测试选择头像,看是否可以选择图片

 注意测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败

3奖项页测试
 测试奖项页是否可以正常打开
 测试奖项页的修改按钮是否可以正常修改
 测试未登录的直顺便测试了“注销”按钮
 测试奖项页的删除按钮是否可以正常删除,

4抽奖页测试
 测试抽奖页是否可以正常打开
 测试抽奖页的开始按钮是否可以正常使用
 测试抽奖页的停止按钮是否可以正常使用
 测试抽奖页的清空按钮是否可以正常使用

七 性能测试

使用loadrunner进行简单性能测试:针对登录、编写并发布博客以及删除博客、注销等功能进行简单的性能测试。
然后在实现的过程中,插入集合点以及事务等,并通过设置来实现用户的并发操作。

录制脚本

登录测试

通过开发者工具查看请求发送的格式,以此来进行性能测试脚本的编写。发现:用户名以及密码是使用form表单的形式来进行发送的。因为用户名以及密码可以有多个,所以可以进行参数化。

添加事务以及集合点、检查点:注意检查点一般放在请求之前。

设置迭代次数:为了能够更好地遍历到所有的参数,一定要进行保存。

检查点:一定注意函数只放在要检查的URL前面,不要随便再往前面放置。(即:只放在需求之前)相关源码

ction()
{

    //插入集合点
    lr_rendezvous("Rendezvous");

    //给登录插入事务
	lr_start_transaction("login_transaction");

      

	web_submit_data("info", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t13.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=77481", ENDITEM, 
		"Name=sitedata", "Value=6c15020a1f05040016050419060b000d0f010b08181569", ENDITEM, 
		LAST);



	web_url("intf.php", 
		"URL=http://upext.chrome.360.cn/intf.php?method=ExtUpdate.query&os=win&arch=x86&os_arch=x86_64&nacl_arch=x86-64&prod=chromiumcrx&prodchannel=stable&prodversion=86.0.4240.198&lang=zh-CN&acceptformat=crx2,crx3&cse=13.5.2044.0&x=id%3Dcfbkpilajlmedibkjkhcckpkpphhhklm%26v%3D1.3.1%26installsource%3Dnotfromwebstore%26installedby%3Dinternal%26uc", 
		"Resource=0", 
		"RecContentType=text/xml", 
		"Referer=", 
		"Snapshot=t14.inf", 
		"Mode=HTML", 
		LAST);

	web_submit_data("info_2", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t15.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=986938", ENDITEM, 
		"Name=sitedata", "Value=621a070b041609160617020208080e091c6f5c5a6256464a4a171464", ENDITEM, 
		LAST);

	web_submit_data("info_3", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t16.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=361259", ENDITEM, 
		"Name=sitedata", "Value=6814000b07170200091c000f1d070b03050103194657574d5c4343411764", ENDITEM, 
		LAST);




	web_custom_request("login", 
		"URL=http://62.234.43.231:8539/api/user/login", 
		"Method=POST", 
		"Resource=0", 
		"RecContentType=application/json", 
		"Referer=http://62.234.43.231:8539/", 
		"Snapshot=t17.inf", 
		"Mode=HTML", 
		"EncType=application/json;charset=UTF-8", 
		//参数化站好和密码
		"Body={\"username\":\"{username}\",\"password\":\"{password}\"}", 
		LAST);
                       
	web_submit_data("info_4", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t18.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=903277", ENDITEM, 
		"Name=sitedata", "Value=6212020b051908060b1c020117010903070f091f50555e1a5b595d1d405255535c5f5219495c116f", ENDITEM, 
		LAST);
	
	//插入检查点 类似断言
  	web_reg_find("Text=ps5",
		LAST);
	
	
	web_url("setting.html", 
		"URL=http://62.234.43.231:8539/setting.html", 
		"Resource=0", 
		"Referer=http://62.234.43.231:8539/", 
		"Snapshot=t19.inf", 
		"Mode=HTML", 
		EXTRARES, 
		"Url=/api/setting/query", ENDITEM, 
		LAST);
	
	
     
	lr_end_transaction("login_transaction",LR_AUTO);

	return 0;
}

脚本测试通过

同时测试2个用户并显示日志

设置并发数量进行性能测试,并导出测试报告以及图表
1)设置2个虚拟用户,防止电脑崩溃

2)在Controller中设置场景

3)开始进行运行,性能测试开始(运行中+结束截图)

4)在Analysis中查看性能报告以及报表
① 报告

② 点击率

③ 吞吐量

④ 系统资源

5)分析系统资源
① 剩余的物理内存近50%,即使用了近30%的内存,对于简单的登录功能来说还是较高的内存使用,还有内存优化的空间。
② 当点击率较大时CPU使用也是达到了一个较高的点,CPU利用率较高。
③ 总之,该性能还有优化的空间。

八、项目源码

   @Test
    @Order(1)
    void  LoginSuccess() throws InterruptedException {
        //打开登录界面

        EdgeOptions options = new EdgeOptions();
        options.addArguments("--remote-allow-origins=*");
        EdgeDriver driver = new EdgeDriver(options);
        driver.get("http://62.234.43.231:8539/login.html");
        //输入账号密码
       driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        driver.findElement(By.cssSelector("#username")).sendKeys("admin");
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        driver.findElement(By.cssSelector("#password")).sendKeys("admin");
        //提交按钮
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        driver.findElement(By.cssSelector("#submit")).click();
        //跳转到列表
        //获取url
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_url = driver.getCurrentUrl();
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals("http://62.234.43.231:8539/myblog_list.html",cur_url);
        //如果url是测试通过
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_admin = driver.findElement(By.cssSelector("#username")).getText();
        Assertions.assertEquals("admin",cur_admin);
        //展示admin

    }
    @Test
    void BlogList(){
        EdgeOptions options = new EdgeOptions();
        options.addArguments("--remote-allow-origins=*");
        EdgeDriver driver = new EdgeDriver(options);
        driver.get("http://62.234.43.231:8539/blog_list.html");

  • 40
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值