如何讓自動化測試框架更自動化?

一、引言
?對于大廠的同學來說,接口自動化是個老生常談的話題了,畢竟每年的MTSC大會議題都已經能佐證了,不是大數據測試,就是AI測試等等(越來越高大上了)。不可否認這些專項的方向是質量智能化發展的方向,但是凡事都遵循2/8定律,80%的從事軟件測試的同學或許對這些并不感冒,因為大部分測試同學分布于中小廠,而他們大多停留在如何更好更快地進行接口自動化的階段。

小廠質量團隊地位低,在團隊中發言分量輕,項目中往往處于劣勢,項目的測試時間不能保證,更別提搞什么高大上的質量專項了,能把接口自動化測試做好就是大事一件,節省不少時間了。

因此,聊聊接口自動化還是非常有必要的。

二、“JMeter式”的自動化設計思路
毫無疑問,聊起接口自動化,大家可能第一時間聯想的就是自動化工具、自動化框架,例如JMeter、Postman等。這些工具學習成本小,掌握這些工具用法算是一條腿邁進了自動化測試大門。當然我建議大多數測試菜鳥先從工具的使用學起,話說“讀書百遍,其義自見”,用多了你也就理解了工具本身的設計(模式)精髓,為將來自己動手設計工具打好基礎。

我也曾設計過接口測試工具(參考文章),但是現在回過頭再看看開發出來的東西,或多或少有些JMeter的影子!是的比葫蘆畫瓢,JMeter已經在你腦海里先入為主了,你開發的接口測試工具有它的影子也不足為怪。換句話說,這或許是JMeter式的重復造輪子。

以我之前設計的測試工具為例,使用它就要動手搜集接口信息,動手組裝入參,動手寫斷言。。這TM就是和使用JMeter寫用例要做的事情一樣的嘛!

JMeter式的自動化測試,我認為是“高級”的手工測試。自研的測試框架寫用例往往需要代碼基礎,但是寫過的都知道,業務用例代碼重復度挺高的。而更重的在于用例的維護,畢竟大家寫的代碼風格迥異,維護的難度更大,甚至不如JMeter的用例維護來的方便。

意識到這個問題后,我也嘗試在github上搜索stars比較多的開源自動化工具,遺憾的是這些框架始終擺脫不了這個“設計套路”。例如

當然,說上面這些并非不建議大家開發接口自動化測試框架,自研的接口測試框架同樣有很多優點。

測試工具開發的測試用例往往不易于維護,試想一下當你維護JMeter生成的各種JMX文件場景。

大量的測試用例可重用性差,例如登陸模塊,每個接口調用前都要獲取cookie,而登陸則是前置模塊,使用JMeter開發用例需要每個JMX文件都要包含登陸,重復度太高。

無法滿足自動化平臺訴求,短期內確實可以快速實現自動化,但是這些工具對于平臺非自動化能力的拓展成本較高,畢竟改動開源工具的成本比自研高很多。

使用開源工具不利于提升團隊在自動化技術方面的成長。自動化能力的提升離不開編程能力的提升,使用開源工具能提升工具學習使用能力,最終你的成長無外乎又掌握了一個測試工具的使用。

那么,如何擺脫JMeter式的傳統思路,用更多的自動化代替手工??

三、讓自動化框架更自動化
接口自動化的核心是什么?接口、數據、斷言。

正如上文說的,這也是我們手工重復度比較高的工作內容,也是痛點所在。

傳統的自動化用例設計,往往需要人工采集接口信息(例如抓包,然后寫腳本提取接口信息HTTP Type、Method、Request等),人工造入參數據等,這些重復度是極高的。更進一步來說,人工造入參數據更是痛中之痛,畢竟不同的業務需要構造的request內容是不同的。

那么如何自動化實現呢?

不妨大家先考慮我們是在哪里獲取的這些信息。例如接口信息,你是否有過通過開發者工具提取接口信息?是否有過解析Charles工具har文件提取接口信息?以及解析swagger等接口文檔工具。。。。然后通過提取的接口信息生成自動化框架所需的接口請求service。

但是,接口信息就在那里,為什么還要將其從一種載體中提取出來再轉化為另一種類型的接口信息。難道直接使用類似har文件、swagger的接口信息就不行嗎?當然是可以的。例如美團的Lego測試平臺。

