在线OJ项目测试
一.项目简介
1.1项目背景
-
历史起源:最早的OJ系统(如UVa、POJ)是为国际大学生程序设计竞赛(ICPC)等赛事开发的,用于自动评判参赛者的代码正确性和效率。
-
需求场景:竞赛需要公平、高效的评分系统,避免人工判题的耗时和主观性。
-
教学工具:高校和培训机构需要OJ系统来布置编程作业、实验或考试,实时反馈学生代码的逻辑错误、时间/空间复杂度等问题。
-
自学平台:个人学习者通过OJ(如LeetCode、洛谷)刷题提升算法和数据结构能力。
-
标准化筛选:企业(如Google、国内大厂)将OJ题目嵌入笔试环节,快速筛选候选人的编码能力。
-
常见平台:HackerRank、Codeforces等支持企业定制题库和在线编程测试。
-
自动化判题:利用沙箱(Docker等)隔离运行用户代码,通过测试用例比对结果。
-
云计算支持:现代OJ系统依赖云服务实现高并发判题
1.2 应用技术
SpringCloud微服务架构,SpringBoot框架,Mybatis-plus操作数据库,使用ApiFox进行代码测试以及生成接口文档,全局引入日志框架,Nacos配置中心,API网关,JWT身份认证,redis缓存,Mybatis的分页插件PageHelper,接口性能测试Jmeter.TransmittableThreadLocal.分布式任务调度平台xxl-job处理定时任务.Elasticsearch进行题目关键字搜索,使用阿里云的oss用于存储头像信息,rabbitmq消息队列
二.项目功能
2.1 管理端
登录:管理员可以通过账号密码进行登录,对于管理员密码存储到数据库要进行加密.
竞赛:添加竞赛,竞赛中的题目信息添加,查询题目,竞赛编辑,删除.以及竞赛的发布和撤销发布
题目:管理员可以添加题目,对题目信息进行修改,删除题目,查询题目
2.2 用户端
登录:用户使用手机号+验证码的方式进行登录,并对手机号进行加密处理
题目:用户可以参与答题,查询题目等操作
竞赛:用户可以报名参加竞赛,查看历史竞赛,以及查看我的竞赛列表
用户:提供用户可以查看个人信息,以及修改个人信息等
三.测试报告
3.1测试用例设计

3.2 功能测试
3.2.1 b端
3.2.1.1 登录测试
直接点击登录,提示我们账号密码不能为空

输入账号,不输入密码,提示我们密码不能为空

只输入密码,不输入账号,提示我们用户名不能为空

登录成功测试,登录成功后直接跳转管理页面

用户点击退出登录后是否会退到登录界面,测试成功

3.2.1.1 竞赛测试
3.2.1.1.1竞赛搜索
输入正确的日期区间是否会查询出结果,查询结果成功

输入错误的区间是否也会搜索出竞赛 ,查询结果失败.

输入竞赛完整名称是否会完成搜索,搜索成功

搜如关键字是否会搜索出结果,搜索成功
日期和竞赛名同时搜索会是否会搜索出结果,搜索成功

3.2.1.1.1竞赛添加
竞赛名称包含特殊字符是否可以创建,这里并没有对竞赛名称限制,后续需考虑

使用重复的竞赛名称进行竞赛添加是否可以通过,提示竞赛已经存在

竞赛开始时间在当前时间之前是否可以创建竞赛成功,提示竞赛时间不能早于当前时间

未添加竞赛题目的竞赛是否可以发布

添加竞赛题目的竞赛是否可以发布
![]()
![]()
3.2.1.1.1竞赛删除
管理员点击删除竞赛是否可以成功删除竞赛


3.2.1.1.1竞赛编辑
用户点击编辑竞赛是否会成功显示竞赛详情信息

3.3 界面测试
页面显示正常,功能模块布局完整,功能点显示没有异常.各个模块位置分配符合预期.背景图片清晰
用户登录后右上角会正确显示用户信息

3.2.2 c端
3.2.2.1 登录测试
用户未登录
我们可以看到用户在未登录的时候是不能进行答题操作的

