top of page

JYAutoTester - 量測自動化軟體

已更新:2023年1月30日

量測自動化的場景最常出現在(1)設計開發驗證以及(2)產品品質驗證的場景中。隨著產品複雜度提升以及測試需求變得更多元, 測試過程中所需要的設備更多元,測試的判定結果條件也更複雜。簡儀科技設計了JYAutoTester的自動化測試軟體, 希望用最輕量化的解決方案提高開發者、驗證人員的效率。



JYAutoTester具備以下幾個特點:

  • 同一套UI應用在不同的測試需求

UI測試介面與使用到的硬體以及判定pass/fail的邏輯完全無關, 換句話說, 更換硬體或是更換邏輯都不需要對UI測試介面重新改寫

  • Text-in, Text-out 設計

軟體從設定檔讀取(1)硬體設定、(2)測試流程、(3)外部路徑等純文字資訊, 自動解析並動態加載到程式, 執行完畢後可以將結果匯出文字檔

  • 使用文字格式進行硬體控制操作以及排程設定

硬體控制採用Json格式後的文字進行傳輸控制, 意味控制也可以透過網路進行操作。排程的設定同樣採用Json格式的文字進行編排





操作步驟可以參考以下

設計概念

簡儀科技將兩個核心的程式獨立, 讓開發者自行完成其中客製的內容

  1. 硬體的控制操作程式

  2. 邏輯判定的程式

以上兩項的程式, 在開發者開發完畢之後, 即可透過文字設定檔的方式加載到JYAutoTester裡面, 並對其進行排程的設計跟操作。設定檔採用Json格式, 可讀性以及編輯方便性大幅提高。 不像其他的排程軟體, JYAutoTester的使用需要部份的C#軟體開發, 但也因此讓軟體能夠以最輕量化的方式達到測試的目標。

使用前準備

  • Visual Studio 或Visual Studio Code 開發環境

  • 具備基本C# 程式開發經驗

  • 在開發專案裡面新增 nuget package - MATSys

操作四步驟

1. 模組設計(Module Design)

"Module"代表在JYAutoTeser裡面可以被控制的最小操作單元, 例如量測儀器、馬達控制等。 設計過程只需要三個步驟就可以完成, 如下圖

  1. 將客製的類別繼承ModuleBase的抽象類

  2. 產生構造函數的重載, 不需要修改其中的內容

  3. 在客製化類別的方法上面, 新增一個[MATSysCommand]的屬性標記。(重要: 方法內的參數不能有ref 或 out, 如果有請用其他中介方法取代)

完成設計後, 此類別(Handler)便可以從設定檔中動態加載, 並且可以透過Json格式的文字信行方法的操作。以此類別(Handler)為例, DoSomething的方法可以透過以下格式的文字進行操作

{"Handler" : { "DoSomething": [1, "Hello"]}}

上述的文字中, "Handler"代表的是實例化後的暱稱(同個類別可以有多個實例, 需要用暱稱分辨), "DoSomething"則是類別中的方法, 而"[1,"Hello"]"則是此方法的參數。需要注意的是參數的格式也是Json格式。 方法的返回值則會用Json格式壓縮後回傳, 如果是void的話則回傳空字串。

2. 邏輯判定設計(Analyzer Design)

在JYAutoTester中, 方法的返回值會先存入一個"AnalyzingData"的實例中, 接下來會從Analyzer類別裡的方法進行分析與邏輯判定。邏輯判定的擴充以及內容可以由開發人員自行定義。更多延伸方法的說明, 可以參考微軟官網 範例如下

public static class WhatEverClassName 
{    
  public static bool LargerThan(this AnalyzingData data,double v)
  {        
    return JsonSerializer.Deserialize<double>(data.Value) > v;
  }      
  public static bool SmallerThan(this AnalyzingData data,double v)     
  {        
    return JsonSerializer.Deserialize<double>(data.Value) < v;
  }
  … 
}
	

如上方的程式碼, 定義了一個LargerThan的方法判定"AnalyzingData"實例中的值是否大於期望值, 返回的內容則為boolean。因此Analyzer的邏輯分析方法可以透過以下的文字實現

{"LargerThan": [ 0.2 ] }

3. 系統設定檔修改(System Configuration)

