python接口測(cè)試

一豹缀、接口測(cè)試

1氮惯、關(guān)注點(diǎn)

功能:功能實(shí)現(xiàn),實(shí)現(xiàn)與設(shè)計(jì)一致, 接口通過(guò)性測(cè)試(數(shù)據(jù)交換说莫,邏輯間的控制)

健壯性: 邊界值,容錯(cuò)性

性能: 并發(fā)及壓測(cè)

穩(wěn)定性: 長(zhǎng)期運(yùn)行的穩(wěn)定性

安全性: SQL注入, session依賴, 數(shù)字簽名, http接口的安全性

2、常見(jiàn)接口種類(lèi)

Http/Https接口: 通過(guò)http/https協(xié)議傳送接口數(shù)據(jù)(通常按字符串/二進(jìn)制傳輸), 如常見(jiàn)的網(wǎng)頁(yè)表單, https安全性更好

RESTful Api: REST表述性狀態(tài)傳遞. 一種設(shè)計(jì)風(fēng)格,基于http/https協(xié)議, 把一切接口視為資源, 接口要分版本,在統(tǒng)一的域名下管理, 不同的方法(get/post..)做不同的事,通常請(qǐng)求及響應(yīng)使用json格式

Web Service: SOAP簡(jiǎn)單面向?qū)ο髤f(xié)議, 基于http實(shí)現(xiàn)的一種RPC方案.接口返回一些對(duì)象,可以直接通過(guò)操作對(duì)象,實(shí)現(xiàn)我們需要的業(yè)務(wù)處理.使用xml格式傳輸數(shù)據(jù)

RPC接口: RPC為遠(yuǎn)程方法調(diào)用, 主要應(yīng)用于分布式系統(tǒng)的不同服務(wù)器的方法懂牧,有不同的實(shí)現(xiàn)方案,基于TCP/Http協(xié)議的都有. RPC可以想 我們本地導(dǎo)入和調(diào)用對(duì)象一樣使用. Dubbo接口也是一種RPC接口.?

3躯保、常見(jiàn)接口數(shù)據(jù)類(lèi)型?

請(qǐng)求數(shù)據(jù)類(lèi)型(Content-Type):

application/x-www-form-urlencoded: 常規(guī)只有文本的網(wǎng)頁(yè)表單

application/json: RESTful Api常用格式, 結(jié)構(gòu)清晰, 含有多層嵌套

multipart/form-data: 既有文本,又有上傳文件或富文本框的混合數(shù)據(jù)表單

text/xml: xml格式, RPC接口常用格式尸变,Dubbo接口常用格式

test/html: html格式

響應(yīng)數(shù)據(jù)類(lèi)型

string/html: 返回字符串或網(wǎng)頁(yè)源碼

json: RESTful Api常用響應(yīng)格式, 結(jié)構(gòu)清晰

xml: RPC接口常用格式

4怕篷、常見(jiàn)接口安全驗(yàn)證方式

Auth_1.0/Auth_2.0: 通用接口授權(quán)方式

Session依賴: 需要登錄之后才能進(jìn)行接口操作

Token驗(yàn)證: 先要使用自己的appid/appsecret通過(guò)獲取token接口驗(yàn)證身份獲取一個(gè)token(令牌,有一定有效期), 然后帶著token訪問(wèn)接口

數(shù)字簽名: 將原本的參數(shù)按一定規(guī)則進(jìn)行組合,配合時(shí)間戳或appsecret, 通過(guò)加密算法生成一個(gè)簽名sign, 攜帶簽名進(jìn)行接口請(qǐng)求

5、常見(jiàn)接口請(qǐng)求方法

GET: 獲取資源

POST: 修改資源

PUT: 上傳資源

DELETE: 刪除資源

6惕稻、常見(jiàn)狀態(tài)碼(RESTful規(guī)范)

1** 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作

2** 成功,操作被成功接收并處理

3** 重定向弟跑,需要進(jìn)一步的操作以完成請(qǐng)求

4** 客戶端錯(cuò)誤扑浸,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求

5** 服務(wù)器錯(cuò)誤榴鼎,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤

200 OK - [GET]:獲取資源成功

201 CREATED - [POST/PUT/PATCH]:創(chuàng)建/修改成功

202 Accepted - [*]:任務(wù)接受

204 NO CONTENT - [DELETE]:刪除成功

301 Moved Permanently: 永久重定向

302 Found: 臨時(shí)重定向

400 INVALID REQUEST - [POST/PUT/PATCH]:用戶請(qǐng)求錯(cuò)誤

401 Unauthorized - [*]:沒(méi)有權(quán)限(鑒權(quán)失敗, 接口層)

403 Forbidden - [*] 資源禁止訪問(wèn)(服務(wù)器層,沒(méi)有訪問(wèn)權(quán)限)

