项目介绍

项目概述

卷王问卷考试系统SurveyKing)是一个基于 Spring Boot + React 的开源在线问卷与考试平台,支持问卷创建、考试创建、导入试题、模板使用等功能。本次测试基于官方 Gitee 发布的 v1.9.0 版本进行私有化部署。

项目已实现的功能

  1. 普通用户登录与注册
  2. 首页展示用户创建的考试数量和问卷调查数量
  3. 我的项目页面
    • 展示项目列表
    • 可切换项目列表展示布局
    • 可按照项目名称进行搜索
    • 问卷创建、奖品创建以及文件夹创建
    • excel导入问卷和奖品
    • 对项目进行重命名和删除
    • 分页展示项目列表
  4. 我的练习页面
    • 展示练习列表
    • 可按照练习状态进行查询
    • 删除练习
  5. 题库中心
    • 我的题库页面
      • 展示题库列表
      • 可按题库名称和题库类型进行搜索
      • 对题库列表的增删改
      • 支持文本导入
    • 问题管理页面
      • 展示问题列表
      • 可对类型、题型、名称、标签进行查询
      • 可批量删除问题
    • 我的笔记页面
      • 可切换展示我的错题列表和我的收藏列表
      • 我的错题支持按照问题标题、笔记和创建时间进行查询
      • 我的收藏支持按照问题标题和创建时间进行查询
  6. 模板广场页面
    • 展示公共库模板或者私有库模板列表
    • 可按模板名字进行搜索
    • 添加模板和删除模板
  7. 系统管理
    • 岗位设置页面
      • 展示岗位列表
      • 可按岗位名称进行查询
      • 对岗位进行增删改
    • 字典管理页面
      • 展示字典列表
      • 可按字典名称进行查询
      • 对字典进行增删改
    • 个人设置页面
      • 更新头像、姓名、手机号、邮箱以及个人简介
    • 安全设置页面
      • 修改账户密码

以上为主要可正常使用的功能,由于某些原因部分功能暂不可使用

项目测试目标

主页面测试覆盖率不低于90%

测试项目相关信息

测试计划

功能测试

项目测试的部分操作和截图

1. 正常登录
卷王问卷考试系统-正常登录
卷王问卷考试系统-登录成功

2. 正常注册
卷王问卷考试系统-正常注册
卷王问卷考试系统-注册成功

3. 新建问卷
卷王问卷考试系统-创建问卷
卷王问卷考试系统-问卷创建成功
卷王问卷考试系统-问卷创建成功的列表展示

4. 搜索项目
卷王问卷考试系统-搜索项目

5. 删除练习
卷王问卷考试系统-删除练习
卷王问卷考试系统-删除练习成功

6. 新增题库
卷王问卷考试系统-新增题库
卷王问卷考试系统-题库新增后的题库列表

7. 笔记搜索卷王问卷考试系统-笔记搜索

8. 添加模板
卷王问卷考试系统-添加模板
卷王问卷考试系统-添加模板2
卷王问卷考试系统-模板保存成功
卷王问卷考试系统-模板保存后的列表

9. 修改个人基本信息
卷王问卷考试系统-修改个人基本信息
卷王问卷考试系统-修改个人基本信息成功

自动化测试

1. 编写Web测试用例

卷王问卷考试系统-Web测试用例

2. 代码编写

① 在pom.xml中添加自动化测试所需的依赖

<dependencies>
   <dependency>
       <groupId>org.seleniumhq.selenium</groupId>
       <artifactId>selenium-java</artifactId>
       <version>4.39.0</version>
   </dependency>
   <dependency>
       <groupId>io.github.bonigarcia</groupId>
       <artifactId>webdrivermanager</artifactId>
       <version>6.3.3</version>
   </dependency>
   <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>2.21.0</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>2.0.17</version>
   </dependency>
</dependencies>

② 在src/test/java目录下建立包以及相关的测试类和工具类
卷王问卷考试系统-项目结构

3. 各个类功能介绍

(1)测试工具类 TestUtils

  • 为页面测试类提供driver、wait等对象
  • 封装一些页面会用到的操作方法,如截图、执行js等

(2)常量类 Constants

  • 封装测试类中测试方法会用到的一些常亮,如url、弹窗提示文本等

(3)登录页测试类 LoginPageTest

  • 测试登录页面是否可以正常打开
  • 测试成功登录和异常登录
  • 测试点击注册账户按钮是否可以跳转到注册页

(4)注册页测试类 RegisterPageTest

  • 测试注册页面是否可以正常打开
  • 测试成功注册和异常注册
  • 测试点击返回登录按钮是否可以返回到登录页面

(5)首页测试类 HomePageTest

  • 测试首页内容是否正常显示
  • 测试tab栏是否可以正常切换
  • 测试快速开始的创建问卷按钮和创建考试按钮是否可点击跳转到对应页面

(6)我的项目页面测试类 MyProjectPageTest

  • 测试我的项目页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试操作列的功能按钮是否可以进行相应的操作
  • 测试分页功能是否正常

(7)我的练习页面测试类 MyExercisePageTest

  • 测试我的练习页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试点击列表操作列的删除按钮是否可以正常删除
  • 测试分页功能是否正常

(8)我的题库页面测试类 MyRepoPageTest

  • 测试我的题库页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试新建题库功能是否正常
  • 测试文本导入功能是否正常
  • 测试编辑题库和删除题库功能是否正常
  • 测试分页功能是否正常

