為什麼 TestMace 比 Postman 更好

為什麼 TestMace 比 Postman 更好

大家好,就到這裡啦 測試錘! 也許很多人認識我們是從 我們的 以前的 用品。 對於那些剛加入的人:我們正在開發一個 IDE 來使用 TestMace API。 在將 TestMace 與競爭產品進行比較時,最常見的問題是“你與 Postman 有何不同?” 我們決定是時候對這個問題給出詳細的答案了。 下面我們概述了我們的優勢 郵差.

分裂成節點

如果您使用 Postman,那麼您就會知道請求介麵包含所有必要的功能。 有腳本、測試,實際上還有請求本身。 這對於初學者來說比較容易,但是在大場景下這種方式並不靈活。 如果您想建立多個查詢並對它們執行聚合該怎麼辦? 如果您想在沒有請求的情況下執行腳本或連續執行多個邏輯上獨立的腳本怎麼辦? 畢竟,將測試與常規實用程式腳本分開是個好主意。 此外,「將所有功能新增至一個節點」的方法無法擴展 - 介面很快就會變得過載。

TestMace 最初將所有功能劃分為不同類型的節點。 您想提出請求嗎? 這是給你的 請求步驟 節點你想寫一個腳本嗎? 這是給你的 腳本 節點需要測試嗎? 請 - 斷言 節點哦,是的,你仍然可以把這整件事包起來 節點所有這些都可以輕鬆地相互結合。 這種方式不僅非常靈活,而且按照單一職責的原則,可以讓你只使用當前真正需要的東西。 如果我只想發出請求,為什麼需要腳本和測試?

人類可讀的項目格式

TestMace 和 Postman 之間在儲存方式上存在概念上的差異。 在 Postman 中,所有請求都儲存在本機儲存中的某個位置。 如果需要在多個使用者之間共用請求,那麼您需要使用內建同步。 事實上,這是一種普遍接受的方法,但並非沒有缺點。 資料安全怎麼樣? 畢竟,一些公司的政策可能不允許第三方儲存資料。 然而,我們認為 TestMace 可以提供更好的東西! 這項改進的名稱是「人類可讀的項目格式」。

首先,在 TestMace 中,原則上有一個「專案」實體。 該應用程式最初開發時著眼於在版本控制系統中儲存專案:專案樹幾乎一對一地投影到檔案結構上,使用 yaml 作為儲存格式(沒有額外的括號和逗號),並且每個節點的檔案表示在帶有註釋的文檔中進行了詳細描述。 但在大多數情況下,您不會看那裡 - 所有欄位名稱都有邏輯名稱。

這為用戶帶來了什麼? 這使您可以使用熟悉的方法非常靈活地改變團隊的工作流程。 例如,開發人員可以將專案儲存在與後端相同的儲存庫中。 在分支中,除了更改程式碼庫本身之外,開發人員還可以更正現有的查詢腳本和測試。 將變更提交到儲存庫(git、svn、mercurial - 無論您最喜歡什麼)後,CI(您最喜歡的,不是由任何人強加的)啟動我們的控制台實用程式 testmace-cli,並將執行後收到的報告(例如,junit 格式,testmace-cli 中也支援)傳送到相應的系統。 而上述的安全問題也不再是問題。

正如您所看到的,TestMace 並沒有強加其生態系統和範式。 相反,它很容易融入既定的流程。

動態變數

TestMace 遵循無程式碼概念:如果問題可以在不使用程式碼的情況下解決,我們會嘗試提供這個機會。 使用變數正是大多數情況下無需編程即可完成的功能。

範例:我們收到了來自伺服器的回應,我們希望將部分回應儲存到變數中。 在 Postman 中,在測試腳本(這本身很奇怪)中,我們會寫如下內容:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);

但在我們看來,為這樣一個簡單且頻繁使用的場景編寫腳本看起來是多餘的。 因此,在 TestMace 中,可以使用圖形介面將一部分答案指派給變數。 看看它是多麼簡單:

為什麼 TestMace 比 Postman 更好

現在,隨著每個請求,這個動態變數都會更新。 但您可以反對,認為 Postman 方法更靈活,不僅允許您進行分配,還允許您執行一些預處理。 以下是修改前面範例的方法:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));

好吧,為此目的 TestMace 有 腳本 節點,涵蓋了這種場景。 為了重現前面的情況,但已經由 TestMace 執行,您需要在請求後建立腳本節點,並使用以下程式碼作為腳本:

const data = tm.currentNode.prev.response.body.data;
tm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));

正如您所看到的,節點的組合在這裡也發揮了很好的作用。 對於如上所述的簡單情況,您可以簡單地指派表達式 ${crypto.MD5($response.data)} 透過 GUI 創建的變數!

透過 GUI 創建測試

Postman 允許您透過編寫腳本來建立測試(對於 Postman,這是 JavaScript)。 這種方法有很多優點——幾乎無限的靈活性、現成解決方案的可用性等。

然而現實往往是這樣的(我們不是這樣,生活就是這樣),一個測試人員沒有程式設計能力,但他現在就想為團隊帶來好處。 對於這種情況,請遵循無程式碼概念,TestMace 允許您透過 GUI 建立簡單的測試,而無需編寫腳本。 例如,建立比較值是否相等的測試的過程如下所示:

為什麼 TestMace 比 Postman 更好

然而,在圖形編輯器中建立測試並不能消除這種可能性 在程式碼中編寫測試。 所有相同的庫都在這裡,就像在腳本節點中一樣,並且 灣仔 用於編寫測試。