可以直接解析其他接口測試工具文件里的接口信息,以下拉列表的方式供測試使用者選擇要寫用例的接口,當然該接口request、Method等信息要同步填充到對應的輸入框。這樣就省去手工輸入接口信息的時間。

剛剛說了,構造入參數據是痛中之痛?這部分如何自動化?

我的答案,入參數據從線上服務器日志里去取。試問,我們構造的數據難道有線上業務真實跑出來的數據更貼合我們要測試的業務嗎?當然沒有。

so,線上服務器的日志格式務必要規范化,這樣可以方便我們提取xx接口的請求數據。有條件的公司可能會有自己的分布式鏈路追蹤,這樣可以基于trace提取出某個接口的請求和響應的所有信息。

斷言怎么自動化?

其實這個的解法和第2個問題一樣,我們在從日志中提取接口信息的同時,肯定也是有xx request參數下的xx response相應信息,我們可以將此次的響應信息作為基準,下次相同的request再次請求的時候,得到的響應和基準響應做比較就行了。當然,這個其實也是流量回放的思路。

四、總結
本文是我對此前設計的一個測試框架的反思,當時設計框架的“上下文”(即團隊基建能力、以及自身的設計水平和負責的項目的業務架構等背景)和現如今所在的公司質量基建是有很大差別的(有時候很多想法的實現是需要一定基建能力支撐的)。在一定程度上,也算是站的更高,看的更遠吧。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

?

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42578.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

刷題(day02)

1、leetcode136.刪除鏈表的結點 給定單向鏈表的頭指針和一個要刪除的節點的值,定義一個函數刪除該節點。 返回刪除后的鏈表的頭節點。 示例 1: 輸入: head [4,5,1,9], val 5 輸出: [4,1,9] 解釋: 給定你鏈表中值為 5 的第二個節點,那么在調用了你的函數…

Windows圖形界面(GUI)-SDK-C/C++ - 應用程序結構

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> 鏈接點擊跳轉博客主頁 目錄 入口函數 窗口注冊 窗口創建 窗口顯示 窗口更新 消息循環 窗口過程 窗口銷毀 調試信息 示例代碼 入口函數 在Windows應用程序中,WinMain是主函數,作為應用程序…

網格化監控:Eureka與分布式服務網格的協同監控

網格化監控:Eureka與分布式服務網格的協同監控 引言 在微服務架構中,服務網格技術提供了一種有效的方式來管理和監控服務間的通信。Eureka作為Netflix開源的服務發現框架,雖然本身不直接提供服務網格的監控功能,但可以與服務網格…

設計模式探索:適配器模式

1. 適配器模式介紹 1.1 適配器模式介紹 適配器模式(adapter pattern)的原始定義是:將一個類的接口轉換為客戶期望的另一個接口,適配器可以讓不兼容的兩個類一起協同工作。 適配器模式的主要作用是把原本不兼容的接口&#xff0c…

【Python_GUI】thinker布局管理——place方法

place方法可以設置組件的大小以及組件在容器中的精確位置,其參數及含義如下: 參數含義X設置組件距離窗口左側的水平距離y設置組件距離窗口頂部的垂直距離width設置組件的寬度height設置組件的高度relx設置組件距離窗口左側的相對距離,范圍為…

c++初階學習----入門(上)

大家好啊。最近學習了一點關于c的知識。這不就迫不及待的來與大家分享了嘛。但我這也是現學現賣所以咧。有很多遺落甚至不對的地方希望大家可以在評論區里面指出來。這樣也可以增加大家對知識的鞏固。 c語言與c的聯系 不知道大家看到c會不會不由自主的聯想到C語言啊。畢竟都是…

手機自帶錄屏在哪?6個軟件教你快速進行手機錄屏

手機自帶錄屏在哪?6個軟件教你快速進行手機錄屏 手機自帶的錄屏功能可以讓你輕松錄制屏幕上的內容,記錄游戲過程、制作教程或捕捉其他重要時刻。不同品牌的手機可能在不同位置提供錄屏功能。以下是一些常見的手機品牌及其錄屏功能位置,以及一…

【康復學習--LeetCode每日一題】724. 尋找數組的中心下標

題目: 給你一個整數數組 nums ,請計算數組的 中心下標 。 數組 中心下標 是數組的一個下標,其左側所有元素相加的和等于右側所有元素相加的和。 如果中心下標位于數組最左端,那么左側數之和視為 0 ,因為在下標的左側不…

