自動化測試工具(基於WordCount做業)

本自動化測試的程序用於自動化測試WordCount做業,採用Java開發(基於jdk1.8+),基於Maven來管理項目。java

支持的語言和開發進度

語言 進度
Java 已測試並投入運行
C++ 開發完畢,待測試
Python 開發中
NodeJS 待開發

實現的功能

克隆項目

從指定倉庫克隆項目,因爲訪問Github的網絡常常不穩定,也支持咱們先預備好項目的倉庫,不從Github實時下載。git

生成測試數據

  • 能夠生成指定長度的隨機ASCII碼字符串
  • 能夠將咱們指定長度的測試數據寫入指定位置的指定數量的文本文件中,這些文本文件將做爲後續的測試用例文件。

編譯

這裏的編譯和如下的運行都是有以下兩個前置要求:github

  1. 做業中必須明確要求入口文件的文件名是什麼,以Java爲例,就是Main方法所在的類文件的文件名是什麼,以WordCount做業爲例,咱們要求學生的主函數必須定義在src目錄下一個名叫WordCount.java文件中,由於這樣咱們才知道要運行哪一個文件來執行測試用例。
  2. 助教在本身機器上運行的時候,必需要有對應語言的編譯和運行的環境且要規定好一致的語言版本。不然編譯這一關會有不少問題致使沒法運行學生的代碼。

編譯時候會設置對應的超時時間,不一樣的語言能夠設置不同的編譯超時時間,以Java爲例,默認編譯超時時間是5秒鐘bash

運行

見編譯部分提到的兩點要求。服務器

運行的時候也會設置對應的超時時間,不一樣的語言針對不同的測試用例能夠設置不同的運行時間,超過這個時間,會直接將學生這個用例的耗時數設置爲-2,-2表示耗時的記錄。網絡

評分

  • 每一個用例的得分以及彙總得分
  • 執行每一個用例的耗時

注:咱們統計的耗時是運行部分的耗時,不包括編譯的耗時。多線程

導出結果到CSV

  • 分數
  • 耗時
  • Git提交記錄
    • 提交次數
    • 每次提交的commit信息

效果預覽

其中:函數

StudentNo: 表示學生學號的後五位測試

Score:彙總分數,即Score1 + Score2 + … + Scorei 之和線程

Scorei:表示第i個用例的得分

Timei:表示第i個用例的耗時

commit_times:表示每一個學生的提交次數

commit_details:表示每一個學生的提交信息,JSON格式

使用方式

目前沒有將項目打包,仍是以源碼的方式運行,主要是方便調試和改代碼,後續會完善打包運行。

咱們必須先規定好測試代碼的位置,以WordCount項目爲例,全部同窗的代碼都以學號命名收集到以下倉庫中:

https://github.com/kofyou/PersonalProject-Java.git

目錄結構爲:

PersonalProject-Java

  • 學號1
    • src
      • WordCount.java
  • 學號2
    • src
      • WordCount.java
      • Lib.java
  • 學號3
    • src
      • WordCount.java

克隆代碼

git clone https://github.com/GreyZeng/WordCountAutoTest.git

克隆完畢後,用Jetbrains IDEA 打開文件WordCountAutoTest,而且在WordCountAutoTest下新建download文件夾,以下圖:

在download文件夾下新建一個judge文件夾,裏面放對數程序,這個對數程序的目的就是,把測試用例的答案算出來,

這個對數程序要保證正確!!!最好多個助教一塊兒作一下題目,而後互相驗證沒問題了,在把對數程序放上去

PS:對數程序請不要提交到Github,防止學生抄襲!

如上圖,我放了一個對數程序WordCount.java

關注並確認Client.java類中的以下幾個參數,其餘參數能夠參考註釋進行修改,通常不須要改:

參數名稱 備註
NEED_CLONE 設置爲true,會不斷重試clone代碼倉庫
CLONE_URL 改爲對應的地址,例如:https://github.com/kofyou/PersonalProject-Java.git
JUDGE_PROGRAM 改爲對數程序的絕對路徑地址,例如:"D:\git\WordCountAutoTest\download\judge"
TESTCASE_NUM 默認測試用例的數量,默認10個
TEXT_MIN_LENGTH 測試文本的最少字符數,默認100個字符
TEXT_MAX_LENGTH 測試文本的最大字符數量,默認1000000個字符

修改好配置參數後,直接在IDEA裏面Run Client.java,等待執行完畢便可。

說明:運行的時候,會在以前download的目錄以當前時間戳建一個文件夾,這樣作的目的是保證每次運行不會有文件夾衝突。

執行完畢後,按以下目錄找須要的信息:

目錄 說明
download/時間戳/cases/ 存放用例的位置
download/時間戳/answers/ 存放答案的位置
download/時間戳/PersonalProject-Java/ 項目目錄
download/時間戳/PersonalProject-Java/學號/output/ 每一個學號的學生的執行用例的輸出文件夾
download/時間戳/result/result.csv 本次測評的csv文件
WordCountAutoTest\log 日誌記錄文件夾

待完善的功能

  • Git的每次簽入詳情,代碼的修改和新增狀況。
  • 代碼雷同部分,嘗試接入moss
  • 防止代碼裏面修改服務器文件,惡意運行多線程 ,參考Judger

源碼地址

Github

相關文章
相關標籤/搜索