同样我们测试下位报名是否可以报名参加竞赛,点击参加竞赛,提示我们未登录不能参加竞赛

接下来进入登录页面进行测试
什么都不输入,提示出验证码获取失败,提示信息不准确,需要后续进行更改

输入错误的手机号错误的验证码,提示验证码过期,也是有漏洞的需要更改

输入正确的手机号验证码后点击登录,直接跳转页面,由于该项目本打算使用阿里云短信服务,但是阿里云限制测试学习,我们只能通过日志打印的方式打印验证码.我们也可以设置一个开关,固定验证码测试时使用.

用户登录后可以发现我们可以进行答题操作

点击竞赛页面,报名参加竞赛,提示我们报名成功

同时在我的竞赛列表也能刚刚看到报名的竞赛
3.2.2.2 答题测试
答题使用es进行分词查询,通过测试效果是可以通过的

根据题目难度也可以进行测试

用户在答题页面进行题目切换


题目切换也是没问题的
接下里是用户答题测试


功能测试总结:
总体来说功能实现基本测试完成,
b端管理员操作对于竞赛或题目的增删改查已经基本实现
b端登录功能基本实现,登录失败会正确提示用户
c端用户答题功能,题目竞赛搜索功能,题目查询功能基本实现
但是c端用户登录的时候登录失败的提示不是很准确需要后续整改
3.3 性能测试
首先我们简单的对登录接口进行压力测试,准备100个线程对管理员登录接口进行测试


目前他抵挡住了我100个线程的攻击,此时我们加大马力,进行300次,由于博主电脑配置不是很高不敢贸然尝试更大的

查看结果树

聚合报告

我们可以看到请求300次也是可以成功的,当然这并不能说明什么, 还需要后续的梯度压测进行测试,
生成梯度压测测试报告后,因为只是简单测试了一个登录,一般不会有什么问题,并且线程数也不是很大,轻薄本不敢轻易尝试,还望见谅