(9)问题管理页面测试类 QuestionManagePageTest

  • 测试问题管理页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试问题编辑功能是否正常
  • 测试分页功能是否正常
  • 测试批量删除功能是否正常

(10)我的笔记页面测试类 MyNotePageTest

  • 测试我的笔记页面是否可以正常显示
  • 测试tab栏切换功能是否正常
  • 测试搜索功能是否正常
  • 测试点击笔记列表操作列的删除按钮是否可以正常删除
  • 测试分页功能是否正常

(11)模板广场页面测试类 TemplateSquarePageTest

  • 测试模板广场页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试添加模板功能是否正常
  • 测试模板的预览、应用以及删除功能是否正常

(12)用户管理页面测试类 UserManagePageTest

  • 测试用户管理页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试用户的新增、编辑以及删除功能是否正常
  • 测试导入excel进行批量创建用户的功能是否正常
  • 测试重置密码功能是否正常
  • 测试分页功能是否正常

(13)角色管理页面测试类 RoleManagePageTest

  • 测试角色管理页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试角色的新建、编辑以及删除功能是否正常
  • 测试分页功能是否正常

(14)岗位设置页面测试类 PositionSettingPageTest

  • 测试岗位列表页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试岗位的新建、编辑以及删除功能是否正常
  • 测试分页功能是否正常

(15)字典管理页面 DictManagePageTest

  • 测试字典管理页面是否可以正常显示
  • 测试搜索功能是否正常
  • 测试字典的新建、编辑以及删除功能是否正常
  • 测试分页功能是否正常

(16)个人设置页面测试类 PersonalSettingPageTest

  • 测试个人设置页面是否可以正常显示
  • 测试是否可以对个人的基本信息进行修改
  • 测试是否可以修改密码
  • 测试是否可以修改系统的相关基本信息以及是否可以控制功能的开放
  • 测试是否可以对系统的设置进行重置

4. 代码参考

https://gitee.com/vvns/questionnaire-auto-test

性能测试(JMeter)

单测登录接口

1. 线程组配置
卷王问卷考试系统-线程组配置

2. 配置解释

  • 添加了HTTP请求默认值和HTTP信息头管理器两个配置原件,一个用来设置请求的协议、服务器ip、端口号、内容编码等基本信息,另一个是设置请求头要带上哪些字段,如 Content-TypeAuthorization
  • 本次配置了10个线程,立即开启并持续执行2秒,最后查看结果数和聚合报告

3. 测试结果
卷王问卷考试系统-登录请求成功
卷王问卷考试系统-登录请求聚合报告

4. 总结

  • 测试场景与稳定性验证:本次针对卷王问卷考试系统登录接口开展 10 线程并发性能测试,累计执行 90 次请求,异常率为 0.00%,全量请求无失败、无超时,接口在并发压力下运行稳定,可靠性完全达标

  • 响应时间表现:接口平均响应时间 233ms,中位数 223ms,90% 请求响应时间≤301ms,95% 请求≤308ms,99% 请求≤384ms;响应时间波动范围为 129ms~385ms,整体延迟处于较低水平,完全符合用户端流畅操作的体验要求

  • 吞吐量与负载能力:接口吞吐量达 41.6 次 / 秒,数据接收速率 34.16KB/sec、发送速率 25.22KB/sec,在 10 线程并发场景下接口处理能力充足,无明显性能瓶颈,可支撑系统日常登录场景的并发访问需求

对系统核心功能进行梯度压测

1. 梯度压测线程组配置
卷王问卷考试系统-梯度压测线程组配置

2. 测试结果
(1) 聚合报告
卷王问卷考试系统-聚合报告

(2) 响应时间曲线图
卷王问卷考试系统-响应时间曲线图

(3) 每秒事务数曲线图
卷王问卷考试系统-每秒事务数曲线图
3. 生成测试报告
(1) 命令

jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
# -n : 无图形化运行
# -t : 被运行的脚本
# -l : 将运行信息写入日志文件,后缀为jtl的日志文件
# -e : 生成测试报告
# -o : 指定报告输出目录

执行这个命令后,jmeter会把指定的脚本文件先执行一遍再生成测试报告

(2) 生成结果
① 总览
卷王问卷考试系统-测试报告总览

② 时间变化图
卷王问卷考试系统-测试报告时间变化图

③ 分析
卷王问卷考试系统 JMeter 压测报告分析

测试总结

  1. 写自动化测试的代码时,注意一下各个测试类以及相应测试方法的执行顺序
  2. 页面截图可以先在自动化发送交互指令之前截图,如果截某个元素变化之后的页面呈现,可使用wait智能等待,等时机合适再进行截图
  3. 本次自动化测试虽未使用测试框架,但测试代码整体都能跑通。后续如果接入框架,代码的可维护性和编写灵活性会有进一步提升空间
  4. 做性能测试的时候,可以单测主要核心功能接口,涉及到一个模块的增删改查,可以思考一下怎么调整顺序能让一个接口的响应配合另一个接口的请求构造,更好的方便我们测试计划的执行
  5. 本次系统大部分接口都是传json数据,对于一个json请求,如果发现某个接口请求失败,先看看请求体的构造的json形式是否正确(比如少了逗号或者双引号),然后再看响应信息,进一步确定问题所在,依次排查
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