404 NOT FOUND - [*]:資源不存在(有可能是請(qǐng)求url錯(cuò)誤或參數(shù)不正確)

405 Method Not Allowd: 訪問(wèn)的方法不允許, 如用POST訪問(wèn)只支持GET請(qǐng)求的接口

406 Not Acceptable - [GET]:用戶請(qǐng)求的格式不可得(比如用戶請(qǐng)求JSON格式,但是只有XML格式)

410 Gone -[GET]:資源被永久刪除

422 Unprocesable entity - [POST/PUT/PATCH] 當(dāng)創(chuàng)建對(duì)象時(shí)心赶,發(fā)生驗(yàn)證錯(cuò)誤

500 INTERNAL SERVER ERROR - [*]:服務(wù)器發(fā)生錯(cuò)誤

502: 網(wǎng)關(guān)失效

504: 網(wǎng)關(guān)請(qǐng)求超時(shí)

7湖雹、接口業(yè)務(wù)類(lèi)型

返回?cái)?shù)據(jù)型接口: 只從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)

業(yè)務(wù)操作型接口: 需要寫(xiě)數(shù)據(jù)庫(kù)(接口測(cè)試需要要涉及參數(shù)化或環(huán)境清理)

8、根據(jù)接口文檔設(shè)計(jì)測(cè)試點(diǎn)

功能分析: 是否能滿足業(yè)務(wù)(是否缺少某個(gè)前端需要的參數(shù)), 是否能滿足所有業(yè)務(wù)場(chǎng)景(是否有漏開(kāi)發(fā)接口, 比如只開(kāi)發(fā)了單品接口,沒(méi)開(kāi)發(fā)套餐接口)

設(shè)計(jì)分析: 是否有不規(guī)范字段(如,nickname, passwd);不規(guī)范格式(如sex,用男,女而不是1,2);是否有易混淆字段(如amount和total);是否有單詞拼錯(cuò);是否有和數(shù)據(jù)庫(kù)字段對(duì)應(yīng)但名稱不一樣的(易錯(cuò))

接口分析: 協(xié)議類(lèi)型(http要考慮安全);請(qǐng)求方法(是否規(guī)范);請(qǐng)求編碼格式(表單/Json/xml, 很多接口文檔不聲明,導(dǎo)致測(cè)試調(diào)試不通);接口授權(quán)方式;接口業(yè)務(wù)類(lèi)型(關(guān)系到是否需要做參數(shù)化或環(huán)境清理); 返回值類(lèi)型及結(jié)構(gòu)(關(guān)系到怎么斷言)

接口依賴: 需要什么環(huán)境準(zhǔn)備和業(yè)務(wù)場(chǎng)景, 依賴那些接口, 有那些動(dòng)態(tài)數(shù)據(jù), 預(yù)備環(huán)境怎么保障

參數(shù)分析: 各個(gè)參數(shù)的參數(shù)類(lèi)型,組成規(guī)則,是否允許不傳,是否可以為空, 是否允許多傳參

業(yè)務(wù)分析: 如price字段必須和數(shù)據(jù)庫(kù)中的商品的price字段一致,才能校驗(yàn)通過(guò)

非功能性: 接口的技術(shù)實(shí)現(xiàn)方案是否合理, 能否滿足高并發(fā)的性能要求, 邊界值/極限值的處理是否合適, 是否前后端都有數(shù)據(jù)格式校驗(yàn)等(如精確度為秒級(jí)的訂單號(hào)生成器,在高并發(fā)下會(huì)導(dǎo)致生成同一訂單號(hào)的問(wèn)題)

其他: 如反爬,對(duì)headers的一些限制和校驗(yàn), ip等限制

9瓶籽、編寫(xiě)接口測(cè)試用例

單接口用例: 正常數(shù)據(jù)/邊界數(shù)據(jù)/異常數(shù)據(jù)(健壯性)/并發(fā)(一致性)/性能/安全性(抓包截取偽造/SQL注入/跨域請(qǐng)求)

場(chǎng)景用例: 列出常見(jiàn)的用戶場(chǎng)景, 用接口進(jìn)行覆蓋, 業(yè)務(wù)場(chǎng)景壓測(cè)(尋找某個(gè)環(huán)節(jié)的性能瓶頸)

10汤求、接口測(cè)試點(diǎn)

業(yè)務(wù)功能測(cè)試:正常場(chǎng)景、異常場(chǎng)景

邊界測(cè)試:業(yè)務(wù)規(guī)則邊界測(cè)試

? ? ? ? ? ? ? ? ?輸入輸出邊界值測(cè)試:必選參數(shù)竣蹦;可選參數(shù)纲菌;參數(shù)有無(wú)null庇麦;參數(shù)順序萌衬,個(gè)數(shù)呵晚,類(lèi)? ? ? ? ? ? ? ? ? ? ? ?型勺届;參數(shù)類(lèi)型數(shù)值大小想鹰,輸入數(shù)值的范圍;參數(shù)字符串長(zhǎng)短还栓;參數(shù)特殊字符

