【在线OJ项目测试报告】

朋友们、伙计们,我们又见面了,本期来给大家带来关于在线OJ项目的测试报告,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

1. 项目介绍

2. 测试计划

3. 测试工具

4. 涉及到的测试动作 

5. 设计测试用例

6. 执行测试

6.1 功能性测试

6.2 兼容性测试

7. 自动化测试 

7.1 common模块实现

7.2 tests模块实现

7.2.1 OJ首页自动化测试 

7.2.2 题目列表页自动化测试

7.2.3 刷题页面

7.2.4 结合测试

8. 项目测试bug简述

9. 测试结论 


1. 项目介绍

在线OJ项目我主要是通过模仿牛客、LeetCode等在线OJ平台自主实现的一个刷题网站,虽然目前里面没有多少题目,但是后面会慢慢添加一些比较有意思的题目;

我们这个项目主要实现的功能就是在线判题:

我们点击任意的题目列表,就可以跳转到题目的具体描述页面;

在这个页面我们可以对题目进行阅读并写出对应的代码然后点击提交,并得到代码运行的结果;


项目源码:https://gitee.com/yue-sir-bit/load-balancing-type---oj

项目博客:https://blog.csdn.net/Yikefore/article/details/145696953?spm=1001.2014.3001.5501

2. 测试计划

项目完成之后,我们本篇对我写的在线OJ项目进行一下测试;

我们的测试计划是:

  • 1. 设计测试用例
  • 2. 根据测试用例进行对应的测试
  • 3. 编写自动化测试脚本

接下来就一一进行实现:

3. 测试工具

Pycharm、selenium、chrome-driver(本地)、Chrome、Edge

4. 涉及到的测试动作 

功能测试:覆盖了在首页点击按钮跳转到题目列表页,在题目列表页点击指定题目进入刷题页面,在刷题页面可以可以写代码并提交代码;

自动化测试:使用自动化测试接口来检查首页、题目列表页、刷题页面是否存在BUG。 

5. 设计测试用例

 对于在线OJ项目设计测试用例,我主要从以下几个方面进行了设计: 

  • 功能测试
  • 界面测试
  • 性能测试
  • 易用性测试
  • 兼容性测试
  • 安全性测试
  • 弱网测试

      

6. 执行测试

设计出了测试用例之后,接下来对对照测试用例来进行具体的测试(由于我的设备有限,所以我只能把我所能测的设计用例进行测试):

6.1 功能性测试

  


  


  


  


  


  


6.2 兼容性测试

 


剩下的测试用例就不一一展示了; 

7. 自动化测试 

在自动化测试这里我使用本地的Chrom浏览器驱动;

Chrome版本:

自动化测试用例:

自动化测试这里我一共测试了三个页面

OJ首页、题目列表页、指定题目的刷题页;


测试文件的设计:

  • common模块:进行浏览器驱动的创建以及公共方法(屏幕截图)的实现;
  • tests模块:对需要测试的页面分文件单独编写自动化测试脚本;
  • images:存放屏幕截图并对屏幕截图按照日期进行分类,并以调用方法和调用时间给对应的屏幕截图命名(方便查找)

7.1 common模块实现

我在Utils.py文件中实现了对于chrome驱动的创建以及屏幕截图的实现:

Utils.py:

import datetime
import os
import sysfrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Serviceclass Driver:driver = ""def __init__(self):chrome_driver_path = "E:\\Python\\chromedriver-win64\\chromedriver.exe"  #本地驱动所在路径options = Options()options.add_argument("--remote-allow-origins=*")self.driver = webdriver.Chrome(service=Service(chrome_driver_path), options=options) #创建驱动self.driver.implicitly_wait(2)   #查找时的隐式等待#屏幕截图功能# ../images/当前日期/调用函数名-当前具体日期.pngdef GetScreenShot(self):dirname = datetime.datetime.now().strftime("%Y-%m-%d")# 判断是否存在,如果不存在则创建if not os.path.exists("../images/" + dirname):os.mkdir("../images/" + dirname)# 截图文件名前面添加调用方法的名称filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"self.driver.save_screenshot("../images/" + dirname + "/" + filename)
#创建单例
OJDriver = Driver()

7.2 tests模块实现

在这个模块主要对三个页面进行自动话测试,最后再将三个页面结合测试;

7.2.1 OJ首页自动化测试 

对与OJ首页的测试,我做了以下一个工作:

通过url访问到OJ首页,然后对页面元素依次进行了查找,并进行了屏幕截图;

自动化测试代码:

OJHomePage.py

7.2.2 题目列表页自动化测试

在题目列表页我主要做了以下工作:

