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