相关文章:
在线OJ项目测试
一.项目简介 1.1项目背景 历史起源:最早的OJ系统(如UVa、POJ)是为国际大学生程序设计竞赛(ICPC)等赛事开发的,用于自动评判参赛者的代码正确性和效率。 需求场景:竞赛需要公平、高效的评分系统…...
C++ --- vector
C --- vector的使用 前言1、构造函数1.1默认构造1.2n个val值构造1.3迭代器区间构造1.4拷贝构造1.4初始化列表构造 2、遍历方式2.1[ ] 下标2.2迭代器2.3范围for 3、常用方法或重载(1)增push_back()insert()assign() (2)删erase()c…...
【python基础知识】变量名和方法名的单下划线(_)和双下划线(__)总结
文章目录 1. 单下划线前缀(_variable 或 _method())2. 双下划线前缀(__variable 或 __method())3. 前后双下划线(__variable__ 或 __method__)4. 单下划线(_)单独使用总结 在 Python…...
FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ FART 脱壳 fartthread 方法在 app 启动的时候(ActivityThread)开启 fart 线程,休眠 60 秒,等待 app 启动完成后…...
✅ 常用 Java HTTP 客户端汇总及使用示例
在 Java 开发中,HTTP 客户端是与服务端交互的关键组件。随着技术发展,出现了多种 HTTP 客户端库,本文汇总了常用的 Java HTTP 客户端,介绍其特点、适用场景,并附上简单使用示例,方便开发者快速选择和上手。…...
快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令
目录 1. uv 介绍2. uv 安装(Windows版)3. 快速模拟一个要发布到TestPyPI上的依赖包,scoful-test-lib3.1 初始化 uv init3.2 进入scoful-test-lib3.3 修改pyproject.toml3.4 使用命令 uv sync3.5. 使用命令 uv lock3.6 使用命令 uv build3.7 获…...
Keil调试模式下,排查程序崩溃简述
在Keil调试模式下,若程序崩溃,可以通过以下步骤来定位崩溃的位置: 一、查看调用栈(Call Stack) 打开调用栈窗口: 在Keil的调试模式下,点击菜单栏的“View” -> “Call Stack Window”&…...
Python读取PDF:文本、图片与文档属性
在日常的数据采集、文档归档与信息挖掘过程中,PDF格式因其版式固定、内容稳定而被广泛使用。Python 开发者若希望实现 PDF 内容的自动化提取,选择一个易用且功能完善的库至关重要。本文将介绍如何用Python实现 PDF文本读取、图片提取 以及 文档属性读取 …...
基于SpringBoot+Vue2的租房售房二手房小程序
角色: 管理员、房东、租客/买家 技术: springbootvue2mysqlmybatispagehelper 核心功能: 租房售房小程序是一个专注于房屋租赁和销售的综合性平台,基于SpringBootVue2MySQLMyBatisPageHelper技术栈开发,为用户提供…...
数学:学好数学需要对数系进行系统的对比和分析
数系范围:自然数通常是从 0 或 1 开始,用于计数的数,然后整数包括正负和零,有理数是分数,实数包括无理数,复数引入虚数单位。 运算性质:比如是否满足加法、乘法的封闭性,是否有逆元,是否有序,完备性等。 结构对比:比如代数结构,比如自然数是半群,整数是环,有理…...
基于本地LLM与MCP架构构建AI智能体全指南
一、AI智能体开发的新范式 随着人工智能技术的快速演进,AI智能体(AI Agents)正成为连接技术创新与实际应用的核心载体。从智能家居的温控系统到复杂的金融风控决策,AI智能体通过感知环境并执行目标导向的行为,正在重塑…...
AT2659_GNSS低噪声放大器芯片
AT2659 射频放大器在SiGe工艺平台上实现23dB增益与0.71dB噪声系数的优异组合,专为BDS/GPS/GLONASS/GALILEO多模导航系统优化设计。其宽电压适应能力(1.4-3.6V)与低至4.4mA的功耗特性,配合1.5mm1mm0.55mm的6脚DFN封装(R…...
跨平台游戏引擎 Axmol-2.6.1 发布
Axmol 2.6.1 版本是一个以错误修复和功能改进为主的次要LTS长期支持版本 🙏感谢所有贡献者及财务赞助者:scorewarrior、peterkharitonov、duong、thienphuoc、bingsoo、asnagni、paulocoutinhox、DelinWorks 错误修复 修复Android armv7架构崩溃问题&…...
MADlib —— 基于 SQL 的数据挖掘解决方案(4)—— 数据类型之矩阵
目录 一、矩阵定义 二、MADlib 中的矩阵表示 1. 稠密 2. 稀疏 三、MADlib 中的矩阵运算函数 1. 矩阵操作函数分类 (1)表示函数 (2)计算函数 (3)提取函数 (4)归约函数&…...
ServBay 1.13.0 更新,新增第三方反向代理/内网穿透
ServBay 作为一款简化本地开发环境搭建与管理的强大工具,致力于打造一个开箱即用、稳定可靠的本地开发平台,让用户专注于代码编写,提升开发效率。 ServBay 1.13.0 正式发布!本次更新聚焦于提升本地开发项目的外部可访问性、增强国…...
C#对象扩展方法:提升对象操作的灵活性与效率
C#对象扩展方法:提升对象操作的灵活性与效率 在C#编程中,我们经常需要对对象进行各种操作,如获取对象属性信息、转换对象格式、复制对象等。通过扩展方法,我们可以为现有类型添加新的功能,而无需修改原始类型的代码。…...
Python爬虫爬取天猫商品数据,详细教程【Python经典实战项目】
Python爬取天猫商品数据详细教程 一、前期准备 1. 环境配置 Python环境:确保已安装Python 3.x版本,建议使用Anaconda或直接从Python官网下载安装。第三方库: requests:用于发送HTTP请求。BeautifulSoup:用于解析HTM…...
Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数
Oracle 的SEC_CASE_SENSITIVE_LOGON 参数 关键版本信息 SEC_CASE_SENSITIVE_LOGON 参数在以下版本中被弃用: Oracle 12c Release 1 (12.1): 该参数首次被标记为"过时"(obsolete)但依然保持功能有效 Oracle 18c/19c 及更高版本: …...
Docker构建自定义的镜像
构建自定义的 Docker 镜像是 Docker 使用中的核心操作之一。通过自定义镜像,你可以将应用程序及其依赖环境打包成一个可移植的容器化镜像。以下是详细的步骤和注意事项: 1. 准备工作 在构建自定义镜像之前,你需要准备以下内容: D…...
【SSM】SpringMVC学习笔记8:拦截器
这篇学习笔记是Spring系列笔记的第8篇,该笔记是笔者在学习黑马程序员SSM框架教程课程期间的笔记,供自己和他人参考。 Spring学习笔记目录 笔记1:【SSM】Spring基础: IoC配置学习笔记-CSDN博客 对应黑马课程P1~P20的内容。 笔记2…...
井川里予瓜pdf完整版
井川里予瓜pdf完整版 下载链接: 链接:https://pan.quark.cn/s/c75455d6be60 在网红文化盛行的当下,井川里予无疑是一位备受瞩目的人物。这位2001年出生于广东湛江的姑娘,凭借独特风格在网络世界掀起波澜,其发展轨迹…...
UI自动化常见的一些问题解决方式
1、遇到元素无法定位的情况 解决方法:(1)手写css 先找到父级的唯一元素 (2)手写xpath、 (3)js在浏览器控制台去定位 控制台定位样例:(1)…...
基于 Zynq 平台的 EtherCAT 主站的软硬件协同设计
摘要: 针对工业自动化对控制能力和强实时性的需求,提出了一种基于 FPGA 的改进型 EtherCAT 硬件主站方案 。 该方案利用 Zynq-7000 平台,在 PL 端实现 FPGA 协议栈,以保证核心功能的高效执 行 。 基于 AXI4 总线设计…...
聊一聊 .NET在Linux下的IO多路复用select和epoll
一:背景 1. 讲故事 在windows平台上,相信很多人都知道.NET异步机制是借助了Windows自带的 IO完成端口 实现的异步交互,那在 Linux 下.NET 又是怎么玩的呢?主要还是传统的 select,poll,epoll 的IO多路复用…...
从零开始的嵌入式学习day33
网络编程及相关概念 UDP网络通信程序 UDP网络通信操作 一、网络编程及相关概念 1. 网络编程概念: 指通过计算机网络实现程序间通信的技术,涉及协议、套接字、数据传输等核心概念。常见的应用场景包括客户端-服务器模型、分布式系统、实时通信等。…...
ArcGIS Pro 3.4 二次开发 - 宗地
环境:ArcGIS Pro SDK 3.4 + .NET 8 文章目录 宗地1 宗地1.1 向地图添加宗地图层1.2 获取活动记录1.3 设置活动记录1.4 创建新记录1.5 将标准线要素复制到宗地类型1.6 将宗地线复制到宗地类型1.7 将要素分配给活动记录1.8 创建宗地种子1.9 构建地块1.10 重复地块1.11 设置地块为…...
前端面试准备-7
1.定义class的实现 //定义class class Person{//公有属性nameage 18//构造函数constructor(name){//构造函数内部的this实例化对象this.name name//动态添加属性(不推荐)this.food [🐂,🐎,🐏]}//公有方法sayHi(){c…...
黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)
一. 单例bean Spring框架中的单例bean是线程安全的吗? Spring框架中的bean是单例的,可以在注解Scope()进行设置 singleton:bean在每一个Spring IOC容器中只有一个实例。prototype:一个bean的定义可以有多个实例 总结 二. AOP AOP称…...
全球IP归属地查询接口如何用C#进行调用?
一、什么是全球IP归属地查询接口 在全球化互联网时代,IP地址作为网络世界的地理位置标识,扮演着至关重要的角色。全球IP归属地查询接口通过解析IP地址,提供包括国家、省、市、区县和运营商在内的详细信息。 二、应用场景 1. 访问识别 全球…...
NumPy 比较、掩码与布尔逻辑
文章目录 比较、掩码与布尔逻辑示例:统计下雨天数作为通用函数(Ufuncs)的比较运算符使用布尔数组计数条目布尔运算符 布尔数组作为掩码使用关键字 and/or 与运算符 &/| 的区别 比较、掩码与布尔逻辑 本文介绍如何使用布尔掩码来检查和操…...
