朋友们、伙计们,我们又见面了,本期来给大家带来关于在线OJ项目的测试报告,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!
C 语 言 专 栏:C语言:从入门到精通
数据结构专栏:数据结构
个 人 主 页 :stackY、
C + + 专 栏 :C++
Linux 专 栏 :Linux
目录
1. 项目介绍
在线OJ项目我主要是通过模仿牛客、LeetCode等在线OJ平台自主实现的一个刷题网站,虽然目前里面没有多少题目,但是后面会慢慢添加一些比较有意思的题目;
我们这个项目主要实现的功能就是在线判题:
我们点击任意的题目列表,就可以跳转到题目的具体描述页面;
在这个页面我们可以对题目进行阅读并写出对应的代码然后点击提交,并得到代码运行的结果;
项目源码:https://gitee.com/yue-sir-bit/load-balancing-type---oj
项目博客:https://blog.youkuaiyun.com/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 sys from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service class 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/当前日期/调用函数名-当前具体日期.png def 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 time from selenium.webdriver.common.by import By from common.Utils import OJDriver class OJListQuestions: url = "" driver = "" def __init__(self): self.url = "http://124.70.16.162:8080/all_questions" #题目列表页url self.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. 性能测试
性能测试对四个接口进行了测试,分别是首页、题目列表页、指定题目、提交代码接口;
响应时间表:
吞吐量表:
在线OJ系统在并发数达到1200时会崩溃,在并发数到1000时可以稳定运行60秒;
10. 测试结论
本次项目测试通过(已经测试完成的,还有由于设备原因还有未测试的);
项目开发耗时一周,项目测试耗时2天(包含测试报告总结)。


















1406

被折叠的 条评论
为什么被折叠?