參數(shù)組合測(cè)試

異常情況測(cè)試:冪等(重復(fù)提交),并發(fā)測(cè)試贾铝,事務(wù)測(cè)試隙轻,分布式測(cè)試垢揩,環(huán)境異常,大數(shù)量測(cè)? ?????????????????????????試(同時(shí)處理大批量數(shù)據(jù)寂嘉,DB數(shù)量很大時(shí),處理----并發(fā)和并行)

性能測(cè)試:響應(yīng)時(shí)間甜癞,吞吐量,并發(fā)數(shù)宛乃,服務(wù)器資源使用率(cpu悠咱,內(nèi)存,IO征炼,network)

安全測(cè)試:敏感信息是否加密(前后端數(shù)據(jù)加密析既,日志加密),sql注入

11谆奥、接口測(cè)試掌握點(diǎn)

了解OSI網(wǎng)絡(luò)模型渡贾,TCP/UDP協(xié)議,掌握HTTP/HTTPS協(xié)議雄右,了解RPC, Web Service及REST空骚,理解Session和Cookie

掌握常用的接口測(cè)試工具如curl命令,Postman,Jmeter,LR,SoupUI,AB等

掌握基本的抓包工具如Chrome開(kāi)發(fā)者工具,Fiddler,Charles,Wireshark,tcpdumps等

掌握一門(mén)編程語(yǔ)言Python或Java

了解Nginx, Apache, Tomcat等服務(wù)器中間件

掌握數(shù)據(jù)庫(kù)基本查詢命令,及一些NoSQL(如Redis)操作擂仍,用于檢查響應(yīng)結(jié)果

掌握基本的Linux日子查詢和篩選命令

12囤屹、接口測(cè)試重點(diǎn)

動(dòng)態(tài)變量參數(shù)化

接口依賴及中間變量問(wèn)題

異步接口結(jié)果驗(yàn)證問(wèn)題

相應(yīng)參數(shù)及嵌套很多的驗(yàn)證問(wèn)題

接口測(cè)試框架的穩(wěn)定性問(wèn)題

資源清理問(wèn)題

多接口場(chǎng)景測(cè)試

二、python接口測(cè)試

1逢渔、接口調(diào)用庫(kù)肋坚,使用第三方包requests

請(qǐng)求方法

requests.get():無(wú)參數(shù),有參數(shù)使用params = {"key":"ec961279f453459b9248f0aeb6600bbe","info":"你好"}

requests.post()

參數(shù)形式1? ? data = {"name": "hanzhichao", "age": 18} # Post請(qǐng)求發(fā)送的數(shù)據(jù),字典格式

res = requests.post(url=url, data=data) # 這里使用post方法智厌,參數(shù)和get方法一樣

參數(shù)形式2? ?data = '''{

? ? ? ? "name": "hanzhichao",

? ? ? ? "age": 18

? ? ? ? }''' # 多行文本, 字符串格式诲泌,也可以單行(注意外層有引號(hào),為字符串) data = '{"name": "hanzhichao", "age": 18}'res = requests.post(url=url, data=data) #? data支持字典或字符串

data參數(shù)支持字典格式也支持字符串格式铣鹏,如果是字典格式敷扫,requests方法會(huì)將其按照默認(rèn)表單urlencoded格式轉(zhuǎn)換為字符串,如果是字符串則不轉(zhuǎn)化

如果data以字符串格式傳輸需要遵循以下幾點(diǎn):

必須是嚴(yán)格的JSON格式字符串诚卸,里面必須用雙引號(hào)葵第,k-v之間必須有逗號(hào),布爾值必須是小寫(xiě)的true/false等等

不能有中文合溺,直接傳字符串不會(huì)自動(dòng)編碼

一般來(lái)說(shuō)卒密,建議將data聲明為字典格式(方便數(shù)據(jù)添加修改),然后再用json.dumps()方法把data轉(zhuǎn)換為合法的JSON字符串格式

requests.delete()

requests.session() # 用來(lái)保持session會(huì)話,如登錄狀態(tài)

請(qǐng)求參數(shù)

url: 接口地址, strurl="http://127.0.0.1:5000/add/"

headers: 請(qǐng)求頭, dict headers={"Content-Type": "application/json"}

params: url參數(shù), dict params={"a":"1":"b":"2"}

data: 請(qǐng)求數(shù)據(jù), dict data={"a":"1":"b":"2"}

files: 文件句柄, dict files={"file": open("1.jpg")}

