什么是接口測試,我們如何實現接口測試?

1. 什么是接口測試

顧名思義,接口測試是對系統或組件之間的接口進行測試,主要是校驗數據的交換,傳遞和控制管理過程,以及相互邏輯依賴關系。其中接口協議分為HTTP,WebService,Dubbo,Thrift,Socket等類型,測試類型又主要分為功能測試,性能測試,穩定性測試,安全性測試等。

在分層測試的“金字塔”模型中,接口測試屬于第二層服務集成測試范疇。相比UI層(主要是WEB或APP)自動化測試而言,接口自動化測試收益更大,且容易實現,維護成本低,有著更高的投入產出比,是每個公司開展自動化測試的首選。

下面我們以一個HTTP接口為例,完整的介紹接口自動化測試流程:從需求分析到用例設計,從腳本編寫、測試執行到結果分析,并提供完整的用例設計及測試腳本。

2. 基本流程

基本的接口功能自動化測試流程如下:

需求分析 -> 用例設計 -> 腳本開發 -> 測試執行 -> 結果分析

2.1 示例接口

接口名稱:豆瓣電影搜索

接口文檔地址:https://developers.douban.com/wiki/?title=movie_v2#search

接口調用示例:

1) 按演職人員搜索:https://api.douban.com/v2/movie/search?q=張藝謀

2) 按片名搜索:https://api.douban.com/v2/movie/search?q=大話西游

3) 按類型搜索:https://api.douban.com/v2/movie/search?tag=喜劇

3. 需求分析

需求分析是參考需求、設計等文檔,在了解需求的基礎上還需清楚內部的實現邏輯,并且可以在這一階段提出需求、設計存在的不合理或遺漏之處。

如:豆瓣電影搜索接口,我理解的需求即是支持對片名,演職人員及標簽的搜索,并分頁返回搜索結果。

4. 用例設計

用例設計是在理解接口測試需求的基礎上,使用MindManager或XMind等思維導圖軟件編寫測試用例設計,主要內容包括參數校驗,功能校驗、業務場景校驗、安全性及性能校驗等,常用的用例設計方法有等價類劃分法,邊界值分析法,場景分析法,因果圖,正交表等。

針對豆瓣電影搜索接口功能測試部分,我們主要從參數校驗,功能校驗,業務場景校驗三方面,設計測試用例如下:

5. 腳本開發

依據上面編寫的測試用例設計,我們使用python+nosetests框架編寫了相關自動化測試腳本。可以完整實現接口自動化測試、自動執行及郵件發送測試報告功能。

5.1 相關lib安裝

必要的lib庫如下,使用pip命令安裝即可:

 
  1. pip install nose

  2. pip install nose-html-reporting

  3. pip install requests

5.2 接口調用

使用requests庫,我們可以很方便的編寫上述接口調用方法(如搜索q=劉德華,示例代碼如下):


#coding=utf-8import requestsimport jsonurl = 'https://api.douban.com/v2/movie/search'params=dict(q=u'劉德華')r = requests.get(url, params=params)print 'Search Params:\n', json.dumps(params, ensure_ascii=False)print 'Search Response:\n', json.dumps(r.json(), ensure_ascii=False, indent=4)

在實際編寫自動化測試腳本時,我們需要進行一些封裝。如下代碼中我們對豆瓣電影搜索接口進行了封裝,test_q方法只需使用nosetests提供的yield方法即可很方便的循環執行列表qs中每一個測試集:


class test_doubanSearch(object):@staticmethoddef search(params, expectNum=None):url = 'https://api.douban.com/v2/movie/search'r = requests.get(url, params=params)print 'Search Params:\n', json.dumps(params, ensure_ascii=False)print 'Search Response:\n', json.dumps(r.json(), ensure_ascii=False, indent=4)def test_q(self):# 校驗搜索條件 qqs = [u'白夜追兇', u'大話西游', u'周星馳', u'張藝謀', u'周星馳,吳孟達', u'張藝謀,鞏俐', u'周星馳,大話西游', u'白夜追兇,潘粵明']for q in qs:params = dict(q=q)f = partial(test_doubanSearch.search, params)f.description = json.dumps(params, ensure_ascii=False).encode('utf-8')yield (f,)

