服務端接口自動化測試工具大全及適配環境解析

在互聯網時代,服務端測試已經成爲一個重要的產品保障手段,各對此公司實施的方法和技術也不一樣,本文咱們就來討論一下。

互聯網服務端接口自動化是各個公司都須要一部分業務,如何快速高效地完成接口測試呢?面試

 

以幫助你們實現高效的接口測試爲出發點,本文包含了我在互聯網接口測試領域的一些方法和心得,但願你們一塊兒討論和分享,內容包括但不只限於:算法

  • 互聯網服務端接口測試介紹;數據庫

  • 接口測試經常使用的工具、平臺、框架;編程

  • 接口測試的一些問題和實踐。瀏覽器

 

下圖是經典的測試金字塔,服務接口測試在中部,承上啓下,因而可知其重要性。緩存

 

 

 

互聯網服務端接口測試介紹安全

 

目前市場上有不少支持接口測試的工具,可以提升測試效率。可是讓你一天完成100個接口測試任務,你以爲可能嗎?服務器

 

你可能會說有工具就行,但不是全部工具都能支持你完成這個任務。下圖是我挑選的幾款工具:網絡

 

 

1. fiddler數據結構

 

fiddler是一個 HTTP 協議調試代理工具,Web和手機測試都會用到,同時也支持接口測試。後面我會專門介紹。

 

2. postman

 

它是 Google 開發的一個插件,安裝在 Chrome 瀏覽器上,能支持不一樣接口測試請求,能夠管理測試套件和自動化運行。弱點是自動化斷言功能不強大,不能和 Jenkins、代碼管理庫進行持續集成測試。

 

可是,它絕對是一個很好的半手工、半自動化測試工具。我通常在寫自動化接口測試用例,會打開 postman 進行輔助測試和 Debug,下文會有介紹。

 

3. wireshak

 

這是一款抓包工具,支持 TCP、UDP、HTTP 。若是作底層網絡數據測試,通常都須要用到它,可是用做接口測試,它就有點不友好。由於刷新數據太快,很差定位每一個操做對應的接口。因此,在這裏就不過多介紹該工具。

 

 

4. soupUI

 

這是一款提供有開源免費版和企業收費版的軟件。在國外的接口測試中,使用較多。該工具可以支持接口自動化測試和接口性能測試,也支持和 Jenkins 作持續集成測試。瞭解一下就能夠,能夠下載一個社區免費版,作一個 Demo 試試。

 

 

5. Java 代碼作接口測試

 

爲何要用代碼作接口自動化測試呢?一些工具功能是有限制,不少公司須要一些特定的功能,工具不支持,只好用代碼進行開發。通常用 Java 作自動化測試,主要利用 httpclient.jar 包,而後利用 JUnit 或者 TestNG 這樣的單元測試工具,進行測試用例的開發,接着在 Jenkins 上建立一個 job,進行持續集成測試。

 

 

6. Python 代碼作接口測試

 

和 Java 同樣,用 Python 作接口測試,能夠利用一個功能強大的第三方庫 Requests,它能方便地建立接口自動化用例。Python 下的單元測試框架,通常採用unittest。生成測試報告,通常選擇 HTMLTestRunner.py。一樣,能夠結合 Jenkins 作持續集成測試。

 

 

7. LoadRunner

 

不要覺得 LoadRunner 只能作性能測試,它一樣能夠作接口自動化和接口壓力測試。只是咱們不少人,不會利用 LoadRunner 的函數,設計接口測試用例。

 

 

8. JMeter

 

JMeter 同 LoadRunner 同樣,都以性能測試出名,通常用 JMeter 也是作接口性能測試。例如 Java+Jmeter+Ant+Jenkins 作接口性能監聽測試。JMeter 如何作接口測試,能夠查閱官方文檔和 CSDN 博客專欄《JMeter 性能測試》 。

 

上面說了這麼多工具,基本覆蓋了接口功能測試、接口自動化測試、接口性能測試。這裏提一下,推薦 Python 語言下的一個性能測試工具 Locust。本身百度並安裝下,很簡單的 Web 界面,做爲一個輕量級的協程測試工具,感受很不錯。

 

服務端測試也應該具有一些計算機基礎知識的能力,例以下面幾個領域的知識。

 

 

操做系統和網絡

 

互聯網裏最大的應用場景就是高併發、高可用、高性能的線上服務,作這類系統實際上考驗的是咱們對操做系統和網絡的理解。任何一個系統最後都是運行在操做系統之上的,也都運行在網絡之上的,包括分佈式系統,因此,須要在操做系統和網絡上必定要有較深的造詣,尤爲是高併發和高性能。

 