timeout: 超時(shí)時(shí)間,單位s, str, 超過(guò)時(shí)間會(huì)報(bào)超時(shí)錯(cuò)誤```requests.get(url=url,params=params,timeout=10)

響應(yīng)解析

resp: 響應(yīng)對(duì)象

resp.status_code: 響應(yīng)狀態(tài)碼

resp.text # 響應(yīng)文本

resp.json() # 響應(yīng)轉(zhuǎn)化為json對(duì)象(字典)-慎用:如果接口出錯(cuò)或返回格式不是json格式,使用這個(gè)方法會(huì)報(bào)錯(cuò)

resp.content # 響應(yīng)內(nèi)容, 二進(jìn)制類(lèi)型

2棠赛、序列化和反序列化

內(nèi)存對(duì)象---文本哮奇、文件? -----序列化

文本---內(nèi)存對(duì)象-------反序列化

3、json格式和字典的區(qū)別

json對(duì)象睛约,有屬性和方法

json文本屏镊,是字符串

字典中的引號(hào)支持單引號(hào)和雙引號(hào),JSON格式只支持雙引號(hào)

字典中的True/False首字母大寫(xiě)痰腮,JSON格式為true/false

字典中的空值為None, JSON格式為null

4而芥、json格式序列化

序列化(字典 -> 文本/文件句柄): json.dumps()/json.dump()

反序列化(文本/文件句柄 -> 字典) : json.loads()/json.load()

5、文件使用

f = open("文件",r,模式)

f.close()?

with open file()

打開(kāi)文件膀值,with不需要關(guān)閉棍丐,直接打開(kāi)需要關(guān)閉

三、網(wǎng)絡(luò)基礎(chǔ)知識(shí)

1沧踏、IP地址

查看ip地址命令? ?window? ?ipconfig? ? ?Linux? ifconfig

2歌逢、端口:設(shè)備與外界通訊交流的窗口

常見(jiàn)軟件默認(rèn)端口

Apache/Nginx(HTTP服務(wù)): 80

Tomcat: 8080

Oracle: 1521

MySQL: 3306

SQL Server: 1433

PostgreSQL: 5432

MongoDB: 27017

Redis: 6379

Memcached: 11211

查看端口命令

Windows: netstat -ano

Linux: netstat -ntlp

3、域名與DNS

DNS:域名解析系統(tǒng)翘狱,域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù)秘案,提供域名轉(zhuǎn)到對(duì)應(yīng)ip的服務(wù)

4、OSI七層模型

上三層---應(yīng)用層潦匈,控制軟件方面

應(yīng)用層:文件傳輸阱高,電子郵件,文件服務(wù)茬缩,虛擬終端 TFTP赤惊,HTTP,SNMP凰锡,F(xiàn)TP未舟,SMTP圈暗,DNS,Telnet

表示層:數(shù)據(jù)格式化裕膀,代碼轉(zhuǎn)換员串,數(shù)據(jù)加密

會(huì)話層:解除或建立與別的接點(diǎn)的聯(lián)系(會(huì)話)

下四層---數(shù)據(jù)流層,用來(lái)管理硬件

傳輸層:提供端對(duì)端的接口 TCP昼扛,UDP

網(wǎng)絡(luò)層:為數(shù)據(jù)包選擇路由 IP寸齐,ICMP,RIP野揪,OSPF访忿,BGP瞧栗,IGMP

數(shù)據(jù)鏈路層 傳輸有地址的幀以及錯(cuò)誤檢測(cè)功能 SLIP斯稳,CSLIP,PPP迹恐,ARP挣惰,RARP,MTU

物理層 以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù) ISO2110殴边,IEEE802憎茂,IEEE802.2

5、TCP及UDP協(xié)議

TCP和UDP都是傳輸層的協(xié)議

TCP:傳輸控制協(xié)議

UDP: 數(shù)據(jù)報(bào)文協(xié)議

TCP和UDP的區(qū)別

UDP的特點(diǎn)如下:

無(wú)鏈接

UDP使用盡最大努力交付锤岸,不保證可靠性

UDP是面向報(bào)文的竖幔,UDP對(duì)應(yīng)用層交付下來(lái)的報(bào)文,既不合并是偷,也不拆分拳氢,而是保留這些報(bào)文的邊界。應(yīng)用層交給UDP多長(zhǎng)的報(bào)文蛋铆,UDP就照樣發(fā)送馋评,即一次發(fā)送一個(gè)報(bào)文

UDP沒(méi)有擁塞控制

UDP支持一對(duì)一、一對(duì)多刺啦、多對(duì)一和多對(duì)多的交互通信

UDP的首部開(kāi)銷(xiāo)小留特,只有8字節(jié)

TCP的特點(diǎn):

TCP是面向連接的

每條TCP連接只能用于兩個(gè)斷點(diǎn),一對(duì)一

TCP提供可靠交付的服務(wù):連接傳輸數(shù)據(jù)玛瘸、無(wú)差錯(cuò)蜕青、不丟失、不重復(fù)糊渊、并且按序到達(dá)

TCP提供全雙工通信

面向字節(jié)流市咆。TCP根據(jù)對(duì)方給出的窗口和當(dāng)前網(wǎng)絡(luò)擁塞的程度來(lái)決定一個(gè)報(bào)文應(yīng)該包含多少個(gè)字節(jié)

6、HTTP協(xié)議

HTTP:超文本傳輸協(xié)議再来,是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議蒙兰。

HTTP協(xié)議是一種無(wú)狀態(tài)協(xié)議磷瘤,主要包含請(qǐng)求和相應(yīng)兩大部分:

HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,HTTPS協(xié)議是由HTTP+SSL協(xié)議構(gòu)建的可進(jìn)行加密傳輸搜变、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議采缚,要比HTTP協(xié)議安全。

HTTPS和HTTP的區(qū)別

HTTPS協(xié)議需要到ca申請(qǐng)證書(shū)挠他,一般免費(fèi)證書(shū)較少扳抽,因而需要一定費(fèi)用。

HTTP是超文本傳輸協(xié)議殖侵,信息是明文傳輸贸呢,HTTPS則是具有安全性的SSL加密傳輸協(xié)議。

HTTP和HTTPS使用的是完全不同的連接方式拢军,用的端口也不一樣楞陷,前者是80,后者是443茉唉。

HTTP的連接很簡(jiǎn)單固蛾,是無(wú)狀態(tài)的;HTTPS協(xié)議是由HTTP+SSL協(xié)議構(gòu)建的可進(jìn)行加密傳輸度陆、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議艾凯,比HTTP協(xié)議安全。

7懂傀、請(qǐng)求(Request)

請(qǐng)求是我們發(fā)送給接口的數(shù)據(jù)對(duì)象趾诗,包含接口地址(URL),請(qǐng)求方法蹬蚁,參數(shù)恃泪,請(qǐng)求頭(Headers), Cookies, 數(shù)據(jù)等

8、URL編碼

URL編碼是一種瀏覽器用來(lái)打包請(qǐng)求參數(shù)及表單參數(shù)的格式, 參數(shù)和參數(shù)之間使用&分割缚忧,非ASCII碼使用%加16進(jìn)制編碼替換

數(shù)據(jù)編碼

ASCII碼: 單字節(jié)悟泵,美國(guó)信息交換標(biāo)準(zhǔn)碼, 包含數(shù)字,字母闪水,英文標(biāo)點(diǎn)及一些控制字符

ISO-8859-1:又稱Latin1糕非,單字節(jié),向下兼容ASCII球榆,用于支持部分于歐洲使用的語(yǔ)言

ANSI編碼:?jiǎn)巫止?jié)表示英文朽肥,雙字節(jié)表示漢字,對(duì)ASCII的擴(kuò)展持钉,不同的國(guó)家和地區(qū)制定了不同的標(biāo)準(zhǔn)衡招,中文中的GBK,GB2312屬于ANSI編碼

Unicode編碼: 采用二個(gè)字節(jié)編碼(英文和中文的字符都以雙字節(jié)存放),與ANSI碼不兼容

UTF-8:是目前互聯(lián)網(wǎng)上使用最廣泛的一種Unicode 編碼方式每强,又稱萬(wàn)國(guó)碼

指定請(qǐng)求數(shù)據(jù)編碼(解決中文亂碼):

請(qǐng)求Headers設(shè)置Content-Type: application/json; charset=utf-8

Base64: 一種用64個(gè)字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法始腾。

Base64編碼的作用:由于某些系統(tǒng)中只能使用ASCII字符州刽。Base64就是用來(lái)將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法。

而且base64特別適合在http浪箭,mime協(xié)議下快速傳輸數(shù)據(jù)穗椅。

9、GET請(qǐng)求和POST請(qǐng)求的區(qū)別

GET請(qǐng)求:

GET請(qǐng)求可被緩存

GET請(qǐng)求保留在瀏覽器歷史記錄中

GET請(qǐng)求可被收藏為書(shū)簽

GET請(qǐng)求不應(yīng)在處理敏感數(shù)據(jù)時(shí)使用

GET請(qǐng)求有長(zhǎng)度限制

GET請(qǐng)求只應(yīng)當(dāng)用于取回?cái)?shù)據(jù)

POST請(qǐng)求:

POST請(qǐng)求不會(huì)被緩存

POST請(qǐng)求 不會(huì)保留在瀏覽器歷史記錄中

POST不能被收藏為書(shū)簽

POST請(qǐng)求對(duì)數(shù)據(jù)長(zhǎng)度沒(méi)有要求

10奶栖、常見(jiàn)Headers

12匹表、Cookie和Session

**Cookie/Cookies: **是指某些網(wǎng)站為了辨別用戶身份進(jìn)行session跟蹤儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過(guò)加密)宣鄙。

Session:服務(wù)端為客戶端訪問(wèn)所建立和維持的會(huì)話袍镀,通常會(huì)生成一個(gè)唯一的id,會(huì)話有一定的有效期冻晤。

由于HTTP是無(wú)狀態(tài)的苇羡,即服務(wù)器不知道用戶上一次做了什么,默認(rèn)也無(wú)法識(shí)別用戶身份明也。

比較流行的做法是:

用戶訪問(wèn)時(shí)服務(wù)端建立會(huì)話(Session)

將會(huì)話id(Session ID)隨響應(yīng)返回宣虾,并保存在客戶端的Cookies里

后續(xù)的訪問(wèn)中惯裕,服務(wù)器通過(guò)辨識(shí)温数,客戶端請(qǐng)求時(shí)攜帶的Cookies內(nèi)容來(lái)識(shí)別用戶

Cookie和Session的區(qū)別

cookie是存在客戶端(瀏覽器)的進(jìn)程內(nèi)存中和客戶端所在的機(jī)器硬盤(pán)上

cookie只能能夠存儲(chǔ)少量文本,大概4K大小

cookie是不能在不同瀏覽器之間共享

Session存在服務(wù)器端蜻势,存在網(wǎng)站進(jìn)程的內(nèi)存中

Session在初次設(shè)置session的時(shí)候撑刺,會(huì)在session池中實(shí)例化一個(gè)session對(duì)象,以sessionid 的值作為key握玛,同時(shí)會(huì)將key以cookie的形式保存到客戶端的內(nèi)存中

Session的作用域只存在當(dāng)前瀏覽器的會(huì)話中够傍,當(dāng)瀏覽器關(guān)閉以后就會(huì)將sessionid丟失,但是服務(wù)器的Session對(duì)象要20分鐘以后才會(huì)回收

13挠铲、授權(quán)與加密

常見(jiàn)的接口安全策略:

Session/Cookie機(jī)制: 即需要登錄冕屯,登錄后可訪問(wèn)各個(gè)接口,最常用的一種策略拂苹,適用于內(nèi)部接口安聘。

固定appid模式: 用戶注冊(cè)時(shí)會(huì)生成一個(gè)唯一的appid,用戶調(diào)用接口時(shí)需要攜帶appid瓢棒,適用于公開(kāi)接口浴韭,安全性較差。

動(dòng)態(tài)token模式: token即身份令牌脯宿,用戶訪問(wèn)接口需要使用個(gè)人appid臨時(shí)申請(qǐng)一個(gè)token念颈,token有一定有效期,適用于公開(kāi)接口连霉,安全性較appid模式好榴芳。

開(kāi)放協(xié)議: Basic Auth/ Oauth1.0 / Oauth2.0: 適用于開(kāi)放接口嗡靡。

數(shù)字簽名: 將所有請(qǐng)求參數(shù)及參數(shù)值進(jìn)行排列拼接,加上用戶私鑰窟感,再進(jìn)行Md5或其他加密生成一個(gè)請(qǐng)求的簽名(sign),請(qǐng)求是需要攜帶簽名叽躯,服務(wù)器收到請(qǐng)求后,會(huì)對(duì)請(qǐng)求重新計(jì)算簽名并核實(shí)與請(qǐng)求所攜帶簽名是否一致肌括。安全性較高点骑,可以有效防止請(qǐng)求被篡改。適用于內(nèi)部接口及微服務(wù)接口谍夭。

常見(jiàn)的加密算法

在接口數(shù)據(jù)傳輸過(guò)程中常對(duì)一些敏感數(shù)據(jù)(如密碼)進(jìn)行Base64編碼或MD5加密黑滴,以增加安全性。

加密算法分為對(duì)稱式加密算法和非對(duì)稱式加密算法紧索,對(duì)稱式加解密使用同一個(gè)秘鑰袁辈,非對(duì)稱式使用不同的秘鑰。

對(duì)稱式加密

DES: 數(shù)據(jù)加密標(biāo)準(zhǔn)珠漂,速度較快晚缩,適用于加密大量數(shù)據(jù)的場(chǎng)合

AES: 高級(jí)加密標(biāo)準(zhǔn),速度快媳危,安全級(jí)別高

非對(duì)稱式加密

RSA: 是一個(gè)支持變長(zhǎng)密鑰的公共密鑰算法荞彼, 分公鑰和私鑰,SSH協(xié)議使用該算法

MD5: 最常用的一種加密方法待笑,是一種摘要算法鸣皂。

14、緩存

HTTP 緩存機(jī)制作是 web 性能優(yōu)化的重要手段暮蹂,當(dāng)用戶第一次請(qǐng)求服務(wù)器資源時(shí)寞缝,服務(wù)器將資源緩存到客戶端本地,在一定時(shí)間內(nèi)(緩存有效期內(nèi))當(dāng)用戶再次向服務(wù)器請(qǐng)求同樣的資源時(shí)仰泻,可以直接從緩存中讀取荆陆,而不用從服務(wù)器下載。

接口測(cè)試中緩存相關(guān)注意點(diǎn)

在更新或調(diào)試接口是集侯,注意是否需要清理緩存(或臨時(shí)禁用緩存)

緩存有一定的有效期

接口性能測(cè)試中會(huì)關(guān)注緩存的命中率

15被啼、代理

正向代理中, 代理和客戶端在一個(gè)局域網(wǎng)內(nèi),對(duì)服務(wù)器透明

反向代理中浅悉,代理和服務(wù)器在一個(gè)局域網(wǎng)內(nèi)趟据,對(duì)客戶端透明

例如:使用代理訪問(wèn)Google屬于正向代理,通過(guò)不同的域名通過(guò)Nginx向同一臺(tái)服務(wù)器請(qǐng)求不同的網(wǎng)站屬于反向代理

反向代理可以做負(fù)載均衡

反向代理接口測(cè)試一般要先綁定本地hosts

16术健、Chrome開(kāi)發(fā)者工具

Elements: HTML元素面板汹碱,用于定位查看元素源代碼

Console: js控制臺(tái)面板,js命令行荞估,查看前端日志

Group by frame:按框架分組

Preserve log:頁(yè)面重載時(shí)保留請(qǐng)求

Disable cache:禁用緩存

Offline:斷網(wǎng)及弱網(wǎng)模擬

Sources: 資源面板咳促,用于斷點(diǎn)調(diào)試js

Network: 請(qǐng)求信息面板稚新,查看請(qǐng)求及響應(yīng)信息

Timeline: 時(shí)間線面板,記錄網(wǎng)站生命周期內(nèi)所發(fā)生的各類(lèi)事件

Profiles: 事件詳情面板

Application: 本地存儲(chǔ)跪腹,Session存儲(chǔ)等資源信息

Secuity: 判斷當(dāng)前網(wǎng)頁(yè)是否安全

Audits: 網(wǎng)絡(luò)性能診斷

Filters: 請(qǐng)求過(guò)濾器

Overview: 資源時(shí)間軸

Requests Table: 請(qǐng)求列表

Name: 資源名稱

Status: HTTP狀態(tài)碼

Initiator: 請(qǐng)求源

Size: 從服務(wù)器下載的文件和請(qǐng)求的資源大小褂删。如果是從緩存中取得的資源則該列會(huì)顯示(from cache)

Timeline: 顯示所有網(wǎng)絡(luò)請(qǐng)求時(shí)間狀態(tài)軸

Summary: 請(qǐng)求總數(shù),數(shù)據(jù)傳輸量冲茸,加載時(shí)間信息

DOMContentLoaded:頁(yè)面上DOM完全加載并解析完畢

load:頁(yè)面上所有DOM屯阀、CSS、JS轴术、圖片完全加載完畢

四难衰、Fiddler使用

1、作用

抓到請(qǐng)求數(shù)據(jù)逗栽,查看Raw格式/表單格式/Json/XML格式

可以攔截和修改請(qǐng)求

更強(qiáng)大的過(guò)濾器

可以抓取Postman/接口腳本發(fā)送的請(qǐng)求盖袭,方便調(diào)試

可以抓包手機(jī)請(qǐng)求 ...

2、Fiddler主界面

Fiddler的主界面分為 工具面板彼宠、會(huì)話面板鳄虱、監(jiān)控面板、狀態(tài)面板

Inspectors: 檢查員

Raw:請(qǐng)求的原始格式

WebForm: 請(qǐng)求的表單格式

Json:請(qǐng)求的Json格式請(qǐng)求

XML:請(qǐng)求的XML格式

AutoResponsder: 自動(dòng)回復(fù)凭峡,可用于構(gòu)造響應(yīng)拙已,Mock,不修改服務(wù)器文件調(diào)試接口

Composer: 設(shè)計(jì)者, 發(fā)送和調(diào)試請(qǐng)求

FidderScript:

Filters: 過(guò)濾器

Hosts: 按服務(wù)器過(guò)濾

Clients Process: 按客戶端程序過(guò)濾

Request Headers: 按請(qǐng)求頭過(guò)濾

Breakpoints: 設(shè)置斷點(diǎn)

Response Status Code: 按狀態(tài)碼過(guò)濾

Response Type and Size: 按響應(yīng)類(lèi)型及大學(xué)過(guò)濾

Response Headers: 按響應(yīng)頭過(guò)濾

3想罕、自動(dòng)斷點(diǎn)設(shè)置

菜單Rules -> Automatic Breakpoints -> Before Requests/After Requests

五悠栓、postman使用

1霉涨、環(huán)境變量使用方法:

選擇環(huán)境按价,在 請(qǐng)求URL或者請(qǐng)求Body里使用{{變量名}}來(lái)使用環(huán)境變量,變量可以在請(qǐng)求Body的各種格式中使用笙瑟,但不能直接在請(qǐng)求前腳本(Pre-request Script)和請(qǐng)求后腳本(Tests)中使用

環(huán)境管理中還可以點(diǎn)擊“Global”添加全局變量楼镐,環(huán)境變量只有當(dāng)選擇了該環(huán)境時(shí)生效,全局變量在任何環(huán)境中生效往枷,測(cè)試集中的變量只在當(dāng)前測(cè)試集生效框产,當(dāng)測(cè)試集變量,環(huán)境變量错洁,全局變量有重復(fù)的變量名時(shí)秉宿,優(yōu)先級(jí)為:環(huán)境變量>全局變量>測(cè)試集變量

2、Params使用

當(dāng)請(qǐng)求URL中參數(shù)很多時(shí)屯碴,不方便進(jìn)行添加和查看描睦,可以點(diǎn)擊URL輸入框后的Params按鈕,以表格的方式添加變量及值导而,從表格添加后忱叭,變量和值會(huì)自動(dòng)添加到URL中

請(qǐng)求設(shè)計(jì)

授權(quán):如果接口需要授權(quán)隔崎,可以在該頁(yè)面設(shè)置授權(quán)方式(type)和授權(quán)信息

Header: 請(qǐng)求頭,可以設(shè)置請(qǐng)求類(lèi)型(Content-Type)和Cookie

Body: 請(qǐng)求數(shù)據(jù)

form-data:混合表單韵丑,支持上傳文件

x-www-form-urlencoded:文本表單

raw:原始格式爵卒,支持JSON/XML格式(后面可選擇)

binary: 二進(jìn)制格式,用于發(fā)送二進(jìn)制數(shù)據(jù)流

Pre-request Script: 請(qǐng)求前腳本撵彻,Javascript語(yǔ)法钓株,用于在發(fā)送請(qǐng)求前生成一些動(dòng)態(tài)數(shù)據(jù)或做一些處理

Tests:請(qǐng)求后腳本,Javascript語(yǔ)法陌僵,用于請(qǐng)求返回后做一些處理或斷言結(jié)果

Tests斷言

HTTP狀態(tài)碼斷言:

tests["HTTP狀態(tài)碼200"]=responseCode.code==200;

響應(yīng)包含內(nèi)容斷言:

tests["狀態(tài)碼200"] = responseBody.has("登錄成功");

JSON響應(yīng)斷言

varjsonData =JSON.parse(responseBody);tests["code為200"] =jsonData.code==200tests["msg為success"] =jsonData.msg =="success"

Runner: 測(cè)試集批量執(zhí)行

支持設(shè)置迭代次數(shù)

支持加載csv或json類(lèi)測(cè)試數(shù)據(jù)

在電腦上新建一個(gè)data.csv文件享幽,第一行為變量名,下面是數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拾弃,一起剝皮案震驚了整個(gè)濱河市值桩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豪椿,老刑警劉巖奔坟,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異搭盾,居然都是意外死亡咳秉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)鸯隅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)澜建,“玉大人,你說(shuō)我怎么就攤上這事蝌以】欢妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵跟畅,是天一觀的道長(zhǎng)咽筋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)徊件,這世上最難降的妖魔是什么奸攻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮虱痕,結(jié)果婚禮上睹耐,老公的妹妹穿的比我還像新娘。我一直安慰自己部翘,他們只是感情好硝训,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般捎迫。 火紅的嫁衣襯著肌膚如雪晃酒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天窄绒,我揣著相機(jī)與錄音贝次,去河邊找鬼。 笑死彰导,一個(gè)胖子當(dāng)著我的面吹牛蛔翅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播位谋,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼山析,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了掏父?” 一聲冷哼從身側(cè)響起笋轨,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赊淑,沒(méi)想到半個(gè)月后爵政,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陶缺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年钾挟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饱岸。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掺出,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苫费,到底是詐尸還是另有隱情汤锨,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布黍衙,位于F島的核電站泥畅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏琅翻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一柑贞、第九天 我趴在偏房一處隱蔽的房頂上張望方椎。 院中可真熱鬧,春花似錦钧嘶、人聲如沸棠众。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闸拿。三九已至空盼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間新荤,已是汗流浹背揽趾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苛骨,地道東北人篱瞎。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像痒芝,于是被迫代替她去往敵國(guó)和親俐筋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容