我們按照測試用例設計,依次編寫每個功能的自動化測試腳本即可。

5.3 結果校驗

在手工測試接口的時候,我們需要通過接口返回的結果判斷本次測試是否通過,自動化測試也是如此。

對于本次的接口,我們搜索“q=劉德華”,我們需要判斷返回的結果中是否含有“演職人員劉德華或片名劉德華”,搜索“tag=喜劇”時,需要判斷返回的結果中電影類型是否為“喜劇”,結果分頁時需要校驗返回的結果數是否正確等。完整結果校驗代碼如下:


class check_response():@staticmethoddef check_result(response, params, expectNum=None):# 由于搜索結果存在模糊匹配的情況,這里簡單處理只校驗第一個返回結果的正確性if expectNum is not None:# 期望結果數目不為None時,只判斷返回結果數目eq_(expectNum, len(response['subjects']), '{0}!={1}'.format(expectNum, len(response['subjects'])))else:if not response['subjects']:# 結果為空,直接返回失敗assert Falseelse:# 結果不為空,校驗第一個結果subject = response['subjects'][0]# 先校驗搜索條件tagif params.get('tag'):for word in params['tag'].split(','):genres = subject['genres']ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8')))# 再校驗搜索條件qelif params.get('q'):# 依次判斷片名,導演或演員中是否含有搜索詞,任意一個含有則返回成功for word in params['q'].split(','):title = [subject['title']]casts = [i['name'] for i in subject['casts']]directors = [i['name'] for i in subject['directors']]total = title + casts + directorsok_(any(word.lower() in i.lower() for i in total),'Check {0} failed!'.format(word.encode('utf-8')))@staticmethoddef check_pageSize(response):# 判斷分頁結果數目是否正確count = response.get('count')start = response.get('start')total = response.get('total')diff = total - startif diff >= count:expectPageSize = countelif count > diff > 0:expectPageSize = diffelse:expectPageSize = 0eq_(expectPageSize, len(response['subjects']), '{0}!={1}'.format(expectPageSize, len(response['subjects'])))

5.4 執行測試

對于上述測試腳本,我們使用nosetests命令可以方便的運行自動化測試,并可使用nose-html-reporting插件生成html格式測試報告。

運行命令如下:

nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-report=TestReport.html

5.5 發送郵件報告

測試完成之后,我們可以使用smtplib模塊提供的方法發送html格式測試報告。基本流程是讀取測試報告 -> 添加郵件內容及附件 -> 連接郵件服務器 -> 發送郵件 -> 退出,示例代碼如下:


import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartdef send_mail():# 讀取測試報告內容with open(report_file, 'r') as f:content = f.read().decode('utf-8')msg = MIMEMultipart('mixed')# 添加郵件內容msg_html = MIMEText(content, 'html', 'utf-8')msg.attach(msg_html)# 添加附件msg_attachment = MIMEText(content, 'html', 'utf-8')msg_attachment["Content-Disposition"] = 'attachment; filename="{0}"'.format(report_file)msg.attach(msg_attachment)msg['Subject'] = mail_subjetmsg['From'] = mail_usermsg['To'] = ';'.join(mail_to)try:# 連接郵件服務器s = smtplib.SMTP(mail_host, 25)# 登陸s.login(mail_user, mail_pwd)# 發送郵件s.sendmail(mail_user, mail_to, msg.as_string())# 退出s.quit()except Exception as e:print "Exceptioin ", e

6. 結果分析

打開nosetests運行完成后生成的測試報告,可以看出本次測試共執行了51條測試用例,50條成功,1條失敗。

失敗的用例可以看到傳入的參數是:{"count": -10, "tag": "喜劇"},此時返回的結果數與我們的期望結果不一致(count為負數時,期望結果是接口報錯或使用默認值20,但實際返回的結果數目是189。趕緊去給豆瓣提bug啦- -)