若是對操做系統原理一無所知,基本很難理解什麼是併發和鎖,很難理解高性能用什麼指標來衡量,以及怎麼實現高併發、高可用和高性能。

 

對於操做系統,咱們必須瞭解 CPU 的多核體系結構、內存分頁和緩存技術、磁盤 IO 的優略和網卡 IO 的狀況,而且要理解計算機的工做原理,會根據這些指標粗略評估服務可以輸出的性能。

 

對於網絡,必須理解理論上定義的7層模型,瞭解 TCP/IP 的三次握手。另外咱們在分佈式服務架構中多數使用應用層的HTTP協議,因此還須要對 HTTP 協議有很深入的理解。

 

 

算法和數據結構

 

應用層面的小夥伴們可能對算法和數據結構的應用比較少,即便有應用也比較簡單,可是算法能力表明了一我的的邏輯思惟和思考能力,能把各類基礎算法理解的人智商都不會低,可以把程序寫好的人邏輯思惟必定很強。

 

通常在面試小夥伴的時候,我都會考察一下他會不會高級算法,例如遞歸、剪枝、貪婪、動態規劃。仔細想一下就會知道,會動態規劃的人,他不是勤奮的就是聰明的,不管哪同樣,你都有錄取他的衝動。

 

 

線上高併發服務方向

 

線上高併發服務是個強需求,不管你開發哪類應用和網站,線上服務都是必須的,有了服務纔有了功能,纔有了產品,我也主要從事互聯網後臺高併發服務的設計與實現。

 

解決高併發服務其實並無那麼難,這些年高併發服務的技術棧也已經沒有了門檻,只要投入足夠的成本,構建可伸縮的服務不是問題,達到多大的 TPS 也都不是問題,核心思想就是「分而治之,大而化下,小而化了」。

 

咱們使用的緩存抗讀、消息隊列抗寫、數據庫分庫分表、緩存分片、應用層伸縮、減小競爭、7層負載均衡、三四層負載均衡等,以及 CDN、DNS 輪訓等等,這一切都是「分而治之」的思想。

 

 

大數據方向

 

大數據是最近比較火的方向,大小公司都在使用大數據技術。大公司使用大數據分析技術從衆多數據中分析出業務模型,得出有價值的結果,來幫助企業制定市場和銷售策略,中小公司多數使用大數據出報表和作風控等。

 

全部的大數據技術的根基都來自 Mapreduce、GFS 和 Bigtable 這三篇論文,推薦你們閱讀這些論文:

  • MapReduce: Simplifed Data Processing on Large Clusters

  • The Google File System

  • Bigtable: A Distributed Storage System for Structured Data

 

理解了這些基礎技術原理,再去學習 Hadoop、HBase、Storm、Spark、Cassandra、MongoDB、ES 等都不是問題。

 

 

 

接口測試經常使用的工具、平臺、框架

 

自動化測試能夠快速自動完成大量測試用例,節約巨大的人工測試成本;同時須要擁有專業開發技能的人才能完成開發,且須要大量時間進行維護(在需求常常變化的狀況下),因此大部分具備很好開發技能的人員不是很願意編寫自動化用例。但因爲軟件規模的高速增加,人力資源的逐步稀缺,自動化測試已經是勢在必行。

 

下面是我精選的8個 Java 測試工具和框架。

 

1. Arquillian

 

Arquillian 是一個基於 JVM 高度創新性和可擴展的測試平臺,容許 Java 開發人員輕鬆建立自動化集成、功能和驗收測試。Arquillian 容許在運行時間執行測試。能夠用來管理單個或多個容器的生命週期,捆紮測試用例、從屬類和資源。它還可以部署歸檔到容器中,在容器中執行測試、捕獲結果,並建立報告。它集成了常見的測試框架,如 JUnit 四、TestNG 5,並容許使用現有的 IDE 發佈測試,而且因爲模塊化的設計使其可以運行 Ant 和 Maven 測試插件。

 

2. JTest

 

JTest 也被稱爲「Parasoft JTest」,是一款由 Parasoft 公司推出的自動化 Java 軟件測試和靜態分析軟件。JTest包含的功能有:單元測試狀況下的生成和執行、靜態代碼分析、數據流的靜態分析、度量分析、迴歸測試、運行時錯誤檢測。此外,它還具有了同行代碼審查流程自動化和運行時錯誤檢測的功能,如競態條件、異常、資源和內存泄漏、安全漏洞攻擊。

 

