在线OJ项目测试

news2025/6/7 5:23:55

一.项目简介

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次也是可以成功的,当然这并不能说明什么, 还需要后续的梯度压测进行测试,

生成梯度压测测试报告后,因为只是简单测试了一个登录,一般不会有什么问题,并且线程数也不是很大,轻薄本不敢轻易尝试,还望见谅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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…

FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ FART 脱壳 fartthread 方法在 app 启动的时候(ActivityThread)开启 fart 线程,休眠 60 秒,等待 app 启动完成后…

快速用 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 获…

Python读取PDF:文本、图片与文档属性

在日常的数据采集、文档归档与信息挖掘过程中,PDF格式因其版式固定、内容稳定而被广泛使用。Python 开发者若希望实现 PDF 内容的自动化提取,选择一个易用且功能完善的库至关重要。本文将介绍如何用Python实现 PDF文本读取、图片提取 以及 文档属性读取 …

基于SpringBoot+Vue2的租房售房二手房小程序

角色: 管理员、房东、租客/买家 技术: springbootvue2mysqlmybatispagehelper 核心功能: 租房售房小程序是一个专注于房屋租赁和销售的综合性平台,基于SpringBootVue2MySQLMyBatisPageHelper技术栈开发,为用户提供…

基于本地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…

MADlib —— 基于 SQL 的数据挖掘解决方案(4)—— 数据类型之矩阵

目录 一、矩阵定义 二、MADlib 中的矩阵表示 1. 稠密 2. 稀疏 三、MADlib 中的矩阵运算函数 1. 矩阵操作函数分类 (1)表示函数 (2)计算函数 (3)提取函数 (4)归约函数&…

ServBay 1.13.0 更新,新增第三方反向代理/内网穿透

ServBay 作为一款简化本地开发环境搭建与管理的强大工具,致力于打造一个开箱即用、稳定可靠的本地开发平台,让用户专注于代码编写,提升开发效率。 ServBay 1.13.0 正式发布!本次更新聚焦于提升本地开发项目的外部可访问性、增强国…

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年出生于广东湛江的姑娘,凭借独特风格在网络世界掀起波澜,其发展轨迹…

基于 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. 网络编程概念: 指通过计算机网络实现程序间通信的技术,涉及协议、套接字、数据传输等核心概念。常见的应用场景包括客户端-服务器模型、分布式系统、实时通信等。…

黑马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 与运算符 &/| 的区别 比较、掩码与布尔逻辑 本文介绍如何使用布尔掩码来检查和操…

力扣HOT100之二分查找:35. 搜索插入位置

这道题属于是二分查找的入门题了,我依稀记得一些二分查找的编码要点,但是最后还是写出了一个死循环,无语(ˉ▽ˉ;)…又回去看了下自己当时的博客和卡哥的视频,这才发现自己分情况只分了两种,最后导致死循环…

使用API有效率地管理Dynadot域名,查看域名市场中所售域名的详细信息

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…