JYAutoTester所有的資訊都是從exe執行檔所在資料夾下的appsetting.json設定檔中獲取, 因此開發者可以直接透過編輯此檔案來切換測試的系統設定。 系統設定包含幾個類別

  • MATSys區段下的References

  • MATSys區段下的Modules

  • MATSys區段下的Runner

  • NLog

{   
  "MATSys": {
     "Modules": [  ],
     "Runner": {   }, 
     "References": {  }   
  },
  "NLog": { } 
}  

[References]

References存放的是需要動態加載的專案dll, 例如前兩點所述的Module和Analyzer的dll, 需要注意的是如果動態加載的dll有引用到其他dll的話, 也需要一併放在同個資料夾下。以下是新增完後的範例

"References": {
  “Modules": [ ".\\modules\\myModule.dll"],      
  “Analyzer": [".\\modules\\myAnalyzer.dll"], 
}
[Modules]

Modules下存放的是整個JYAutoTester需要加載的Module資訊, 其中Type是類型的名稱, 而Alias則是暱稱。暱稱是用來辨別不同實例, 必須設定不同的值。以下是兩個Module資訊的範例

"Modules": [
  {
    "Type": "Tester",
    "Alias": "Tester"
  },
  {
    "Type": "Handler",
    "Alias": "Handler"
  }
]
[Runner]

Runner下存放的是排程的資訊, 請參考以下章節

[NLog]

JYAutoTester在ModuleBase中嵌入了工作日誌的開源模組NLog, 如果遇到需要除錯紀錄的時候可以透過修改此區段的內容完成紀錄。更多NLog的資訊可以操考連結


4. 排程內容修改(TestScript Editing)

進入編輯排程之前, 先以下圖介紹JYAutoTester的排程結構

[排程結構]


TestScript包含三個Group, 分別是"Setup", "Test", 以及"Teardown", 其中Setup和Teardown只會執行一次, 可以作為整個系統初始化以及結束節釋放的排程操作。 每一個Group包含一個或多個"TestItem"實例, TestItem就是每個測試項目的最小單元, 每個TestItem在執行過程中, 會先執行獲取資料的"Executer"功能, 接著將返回的資訊使用"Analyzer"功能判定Pass/Fail。TestItem同時支援Retry/Loop的SubTestItem功能。Retry是測試直到Pass或是達到次數上限後返回, 而Loop則是測試直到Fail或達到次數上限後返回。


[排程執行階段事件]

整個TestScript執行過程中有不同階段的事件可以使用, 可以參考下圖。



[排程編輯]

在MATSys區段中的Runner區段, 存放了所有排程的資訊, 請參考下方範例

"Runner": {      
  "Type": "ScriptRunner",  
  "RootDirectory": ".\\scripts",     
  "Setup": [ { "Script": "setup.ats" } ],      
  "Test": [ { "Script": "main.ats" } ],      
  "Teardown": [ { "Script": "teardown.ats" } ]    
}

其中"Type"的部分不能變更, "RootDirectory"設定的是排程文字檔案的資料夾路徑。而"Setup","Test","Teardown"存放的則是三個不同Group的排程文字檔(Group介紹參考此) 設定的方式有分成兩種, 第一種是從檔案讀取, 另一種則是直接設定Executer以及Analyzer內容, 分別介紹如下

  • 從檔案讀取(設定"Script")

以上述範例的此行為例:

	{"Script": "main.ats" }

JYAutoTester會從目錄中讀取main.ats的檔案, 並將其中的內容轉換成TestItem, ats檔案的內容範例可參考下方

[
   {
     "Executer": { "Tester": { "MeasureVoltage": [] } },
     "Analyzer": { "Between": [ 2, 5 ] },       
   }
]

  • 直接編輯測試內容(設定Executer和Analyazer)

{
  "Executer": { "Tester": { "PowerInBand": [] } },    
  "Analyzer": { "LargerThan": [ 0.2 ] },    
  "Retry": 3  
}

區段Executer存放的是控制Module的指令, 而區段Analyzer存放的則是判定邏輯的指令。如果沒有Analyzer區段的話, 此測試項目會以Skip做為測試結果輸出。TestItem可以額外增加Retry/Loop的標記。


Comments


©JYTEK Taiwan 2023

bottom of page