3. The Grinder

 

The Grinder 是一個 Java 負載測試框架,運行簡單,且其分佈式測試採用了許多負載注入機器。只要有 Java API,The Grinder 就能夠進行負載測試。這包括 HTTP Web 服務器、SOAP 和 REST Web 服務器、應用程序服務器,以及用強大的 Jython 和 Clojure 語言寫的包含了自定義協議的測試腳本。

 

The Grinder 的 GUI 控制檯容許對多個負載注射器進行監測和控制,並自動管理客戶端鏈接和 Cookies、SSL、代理感知和節流鏈接。 The Grinder 在 BSD 風格的開源許可下是免費的。 官方網站:Downloading The Grinder

 

4. TestNG

 

TestNG 是一款爲 Java 編程語言設計的測試框架,靈感來自於 JUnit 和 NUnit。TestNG 可覆蓋範圍更廣的測試類型,如單元、功能性、端到端、一體化等。它還有一些新的功能,可使之更強大和更容易使用,如註解、具有大型線程池各類策略的運行測試、多線程的代碼測試、靈活的測試配置、參數化數據驅動的測試支持等等。TestNG 支持各類各樣的工具和插件,好比 Eclipse、IDEA、Maven 等等。

 

5. JUnit

 

JUnit 是一個爲 Java 編程語言設計的單元測試框架。JUnit 爲測試驅動開發框架的發展發揮了重要做用。它是如今被統稱爲 xUnit 的單元測試框架你們庭的組成成員之一,源於 SUnit。在編譯時,JUnit 能夠鏈接做爲 JAR,用於編寫可重複的測試。

 

6. Powermock

 

PowerMock 是一款支持單元測試源代碼的 Java 框架。雖然 PowerMock 能夠做爲 Mocking 框架,例如做爲 Mockito 和 EasyMock 的擴展而運行,但它還具有更強大的能力。PowerMock 利用自定義的類加載器和字節碼操縱器,來確保靜態方法的模擬、靜態初始化的刪除、函數構造、最終的類和方法以及私有方法。它的主要目的是經過最少的方法和註釋來擴展示有的 API,以得到額外的功能。

 

7. Cucumber

 

Cucumber 是 BDD 模式下實現可執行規範(Executable Specifications)的開源工具,可是它的使命並不侷限於作自動化驗收測試,更加劇要的在於其可以在團隊成員之間構建統一的交流基礎(feature 文件)、規範交流用語(Domain Specific Language)、提升各個利益相關方(Business Stakeholders)溝通效率和效果,從而達到提高產品質量、作出客戶指望獲得的產品這一最終目標。

 

8. Python Unittest

 

Python 單元測試框架 Unittest,是基於 Java 中流行單元測試框架 JUnit 設計的,其功能強大且靈活,對於熟悉 JUnit 的人來講,掌握 Unittest 很簡單。

Unittest 涉及的知識點較多,但核心的只有一部分,本文將介紹它最核心和基礎的內容。

 

相似 JUnit,使用 Unittest 編寫 Python 的單元測試代碼,包括以下幾個步驟:

 

  1. 編寫一個 Python 類,繼承 Unittest 模塊中的 TestCase 類,這就是一個測試類。

  2. 在上面編寫的測試類中定義測試方法(這個就是指的測試用例),每一個方法的方法名要求以 test 打頭,沒有額外的參數。在該測試方法中調用被測試代碼,校驗測試結果,TestCase 類中提供了不少標準的校驗方法,如最多見的 assertEqual。

  3. 執行 unittest.main() ,該函數會負責運行測試,它會實例化全部 TestCase 的子類,並運行其中全部以 test 打頭的方法。

 

如下是Python Unittest 測試用例執行的關係圖。

 

 

咱們下面看一些例子,編寫以下的 Python文件。

 

(1)手工加載批量用例。

import unittestclass TestOne(unittest.TestCase):    def setUp(self):        print '\ncases before'        pass    def test_add(self):        '''test add method'''        print 'add...'        a = 3 + 4        b = 7        self.assertEqual(a, b)    def test_sub(self):        '''test sub method'''        print 'sub...'        a = 10 - 5        b = 5        self.assertEqual(a, b)    def tearDown(self):        print 'case after'        passif __name__ == '__main__':    # 一、構造用例集    suite = unittest.TestSuite()    # 二、執行順序是安加載順序:先執行test_sub,再執行test_add    suite.addTest(TestOne("test_sub"))    suite.addTest(TestOne("test_add"))    # 三、實例化runner類    runner = unittest.TextTestRunner()    # 四、執行測試    runner.run(suite)

 

