欢迎光临
我们一直在努力

C++负载均衡式在线OJ测试报告

请添加图片描述

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿 🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟 🌟🌟 追风赶月莫停留 🌟🌟 🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀 🌟🌟 平芜尽处是春山🌟🌟 🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅

🍋C++负载均衡式在线OJ测试报告

  • 🍑项目概述
    • 🍍项目背景
    • 🍍项目目标
    • 🍍业务场景
    • 🍍技术特点
  • 🍑测试环境
  • 🍑项目结构
  • 🍑测试用例
  • 🍑功能测试
    • 🍍手动测试
    • 🍍自动化测试
  • 🍑负载均衡测试
  • 🍑测试总结

🍑项目概述

🍍项目背景

本项目致力于打造一个类似 LeetCode 的系统,核心在于实现题目列表展示与在线编程功能

🍍项目目标

实现基础的在线编程环境,包括获取题目列表以及在线进行代码编写的功能 。提供稳定的代码编译与运行服务,能够处理远端提交的代码并返回格式化的运行结果 。实现负载均衡机制,以便在多个编译节点中合理调度请求 。完成两套版本的数据存储方案:基于文件版的在线OJ和基于 MySQL 版的在线OJ 。

🍍业务场景

客户端可以向系统请求展示所有的题目列表 。

客户端可以请求进入特定题目的详细编写界面 。

用户在前端页面完成代码编写后,可以向服务端提交代码 。

系统接收代码后,通过负载均衡机制选择合适的 compile_server 节点进行编译和运行,最终将判题结果返回给客户端 。

🍍技术特点

基础语言设施采用了 C++ STL 标准库以及 Boost 准标准库进行字符串切割 。

网络通信层面使用了 cpp-httplib 第三方开源网络库 。

数据处理与展示层面,使用了 jsoncpp 进行序列化与反序列化,以及 ctemplate 进行前端网页的渲染 。

系统设计融合了多进程、多线程以及自定义的负载均衡调度策略 。

数据持久化使用了 MySQL C connect 进行数据库交互 。

前端页面集成了 Ace 前端在线编辑器,并使用了基础的 html/css/js/jquery/ajax 技术 。

🍑测试环境

服务器环境:ubuntu(22.04) 云服务器 。 代码编辑器:vscode 。 数据库及可视化:MySQL 数据库,搭配 Mysql Workbench 工具使用 。 编译器:必须使用高版本的 gcc (建议是 gcc 7, 8 或 9),以确保 cpp-httplib 能够正常编译和运行 。

🍑项目结构

本项目整体采用 BS(Browser/Server)模式设计 。在宏观结构上,项目的核心被划分为三个主要模块 :

  • comm (公共模块):作为基础模块支撑其他业务 。
  • compile_server (编译与运行模块):这是一个独立的服务,专门负责接收远端提交的代码,利用子进程完成代码的编译与运行工作 。
  • oj_server (主控服务模块):负责与客户端的直接交互,处理获取题目列表、查看题目编写界面的请求,同时承担着对各个 compile_server 节点进行负载均衡选择的核心任务 。
  • 🍑测试用例

    在这里插入图片描述

    🍑功能测试

    🍍手动测试

  • 进入首页成功(输入正确访问地址) 在这里插入图片描述
  • 进入首页失败(访问地址有误) 在这里插入图片描述
  • 进入题目列表 在这里插入图片描述
  • 点击题目列表导航栏—首页(成功返回) 在这里插入图片描述
  • 在这里插入图片描述

  • 进入对应的答题界面 在这里插入图片描述
  • 提交错误代码 在这里插入图片描述
  • 提交正确代码
  • 在这里插入图片描述

    测试项测试结果
    首页是否显示正确 正确显示
    题目列表是否正常显示 正常显示
    导航栏功能是否成功跳转 成功跳转
    答题界面是否正确显示 正确显示
    代码提交功能是否正确 正常提交

    🍍自动化测试

  • 首页测试 在这里插入图片描述
  • class BlogList:
    url = ""
    driver = ""
    def __init__(self):
    self.url = "http://43.136.55.238:8080/"
    self.driver = BlogDriver.driver
    self.driver.get(self.url)
    #测试首页(登录情况下)
    def ListTestByLogin(self):
    time.sleep(2)
    #测试标题是否存在
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.content > h1")
    #测试二级标题是否存在
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.content > p")
    #测试按钮在不在
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.content > a")

  • 题目列表测试 在这里插入图片描述 在这里插入图片描述 题目列表不仅能正常显示,还能正常进入题目代码区
  • class BlogDetail:
    url = ""
    driver = ""
    def __init__(self):
    self.url = "http://43.136.55.238:8080/all_questions"
    self.driver = BlogDriver.driver
    self.driver.get(self.url)

    #详情页的测试
    def DetailTestByLogin(self):

    time.sleep(2)
    #检查标题
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.question_list > h1")
    #检查第一个小标题
    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)")
    #屏幕截图
    BlogDriver.getScreeShot()
    #点击进入题目:判断回文数
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.question_list > table > tbody > tr:nth-child(2) > td:nth-child(2) > a").click()
    #屏幕截图
    BlogDriver.getScreeShot()

  • 代码区测试 在这里插入图片描述 界面正常显示
  • class BlogDetail2:
    url = ""
    driver = ""
    def __init__(self):
    self.url = "http://43.136.55.238:8080/question/2"
    self.driver = BlogDriver.driver
    self.driver.get(self.url)

    #代码区的测试
    def DetailTestByLogin2(self):

    time.sleep(1)
    #检查题目
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.part1 > div.left_desc > h3")
    #检查题目内容
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.part1 > div.left_desc > pre")
    #检查代码区
    self.driver.find_element(By.CSS_SELECTOR, "#code > div.ace_scroller > div")
    # 检查是否有提交按钮
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.part2 > button")
    #屏幕截图
    BlogDriver.getScreeShot()

  • 提交代码按钮测试
  • 在这里插入图片描述

    class BlogDetail2:
    url = ""
    driver = ""
    def __init__(self):
    self.url = "http://43.136.55.238:8080/question/2"
    self.driver = BlogDriver.driver
    self.driver.get(self.url)

    #代码区的测试
    def DetailTestByLogin2(self):

    time.sleep(1)
    #检查题目
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.part1 > div.left_desc > h3")
    #检查题目内容
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.part1 > div.left_desc > pre")
    #检查代码区
    self.driver.find_element(By.CSS_SELECTOR, "#code > div.ace_scroller > div")
    # 检查是否有提交按钮
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.part2 > button")
    #屏幕截图
    BlogDriver.getScreeShot()
    self.driver.find_element(By.CSS_SELECTOR, "body > div > div.part2 > button").click()

    🍑负载均衡测试

    在这里插入图片描述 本项目实现的负载均衡主要是轮询的方式,遍历在线主机和离线主机,找到有空的机器。

    🍑测试总结

    在这里插入图片描述 本次测试成功搭建了基于 Python 和 Selenium 的 OJ 系统测试框架。通过手动指定驱动路径,彻底解决了驱动兼容性报错,并利用显式等待技术让脚本在题目详情页的运行更加稳定。同时,项目实现了自动化的截图留痕功能,能够按日期自动分类保存测试现场,极大提升了排错效率。项目的核心功能已满足上线标准,但项目本身还具有较大的提升空间。

    关于本项目如果有不足或者遗漏,欢迎大家指正,谢谢!!!

    请添加图片描述

    请添加图片描述

    赞(0)
    未经允许不得转载:171主机测评 » C++负载均衡式在线OJ测试报告
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址