通过url访问到题目列表页,依次查找页面元素,并截图,然后点击任意一个题目查看能否进入;

OJListQuestionsPage.py:

import timefrom selenium.webdriver.common.by import Byfrom common.Utils import OJDriverclass OJListQuestions:url = ""driver = ""def __init__(self):self.url = "http://124.70.16.162:8080/all_questions"  #题目列表页urlself.driver = OJDriver.driver                         #创建驱动self.driver.get(self.url)                             #访问道题目列表页# 测试题目列表页面def ListQuestionsPage(self):# 检查页面元素actual = self.driver.find_element(By.CSS_SELECTOR, "body > div > div.question_list > h1").text# 断言是否存在assert actual == "OnlineJudge题目列表"#检查题目列表元素#编号self.driver.find_element(By.CSS_SELECTOR, "body > div > div.question_list > table > tbody > tr:nth-child(1) > th:nth-child(1)")#标题并self.driver.find_element(By.CSS_SELECTOR, "body > div > div.question_list > table > tbody > tr:nth-child(1) > th:nth-child(2)")#难度self.driver.find_element(By.CSS_SELECTOR, "body > div > div.question_list > table > tbody > tr:nth-child(1) > th:nth-child(3)")# 截图保存OJDriver.GetScreenShot()#找到任意一个题目并点击self.driver.find_element(By.CSS_SELECTOR, "body > div > div.question_list > table > tbody > tr:nth-child(2) > td:nth-child(2) > a").click()

7.2.3 刷题页面

在刷题页面我主要做了以下工作:

通过url进入到任意一个题目的刷题页面,然后依次查找个元素,点击提交按钮查看能否提交,并截图,因为我的这个代码编辑区域是第三方插件,所以自动化测试这里就没有进行写代码的测试;

OJOneQuestionPage.py:

7.2.4 结合测试

将上面三个页面的自动化测试结合起来,一次性跑完三个页面的自动化测试:

RunTest.py:

8. 项目测试bug简述

界面测试:在刷题页面题目描述和返回结果背景都为白色,不能很好进行区分;

兼容性测试:对于移动端用户来说页面不能伸缩导致竖屏使用时体验感差,题目文字被遮挡严重。

9. 测试结论 

本次项目测试通过(已经测试完成的,还有由于设备原因还有未测试的);

项目开发耗时一周,项目测试耗时2天(包含测试报告总结)。

 

 

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

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

相关文章

【HFP】蓝牙HFP应用层核心技术研究

免提配置文件(Hands-Free Profile, HFP)作为实现设备间音频通信的关键协议,广泛应用于车载系统、蓝牙耳机等场景。本文将基于最新技术规范,深入剖析HFP应用层的功能要求、协议映射及编解码器支持,为蓝牙开发工程师提供详尽的技术指南。 一、HFP应用层功能全景图 HFP定义…

横扫SQL面试——PV、UV问题

📊 横扫SQL面试:UV/PV问题 🌟 什么是UV/PV? 在数据领域,UV(Unique Visitor,独立访客) 和 PV(Page View,页面访问量) 是最基础也最重要的指标&…

【C++】第八节—string类(上)——详解+代码示例

hello,又见面了! 云边有个稻草人-CSDN博客 C_云边有个稻草人的博客-CSDN博客——C专栏(质量分高达97!) 菜鸟进化中。。。 目录 一、为什么要学习string类? 1.1 C语言中的字符串 1.2 面试题(暂不做讲解) …

如何判断JVM中类和其他类是不是同一个类

如何判断JVM中的类是否为同一个类 在Java虚拟机(JVM)中,判断两个类是否相同需要同时满足以下三个条件: 1. 类全限定名必须相同 包括包名类名的完整路径必须完全一致例如:java.lang.String和com.example.String被视为不同类 2. 加载该类的…

ifconfig 使用详解

目录 一、基本语法二、常见用途及示例1. 查看所有网络接口信息2. 启用/禁用网络接口3. 配置 IP 地址和子网掩码4. 修改 MAC 地址5. 启用混杂模式(Promiscuous Mode)6. 设置 MTU(最大传输单元) 三、其他选项四、常见问题1. 新系统中…

1. 标准库的强依赖(核心原因)