(2)自動加載批量用例。

import unittestimport osclass TestOne(unittest.TestCase):    def setUp(self):        print '\ncases before'        pass    def test_add(self):        '''test add method'''        print 'add...'        a = 3 + 4        b = 7        self.assertEqual(a, b)    def test_sub(self):        '''test sub method'''        print 'sub...'        a = 10 - 5        b = 5        self.assertEqual(a, b)    def tearDown(self):        print 'case after'        passif __name__ == '__main__':    # 一、設置待執行用例的目錄    test_dir = os.path.join(os.getcwd())    # 二、自動搜索指定目錄下的cas,構造測試集,執行順序是命名順序:先執行test_add,再執行test_sub    discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')    # 實例化TextTestRunner類    runner = unittest.TextTestRunner()    # 使用run()方法運行測試套件(即運行測試套件中的全部用例)    runner.run(discover)

 

 

接口測試的一些問題和實踐

 

以 TestNG 爲例,它是一套根據 JUnit 和 NUnit 思想而構建的利用註釋來強化測試功能的一個測試框架。TestNG 設計涵蓋全部類型的測試,如單元、功能、端到端、集成等。學習 TestNG 以前須要先學習編程語言 Java、配置本地 JDK 環境(JDK1.5 版本或以上)和安裝 Java 開發工具 Eclipse。

 

接下來,咱們一塊兒來學習 TestNG。

 

1. 在 Eclipse 中安裝 TestNG。

 

打開 Eclipse Help -> MarketPlace,在搜索框裏面輸入 TestNG 搜索,而後安裝 TestNG 插件。

 

2. 安裝成功後,在項目的 package 上右鍵能夠看到 TestNG -> Create TestNG class。

 

這裏能夠勾選 TestNG 的註解方法,主要註解方式有:

  • @BeforeSuite:被此註解的方法將在全部測試運行以前運行該方法。

  • @AfterSuite:被此註解的方法將在全部測試運行以後運行該方法。

  • @BeforeTest:被此註解的方法,將在測試運行以前運行。

  • @AfterTest:被此註解的方法,將在測試運行以後運行。

  • @BeforeClass:被此註解的方法,將在當前類的第一個測試方法調用以前運行。

  • @AfterClass:被此註解的方法,將在當前類的全部測試方法調用以後運行。

  • @BeforeMethod:被此註解的方法,將在每一個測試方法調用以前運行。

  • @AfterMethod:被此註解的方法,將在每一個測試方法調用以後運行。

  • @DataProvider:標誌着一個方法,提供數據的一個測試方法。

 

至此環境搭建完成,能夠開始寫測試的 case 了。

 

3. 從一個簡單的測試 case 開始入手,代碼以下:

package com.pingan.ff.zijin;import org.testng.annotations.Test;import org.testng.annotations.DataProvider;import org.testng.annotations.BeforeTest;import org.testng.annotations.AfterTest;public class NewTest {  @Test(dataProvider = "dp")  public void f(Integer n, String s) {      System.out.println("第一個參數是"+n+",第二個參數是"+s);  }  @DataProvider  public Object[][] dp() {    return new Object[][] {      new Object[] { 1, "a" },      new Object[] { 2, "b" },    };  }  @BeforeTest  public void beforeTest() {      System.out.println("------------開始測試------------");  }  @AfterTest  public void afterTest() {      System.out.println("------------結束測試------------");  } }

 

右鍵 Run As -> TestNG Test,運行後結果以下圖所示。

 

 

從測試的結果能夠看到執行的順序是 beforeTest() -> Test() -> afterTest(),同時 Test() 方法從 dataProvider dp 裏面接收參數。以下圖所示。

 

 

轉自公衆號:CSDN技術頭條

做者:SoftwareLuke

連接地址:https://mp.weixin.qq.com/s?__biz=MzA4Mzc0NjkwNA==&mid=2650784584&idx=1&sn=934fbedff493e622671ef93f6f97cc46&chksm=87faaa7fb08d2369822f988cf8080f285cf2abc50524c9662d96b71140617e3235ae9955adae&mpshare=1&scene=23&srcid=0327GWQGY3J7WLUuOrAOVaHC%23rd

相關文章
相關標籤/搜索