摘要:什么是接口測試全稱接口是一個位于復雜系統之上能簡化任務,像中間人一樣不需要你了解詳細的所有細節。接口測試與性能測試之間存在接口性能測試,主要通過來進行壓測。
很多小伙伴可能會說接口真的有測試的必要嗎?
我只要把功能測試好了不就ok了嗎?
答案是肯定的,在中大型項目中,后端、前端多人協同開發過程中,接口測試是必要的。
API全稱(Application Progarmming Interface),接口是一個位于復雜系統之上能簡化任務,像中間人一樣不需要你了解詳細的所有細節。比如用戶登錄頁面,只需要調用登錄接口,就可以達到登錄系統的目的。
接口返回的數據類型都是json,json是一種通用的數據類型.
接口自動化測試:讓程序代替人為對接口項目進行自動化驗證測試的過程
接口測試是一種功能測試,也是一種自動化測試。
功能測試的角度上說只要管輸入數據后得到的輸出結果是怎么樣的,從執行方式上來講接口必須要借助工具來實現。
接口測試與性能測試之間存在接口性能測試,主要通過jmeter來進行壓測。
功能測試必須要等到系統提供可測試的界面后才能進行
接口測試的介入可以更早地發現并解決bug,使得留到功能測試階段被修復的bug減少,從而縮短整個項目的上線時間
接口測試可以更簡單更全面地覆蓋到底層的代碼邏輯,從而可以發現一些隱藏的bug.
只針對UI層的功能進行測試,就很難發現后端系統對一些異常情況的處理能力.
接口測試常用工具:
常用瀏覽器
Postman
Jmeter
Fiddler
針對這一部分所需掌握的知識HTTP協議、會話技術,屬于基本常識了,有不了解的同學可自行學習。
什么是JSON?
JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation),JSON是輕量級的文本數據交換格式(數據傳遞)–xml
JSON 獨立于語言:JSON 使用 Javascript語法來描述數據對象,JSON 解析器和 JSON 庫支持許多不同 的編程語言。 目前非常多的動態(PHP,JSP,.NET)編程語言都支持JSON。
語法規則:
JSON 語法是 JavaScript 對象表示語法的子集。
數據在名稱/值(鍵值對)對中 如 {“name” : “zs”}
數據由逗號分隔 如 {“name” : “zs” , ”age”:”18”}
大括號保存對象 如 {“name” : “zs” , ”age”:”18”}
中括號保存數組 如 {“score” : [100,80,90]
數據格式:
1.接口文檔必備要素
接口說明
調用url
請求參數
請求方式
請求參數、參數類型、請求參數說明
返回參數說明
2.接口請求報文拼接方式
URL拼接:
url拼接規則為:Url?param1=value1?m2=value2
問號前面是請求url,后面是請求參數和參數值,多個參數用&連接
如:
https://api.douban.com/v2/book/search?q=鄒偉偉
JSON串:
需要測試工具完成,如postman、jmeter等。其傳參方式符合json的組合規則。
3.接口類型
http api接口
http api 接口是走http協議,通過路徑來區分調用的方法,請求報文都是key-value形式,返回報文一般都是json串,請求方式有get、post等方式,
這兩種為最常用的請求方式。
webservice接口
webservice 接口是走soap協議通過http傳輸,請求報文和返回報文都是xml格式,需要通過工具才能進行測試。
數據庫訪問接口
數據庫訪問接口是走jdbc方式連接數據,對數據庫進行增刪改查操作,需要使用工具進行測試。
GET、POST區別:
get使用url或cookie傳參,post將數據存放在body中
get的url在長度上有限制,post數據可以很大
post比get更安全,因為數據在地址欄上不可見
一般get用于獲取數據,post用于發送數據
HTTP狀態碼:
200 2開頭表示請求發送成功
300 3開頭表示重定向
400 4開頭表示客戶端發送請求有語法錯誤
401 訪問頁面未授權
403 無權訪問
404 無此頁面
500 5開頭表示服務器異常
500 服務器內部異常
504 服務器端超時,未返回結果
1.第一個案例(發送一個get請求)
# coding=utf-8import requests# 請求的鏈接url = "http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例"# 發送get請求r = requests.post(url)# 請求的狀態碼 200代表成功status = r.status_codeprint(status)# 請求的內容j = r.json()print(j)
輸出結果如下:
2.第二個案例(發送一個post請求)
# 請求的鏈接url = "http://suggest.taobao.com/sug"# post請求以字典格式傳入data = {"code": "utf-8", "q": "褲子", "callback": "cb 用例"}# 發送post請求r = requests.post(url, data)# 請求的狀態碼 200代表成功status = r.status_codeprint(status)# 請求的內容print(r.content)
輸出結果如下:
(接口只返回了一個b,這里只需要明白遇到post接口怎么去請求就好了~)
3.第三個案例(進行接口狀態碼斷言)
# coding=utf-8import requests# 請求的鏈接url = "http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例"# 發送請求r = requests.post(url)# 請求的狀態碼 200代表成功status = r.status_code# 進行接口的狀態碼斷言,等于200則認為通過,不是200不通過if status == 200: print("用例測試通過")else: print("測試不通過")print(status)# 請求的內容j = r.json()print(j)
輸出結果如下:
4.第四個案例(進行接口內容斷言-正常情況)
# coding=utf-8import requests# 請求的鏈接url = "http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例"# 發送請求r = requests.post(url)# 請求的狀態碼 200代表成功status = r.status_code# 進行接口的狀態碼斷言,等于200則認為通過,不是200不通過if status == 200: print("用例測試通過")else: print("測試不通過")print(status)# 請求的內容j = r.json()# 判斷接口返回內容里面,有沒有 褲子女夏 內容if "褲子女夏" in str(j): print("存在此數據")else: print("不存在此數據")print(j)
輸出結果如下:
5.第五個案例(進行接口內容斷言-異常情況)
# coding=utf-8import requests# 請求的鏈接url = "http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例"# 發送請求r = requests.post(url)# 請求的狀態碼 200代表成功status = r.status_code# 進行接口的狀態碼斷言,等于200則認為通過,不是200不通過if status == 200: print("狀態碼校驗過")else: print("狀態碼校驗不通過")print(status)# 請求的內容j = r.json()# 判斷接口返回內容里面,有沒有 褲子女夏 內容# 褲子女夏 增加了一個1if "褲子女夏1" in str(j): print("存在此數據")else: print("不存在此數據")print(j)
輸出結果如下:
6.第六個案例(接口的小封裝-接口和邏輯代碼分開控制-~)
增加config.py主要存放接口
# coding=utf-8# baseurl 一般接口都是分測試接口和正式接口的,只需要修改ip即可baseurl = "http://suggest.taobao.com"# 假裝是登錄接口 baseurl=于樓上url_login = baseurl + "/sug?code=utf-8&q=褲子&callback=cb 用例"# 假裝是注冊接口url_register = baseurl + "/sug?code=utf-8&q=褲子&callback=cb 用例"# 假裝是首頁接口url_home = baseurl + "/sug?code=utf-8&q=褲子&callback=cb 用例"
# coding=utf-8import requests# 引入config配置接口的文件import config# 發送請求 使用config.來調用想要的接口 調用首頁接口r = requests.get(config.url_home)# 請求的狀態碼 200代表成功status = r.status_code# 進行接口的狀態碼斷言,等于200則認為通過,不是200不通過if status == 200: print("狀態碼校驗過")else: print("狀態碼校驗不通過")print(status)# 請求的內容j = r.json()# 判斷接口返回內容里面,有沒有 褲子女夏 內容# 褲子女夏 增加了一個1if "褲子女夏1" in str(j): print("存在此數據")else: print("不存在此數據")print(j)
輸出結果如下:
用心的同學已經發現了,這樣的話每次接口變了鏈接等,只需要修改config文件即可 不用去邏輯代碼里面去找了。
通過性驗證
要保證這個接口功能是正確的,按照接口文檔上的參數,正常傳入,查看是否可以返回正確的結果
參數組合
如:現有一個操作商品的接口,有個字段type。type傳1的時候代表修改商品,商品id、商品名稱、價格有一個是必傳的,這樣就要測參數組合,type傳1的時候,只傳商品名稱能不能修改成功;id、名稱、價格都傳的時候能不能修改成功
接口安全:
繞過驗證
如購買了一個商品,價格是300元,提交訂單時候,把這個商品的價格改成3元,后端有沒有做驗證,更狠點,我把錢改成-3,是不是我的余額還要增加?
繞過身份授權
如修改商品信息接口,必須得是賣家才能修改,那我傳一個普通用戶,能不能修改成功,傳一個其他的賣家能不能修改成功
參數是否加密
如登陸的接口,用戶名和密碼是不是加密,如果不加密的話,別人攔截到你的請求,就能獲取到你的信息。
加密規則是否容易破解
密碼安全規則
對密碼的復雜程度校驗
異常驗證
不按照接口文檔上的要求輸入參數,來驗證接口對異常情況的校驗
如必填的參數不填,輸入整數類型的,傳入字符串類型,長度是10的,傳11
必傳非必傳、參數類型、入參長度。
最后: 可以關注公眾號:傷心的辣條 ! 進去有許多資料共享!資料都是面試時面試官必問的知識點,也包括了很多測試行業常見知識,其中包括了有基礎知識、Linux必備、Shell、互聯網程序原理、Mysql數據庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試、安全測試等。
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
轉行面試,跳槽面試,軟件測試人員都必須知道的這幾種面試技巧!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119657.html
摘要:前言這里筑夢師是一名正在努力學習的開發工程師目前致力于全棧方向的學習希望可以和大家一起交流技術共同進步用簡書記錄下自己的學習歷程個人學習方法分享本文目錄更新說明目錄學習方法學習態度全棧開發學習路線很長知識拓展很長在這里收取很多人的建議以后決 前言 這里筑夢師,是一名正在努力學習的iOS開發工程師,目前致力于全棧方向的學習,希望可以和大家一起交流技術,共同進步,用簡書記錄下自己的學習歷程...
摘要:接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。隨著案例和執行結果的不斷積累,接口測試覆蓋會更加充分,統計結果會更加精確。 原文出自【聽云技術博客】:http://blog.tingyun.com/web/a... 今年遇到了幾個問題,與接口的功能和性能相關,恰巧最近公司也在組織以冒煙測試為主題的活動,于是乎突發奇想,尋思著能否將接口測試與冒煙測試結合起來,發掘一...
閱讀 1014·2021-10-19 11:42
閱讀 2971·2021-09-10 10:51
閱讀 677·2021-09-09 09:33
閱讀 1758·2021-09-01 10:43
閱讀 2767·2019-08-30 12:43
閱讀 3515·2019-08-30 11:24
閱讀 2113·2019-08-30 10:56
閱讀 2776·2019-08-29 11:00