運動愛好者的新選擇:哈氪聆光氣傳導耳機,輕巧又安全

平時不管是漫步街頭、騎行穿梭,還是乘坐公共交通時,我總是喜歡佩戴耳機,借此隔絕外部的喧囂,享受音樂的樂趣。在戶外使用耳機,我更傾向于選擇氣傳導耳機,它們更符合我的需求,因為這種耳機能讓我…

優雅下線的藝術:Eureka服務管理深度解析

優雅下線的藝術:Eureka服務管理深度解析 引言 在微服務架構中,服務的動態注冊與發現是保證系統高可用性的關鍵。Eureka作為Netflix開源的服務發現框架,提供了服務注冊與發現的基本功能。然而,服務在下線時如何做到"優雅&qu…

每日一編程,早點拿offer

計算字符串最后一個單詞的長度,單詞以空格隔開 輸入描述: 輸入一行,代表要計算的字符串,非空 輸出描述: 輸出一個整數,表示輸入字符串最后一個單詞的長度。 輸入:hello world輸出&#xff1a…

kubernetes集群證書過期問題解決

kubernetes集群證書過期問題解決 問題描述檢查證書是否過期更新證書master節點操作node節點操作 問題描述 K8S 各個組件需要與 api-server 進行通信,通信使用的證書都存放在 /etc/kubernetes/pki 路徑下,kubeadm 生成的證書大部分默認有效期為 1 年&…

SECS/GEM快速完成半導體設備通訊

金南瓜幫助國內大量從事半導體前道設備開發研制、生產的設備廠商,通過快速提供穩定可靠的SECS/GEM、GEM300產品,為客戶在激光退火、濕法設備(清洗、鍍膜等)、離子注入、MOCVD、PVD等客戶專注于核心工藝提升,提升企業的…

`CyclicBarrier` 是 Java 中的一個同步輔助工具類,它允許一組線程相互等待,直到所有線程都達到了某個公共屏障點(barrier point)

CyclicBarrier 是 Java 中的一個同步輔助工具類,它允許一組線程相互等待,直到所有線程都達到了某個公共屏障點(barrier point)。當所有線程都到達屏障點時,它們可以繼續執行后續操作。CyclicBarrier 的特點是可以重復使…

中介子方程五十

XXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXXhXiXXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXaXnXaXXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXXhXiXXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXaXnXaXXFXXuXXWXXuXXdXXrXXαXXuXpX…

Gen4Gen:多概念個性化圖像生成的數據驅動革新

個性化文本到圖像生成模型在用戶控制生成過程方面取得了重要進展。這些模型能夠通過少量訓練樣本學習并合成包含新穎個性化概念的圖像,例如用戶的寵物或特定物品。然而,現有技術在處理多概念個性化時存在局限性,尤其是在生成包含多個相似概念…

連接與隔離:Facebook在全球化背景下的影響力

在當今全球化的背景下,Facebook作為全球最大的社交網絡平臺,不僅連接了世界各地的人們,還在全球社會、經濟和文化中發揮著深遠的影響。本文將深入探討Facebook在全球化進程中的作用,以及其對個體和社會之間連接與隔離的雙重影響。…

【續集】Java之父的退休之旅:從軟件殿堂到多彩人生的探索

Java之父的退休之旅:從軟件殿堂到多彩人生的探索-CSDN博客 四、科技領袖退休后的行業影響 4.1 傳承與啟迪 Gosling等科技領袖的退休,為行業內部年輕一代提供了更多的發展機會和成長空間。他們的退休不僅意味著權力和責任的交接,更是一種精…

等保測評新趨勢:應對數字化轉型中的安全挑戰

隨著信息技術的飛速發展,數字化轉型已成為企業提升競爭力、優化運營效率的重要手段。然而,這一轉型過程中,企業也面臨著前所未有的安全挑戰。等保測評(信息安全等級保護測評)作為保障信息系統安全的重要手段&#xff0…

html5路由如何在nginx上部署(vite+vue3)

我們知道前端常用的有Hash 模式和html5模式的路由,hash模式在nginx上部署不需要額外的操作,而html5模式則需要額外設置,這里介紹下如何在nginx根地址(location / {})下部署和在非根地址上(location /admin{…