當某個查詢甚至整個腳本需要在專案的不同部分執行多次時,經常會出現這種情況。 此類請求的一個範例可以是自訂多階段授權,將環境帶到所需的狀態等。 一般來說,就程式語言而言,我們希望擁有可以在應用程式的不同部分中重複使用的函數。 在 TestMace 中,函數由下列指令執行 鏈接 節點它非常容易使用:
1) 建立查詢或腳本
2)建立Link類型的節點
3) 在參數中,指定指向第一步驟中建立的腳本的鏈接

在更進階的版本中,您可以指定將腳本中的哪些動態變數傳遞到相對於連結的更高層級。 聽起來很混亂? 假設我們建立了一個名為 建立貼文,其中動態變數被分配給該節點 postId。 現在在連結節點中 建立貼文連結 您可以明確指定變數 postId 分配給祖先 建立貼文連結。 這種機制(同樣是在程式語言中)可用來從「函數」傳回結果。 總的來說,這很酷,DRY 正在全面展開,而且沒有一行程式碼損壞。

為什麼 TestMace 比 Postman 更好

至於Postman,有一個重複使用請求的功能請求 自2015年起懸掛,而且似乎還有 一些提示他們正在解決這個問題。 在目前的形式下,Postman 當然有能力改變執行線程,理論上這可能使得實現類似的行為成為可能,但這更像是一種骯髒的駭客行為,而不是真正有效的方法。

其他差異

  • 更好地控制變數的範圍。 Postman 中可以定義變數的最小範圍是集合。 TestMace 允許您為任何查詢或資料夾定義變數。 在 Postman 中,共享集合允許您僅匯出集合,而在 TestMace 中,共享適用於任何節點
  • TestMace 支持 可繼承的標頭,預設可以替換為子查詢。 郵差對此有一些看法: 任務,甚至已經關閉,但它是作為解決方案提供的... 使用腳本。 在 TestMace 中,這一切都是透過 GUI 配置的,並且有一個選項可以選擇停用特定後代中繼承的標頭
  • 撤銷重做。 不僅在編輯節點時有效,而且在移動、刪除、重新命名和其他更改項目結構的操作時也有效
  • 與 Postman 不同,附加到請求的文件成為項目的一部分並與其一起存儲,同時完全同步。 (是的,您不再需要每次啟動時手動選擇檔案並將其傳輸給存檔中的同事)

已經推出的功能

我們無法抗拒在下一個版本中揭開保密面紗的誘惑,尤其是當功能非常美味並且已經在進行預發布完善時。 那麼,我們見面吧。

功能

如您所知,Postman 使用所謂的動態變數來產生值。 他們的名單令人印象深刻 絕大多數函數都用於產生假值。 例如,要產生隨機電子郵件,您需要撰寫:

{{$randomEmail}}

但是,由於這些是變數(儘管是動態的),因此它們不能用作函數:它們不可參數化,因此無法從字串中獲取雜湊值。

我們計劃為 TestMace 添加「誠實」功能。 在 ${} 內部不僅可以存取變量,還可以呼叫函數。 那些。 如果您需要產生臭名昭著的假電子郵件,我們將簡單地寫

${faker.internet.email()}

除了它是一個函數之外,您還會注意到可以呼叫物件上的方法。 我們擁有一組邏輯分組的對象,而不是一大堆動態變數的平面列表。

如果我們想計算一個字串的雜湊值怎麼辦? 容易!

${crypto.MD5($dynamicVar.data)}

您會注意到您甚至可以將變數作為參數傳遞! 此時,好奇的讀者可能會懷疑出了什麼問題...

在表達式中使用 JavaScript

……而且有充分的理由! 當函數的需求形成時,我們突然得出結論:有效的javascript應該用表達式來寫。 所以現在你可以自由地寫如下表達式:

${1 + '' + crypto.MD5('asdf')}

所有這一切都無需腳本,就在輸入欄位中!

至於Postman,在這裡你只能使用變量,當你嘗試編寫最輕微的表達式時,驗證器會咒罵並拒絕計算它。

為什麼 TestMace 比 Postman 更好

進階自動完成

目前 TestMace 有一個標準的自動完成功能,如下所示:

為什麼 TestMace 比 Postman 更好

這裡,除了自動完成行之外,還指示該行屬於什麼。 此機制僅適用於用方括號 ${} 括起來的表達式。

如您所見,已新增視覺標記來指示變數的類型(例如字串、數字、陣列等)。 您也可以變更自動完成模式(例如,您可以選擇使用變數或標題自動完成)。 但這還不是最重要的!

首先,自動補全功能甚至可以在表達式中發揮作用(如果可能)。 它看起來是這樣的:

為什麼 TestMace 比 Postman 更好

其次,自動完成功能現在可以在腳本中使用。 看看它是如何工作的!

為什麼 TestMace 比 Postman 更好

將此功能與 Postman 進行比較是沒有意義的 - 自動補全僅限於變數、標頭及其值的靜態清單(如果我忘記了什麼,請修正我)。 腳本不會自動完成:)

結論

十月標誌著我們產品開發開始的一年。 在這段時間裡,我們做了很多事情,並且在某些方面趕上了競爭對手。 但無論如何,我們的目標是打造一個真正方便的 API 工具。 我們還有很多工作要做,以下是我們來年專案發展的粗略計劃: https://testmace.com/roadmap.

您的回饋將使我們能夠更好地瀏覽豐富的功能,您的支持給了我們力量和信心,讓我們相信我們正在做正確的事情。 恰巧今天對我們的專案來說是一個重要的日子——TestMace 發布的日子 ProductHunt。 請支持我們的項目,這對我們非常重要。 而且,今天我們的PH頁面有一個誘人的優惠,而且數量有限

來源: www.habr.com

添加評論