7. 完整腳本

豆瓣電影搜索接口的完整自動化測試腳本,我已上傳到的GitHub。下載地址:test_demo/test_douban at master · lovesoo/test_demo · GitHub

下載完成之后,使用如下命令即可進行完整的接口自動化測試并通過郵件發送最終的測試報告:

python test_doubanSearch.py

最終發送測試報告郵件,截圖如下:

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

?

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

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

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

相關文章

NewspaceGPT帶你玩系列之SQL專家(強烈推薦)

目錄 注冊一個賬號,用qq郵箱,然后登錄選一個可用的Plus,不要選3.5探索GPT今天的主角是SQL Expert(SQL 專家)問題1:答1. 索引原因:優化措施:示例: 2. 查詢設計原因&#x…

一個利用WebBrowser(古董)控件實現網頁爬蟲的代碼片段

使用WebBrowser控件進行網頁爬蟲的一個基本方式并不是最常見的方法,因為WebBrowser控件主要是為了提供一個嵌入式的瀏覽器界面,而不是為了網頁抓取。然而,你仍然可以通過監聽WebBrowser控件的DocumentCompleted事件來獲取網頁的內容。 以下是…

ros中teleop_twist_keyboard安裝使用

目錄 1.安裝 2.使用 3.說明 1.安裝 sudo apt-get install ros-noetic-teleop-twist-keyboard 其中noetic替換成你自己的ros版本 2.使用 roscore #啟動roscore rosrun teleop_twist_keyboard teleop_twist_keyboard.py …

零基礎STM32單片機編程入門(五)FreeRTOS實時操作系統詳解及實戰含源碼視頻

文章目錄 一.概要二.什么是實時操作系統三.FreeRTOS的特性四.FreeRTOS的任務詳解1.任務函數定義2.任務的創建3.任務的調度原理 五.CubeMX配置一個FreeRTOS例程1.硬件準備2.創建工程3.調試FreeRTOS任務調度 六.CubeMX工程源代碼下載七.講解視頻鏈接地址八.小結 一.概要 FreeRTO…

[SwiftUI 開發] 嵌套的ObservedObject中的更改不會更新UI

