朋友們、伙計們,我們又見面了,本期來給大家帶來關于在線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天(包含測試報告總結)。
?
?