1. 标准库的强依赖(核心原因) 容器操作(如 std::vector 扩容) 当标准库容器(如 std::vector)需要重新分配内存时,它会尝试移动现有元素到新内存,而非拷贝(为了性能&…

【MySQL】常用SQL--持续更新ing

一、配置信息类 1.查看版本 select version; 或 select version(); 2.查看配置 show global variables where variable_name in (basedir,binlog_format,datadir,expire_logs_days,innodb_buffer_pool_size,innodb_log_buffer_size,innodb_log_file_size,innodb_log_files_i…

Day82 | 灵神 | 快慢指针 重排链表

Day82 | 灵神 | 快慢指针 重排链表 143.重排链表 143. 重排链表 - 力扣(LeetCode) 思路: 笔者直接给跪了,这个难度真是mid吗 直接去看灵神的视频 环形链表II【基础算法精讲 07】_哔哩哔哩_bilibili 1.简单来说就是&#xf…

常见的微信个人号二次开发功能

一、常见开发功能 1. 好友管理 好友列表维护 添加/删除好友 修改好友信息(备注、标签等) 分组管理 创建/编辑/删除标签 好友分类与筛选 2. 消息管理 信息发送 支持多类型内容:文本、图片、视频、文件、小程序、名片、URL链接等 附加功…

Android打包及上架应用市场问题处理

一、Gradle 配置参数含义: compileSdkVersion: 29 表示项目编译时使用的 Android SDK 版本为 API 29(Android 10),仅影响编译阶段的行为(如代码语法检查、资源处理等),不直接影响运行时兼容性。…

Docker 从入门到进阶 (Win 环境) + Docker 常用命令

目录 引言 一、准备工作 1.1 系统要求 1.2 启用虚拟化 二、安装Docker 2.1 安装WSL 2 2.2 安装Docker Desktop 2.3检查是否安装成功 三、配置Docker 3.1 打开Docker配置中心 四、下载和管理Docker镜像 4.1 拉取镜像 4.2 查看已下载的镜像 4.3 运行容器 4.4 查看正…

计算机视觉5——运动估计和光流估计

一、运动估计 (一)运动场(Motion Field) 定义与物理意义 运动场是三维场景中物体或相机运动在二维图像平面上的投影,表现为图像中每个像素点的运动速度矢量。其本质是场景点三维运动(平移、旋转、缩放等&a…

介质访问控制——信道划分

什么是介质访问 介质访问(Medium Access)​ 是计算机网络中一种规则,用来解决 ​​“多台设备如何共享同一根网线/信道传输数据”​ 的问题。你可以理解为: 想象一条只能容一辆车通过的独木桥(网络中的网线、Wi-Fi信道…

ERP系统五大生产模式概述

制造业中,选择合适的生产模式是企业高效运营的关键。 以下是ERP系统支持的五大核心生产模式及其特点总结: 1. MTS(按库存生产) - 定义:先生产后销售,基于需求预测提前备货。 - 适用场景:需求稳定、标准化程度高的产品(如日用品、家电)。 - 优点:交货快、生产…

ubantu操作笔记

安装ssh服务 1.1 基本安装 sudo apt update sudo apt install openssh-server -y sudo systemctl start ssh sudo systemctl enable ssh 1.2 配置远程root登陆 # 0. 设置root密码 sudo passwd root # 1. 安装vim依赖 sudo apt-get install vim -y # 2. 编辑配置文件 s…

2-vim编辑器的安装和使用

一.常用工具介绍 前言: 我们想要编写c语言代码,可以使用linux系统提供的工具才能进行代码的编辑。代码编写后,我们还需要验证代码的书写正确。这就需要借助编译器来进行验证。linux系统为我们提供了比较好的开发工具。 vim编辑器&#xff…

小刚说C语言刷题——第16讲 switch语句

在日常生活中,我们经常会遇到多分支的情况。当分支较多时,我们可以用嵌套的if-else语句。但是这样会让结构显得混乱。这个时候我们可以考虑用switch语句。 1.语法格式 switch (表达式) { case 常量表达式1: 语句1; break; case 常量表达式…

使用 Python 连接 PostgreSQL 数据库,从 `mimic - III` 数据库中筛选数据并导出特定的数据图表

要使用 Python 连接 PostgreSQL 数据库,从 mimic - III 数据库中筛选数据并导出特定的数据图表,你可以按照以下步骤操作: 安装所需的库:psycopg2 用于连接 PostgreSQL 数据库,pandas 用于数据处理,matplot…

过孔的载流能力

PCB过孔的载流能力(即能安全承载的电流大小)主要与以下因素相关: 1. 过孔的尺寸 孔径(直径):孔径越大,横截面积越大,载流能力越强。 孔壁铜厚:电镀铜的厚度&#xff08…

(done) 并行计算 CS149 Lecture2 (现代多核处理器) (SIMD, 多核, 超标量, 数据预取, 超线程)

视频 url: https://www.bilibili.com/video/BV1du17YfE5G?spm_id_from333.788.videopod.sections&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 大佬笔记 url: https://zhuanlan.zhihu.com/p/8129089606 先看视频: Lecture 0 ~ 28min 的内容基本就是 c…