1. 發生問題的demo 業務邏輯代碼 class Address: ObservableObject {Published var street "123 Apple Street"Published var city "Cupertino" }class User: ObservableObject {Published var name "Tim Cook"Published var address Addr…

解決 Win11 微軟拼音輸入法下 JetBrains IDE Shift+F6 失效的問題

一、使用舊版微軟拼音輸入法 1.在任務欄中輸入法圖標上右鍵,點擊“設置”,或者在系統設置中進入“時間和語言 -> 語言和區域 -> 微軟拼音輸入法”設置項。 2.點擊進入“常規”類別,滾動到頁面底部,找到“兼容性 -> 使用…

nacos漏洞小結

Alibaba Nacos是阿里巴巴推出來的一個新開源項目,是一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。致力于幫助發現、配置和管理微服務。Nacos提供了一組簡單易用的特性集,可以快速實現動態服務發現、服務配置、服務元數據及流量管理…

我的創作紀念日 第四年 我在人間遭罪,也在人間享樂

回顧 一晃四年過去了,從畢業到現在依舊沒有后悔自己當初的選擇是工作而不是繼續讀研。 讀研雖然可以給我更高的起點,但破碎的底層建筑和生活壓力讓我沒的選擇,畢竟只是一介凡人,而且還是底層出身,環境差,觀…

64、哥倫比亞大學:CU-Net-目前腦腫瘤分割的最先進模型

本文已被接受發表在2024年IEEE MLISE會議上(c)2024 IEEE。準確地將腦腫瘤從MRI掃描中分割出來對于制定有效的治療方案和改善患者預后至關重要。本研究引入了一種新的哥倫比亞大學網絡(CU-Net)架構實現,用于使用BraTS 2…

收銀系統源碼-千呼新零售2.0【移動管理端】

千呼新零售2.0系統是零售行業連鎖店一體化收銀系統,包括線下收銀線上商城連鎖店管理ERP管理商品管理供應商管理會員營銷等功能為一體,線上線下數據全部打通。 適用于商超、便利店、水果、生鮮、母嬰、服裝、零食、百貨、寵物等連鎖店使用。 詳細介紹請…

如何循環遍歷循環中的剩余元素

1、問題背景 給定一段文本,文本中包含多條錯誤信息,每條錯誤信息包含行號、錯誤路徑和錯誤信息。需要從文本中提取出這些錯誤信息,并以特定的格式輸出。 line, Error 12, This is the Error line, Error 34, Another Error line, Error …

【Linux】線程周邊002之線程安全

👀樊梓慕:個人主頁 🎥個人專欄:《C語言》《數據結構》《藍橋杯試題》《LeetCode刷題筆記》《實訓項目》《C》《Linux》《算法》 🌝每一個不曾起舞的日子,都是對生命的辜負 目錄 前言 1.Linux線程互斥 1…

每日一題——Python實現PAT乙級1050 螺旋矩陣(舉一反三+思想解讀+逐步優化)6千字好文

一個認為一切根源都是“自己不夠強”的INTJ 個人主頁:用哲學編程-CSDN博客專欄:每日一題——舉一反三Python編程學習Python內置函數 Python-3.12.0文檔解讀 目錄 我的寫法 時間復雜度分析 空間復雜度分析 總結 我要更強 代碼解釋 時間復雜度 …

小區服務前臺小程序的設計

管理員賬戶功能包括:系統首頁,個人中心,住戶管理,管理員管理,員工管理,安保管理,安保分配管理,客服聊天管理 微信端賬號功能包括:系統首頁,公告,…

Mongodb集群中的分布式讀寫

學習mongodb,體會mongodb的每一個使用細節,歡迎閱讀威贊的文章。這是威贊發布的第81篇mongodb技術文章,歡迎瀏覽本專欄威贊發布的其他文章。如果您認為我的文章對您有幫助或者解決您的問題,歡迎在文章下面點個贊,或者關…

互聯網摸魚日報(2024-07-01)

互聯網摸魚日報(2024-07-01) 36氪新聞 最前線 | 孚能科技廣州基地投產,年產能30GWh,主推SPS大軟包產品 本周雙碳大事:800億元“風光火儲”大項目來了;光伏巨頭SolarEdge股價驟跌20%;韓國電池廠大火,鋰電安…

目標檢測算法的優缺點

目標檢測算法在計算機視覺領域具有廣泛的應用,其優缺點因算法類型和具體實現而有所不同。以下是對一些主流目標檢測算法優缺點的概述: 1. 傳統目標檢測算法 優點: 模型簡單:傳統目標檢測算法通常基于手工設計的特征和分類器&am…

Java進階學習|Day3.Java集合類(容器),Stream的使用,哈希初接觸

java集合類(容器) Java中的集合類主要由Collection和Map這兩個接口派生而出,其中Collection接口又派生出三個子接口,分別是Set、List、Queue。所有的Java集合類,都是Set、List、Queue、Map這四個接口的實現類&#xf…

Powershell 簡易爬蟲,提取種子網站的磁力鏈接

目錄 一. 需求二. 分析2.1 思路分析2.2 技術點 三. 代碼四. 效果 一. 需求 ?有網站如下所示,先要求從按照關鍵詞搜索到的網頁中,提取出所有的磁力鏈接。 二. 分析 2.1 思路分析 打開網頁之后,從網頁中先提取出所有的標題相關的url然后再打…

linux驅動部分內容整理

文章目錄 Linux驅動概念應用程序調用驅動程序流程驅動模塊的加載linux設備號加載和卸載注冊新字符設備注冊設備節點自動創建設備節點編譯編譯驅動程序編譯應用程序 地址映射ioctrl命令碼的解析 并發與競爭原子操作自旋鎖信號量互斥體 linux中斷DMA映射其它printkmemcpyvolatile…