Python接口測(cè)試實(shí)戰(zhàn)1(上)- 接口測(cè)試?yán)碚?/h1>

簡(jiǎn)書已停更赔桌,歡迎轉(zhuǎn)到個(gè)人博客查看對(duì)應(yīng)教程:https://www.cnblogs.com/superhin/p/10338915.html

課程目錄

Python接口測(cè)試實(shí)戰(zhàn)1(上)- 接口測(cè)試?yán)碚?/a>
Python接口測(cè)試實(shí)戰(zhàn)1(下)- 接口測(cè)試工具的使用
Python接口測(cè)試實(shí)戰(zhàn)2 - 使用Python發(fā)送請(qǐng)求
Python接口測(cè)試實(shí)戰(zhàn)3(上)- Python操作數(shù)據(jù)庫(kù)
Python接口測(cè)試實(shí)戰(zhàn)3(下)- unittest測(cè)試框架
Python接口測(cè)試實(shí)戰(zhàn)4(上) - 接口測(cè)試框架實(shí)戰(zhàn)
Python接口測(cè)試實(shí)戰(zhàn)4(下) - 框架完善:用例基類筒捺,用例標(biāo)簽贴硫,重新運(yùn)行上次失敗用例
Python接口測(cè)試實(shí)戰(zhàn)5(上) - Git及Jenkins持續(xù)集成
Python接口測(cè)試實(shí)戰(zhàn)5(下) - RESTful简逮、Web Service及Mock Server

更多學(xué)習(xí)資料請(qǐng)加添加作者微信:superz-han獲取

本節(jié)內(nèi)容

  • 接口及接口測(cè)試
  • 網(wǎng)絡(luò)基礎(chǔ)知識(shí):IP,域名, DNS及端口
  • 網(wǎng)絡(luò)基礎(chǔ)知識(shí):OSI七層模型及TCP協(xié)議
  • HTTP協(xié)議

接口及接口測(cè)試

這里插播一個(gè)段子


app隨手機(jī)殼變色

上圖中骨杂,程序員口中提到的接口是什么意思呢迅脐?
手機(jī)殼有沒有顏色這個(gè)屬性(功能)娃肿? --- 有
手機(jī)殼有沒有提供讓程序獲取它顏色的途徑? --- 沒有黍衙,這個(gè)途徑就是接口

接口的概念

接口又稱API(Application Programming Interface,應(yīng)用程序編程接口)泥畅,是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力们豌,而又無需訪問源碼涯捻,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)浅妆。

簡(jiǎn)單概括為以下3點(diǎn):

  • 程序代碼(函數(shù)方法)
  • 屏蔽實(shí)現(xiàn)細(xì)節(jié)
  • 可以被訪問/調(diào)用來獲取信息或?qū)崿F(xiàn)某些功能(提供訪問地址望迎,定義了訪問規(guī)則)

接口自述(通俗的來說):

  • 首先我有一些功能(功能函數(shù))
  • 你不用關(guān)心我怎么實(shí)現(xiàn)的(屏蔽細(xì)節(jié))
  • 我會(huì)給你一個(gè)我的地址(接口地址)
  • 你按照地址找到我,按照我規(guī)定的格式(請(qǐng)求類型)告訴我所需要的信息(參數(shù))就行
  • 我會(huì)給你個(gè)反饋(相應(yīng)信息)

舉個(gè)栗子:
西虹市公考報(bào)名處 --- 接口名稱
報(bào)名地址: 西虹市街口區(qū)帶莫路3號(hào) --- 接口地址
現(xiàn)場(chǎng)需填寫資料: 姓名凌外,身份證證號(hào)碼辩尊,專業(yè),報(bào)考崗位等等 --- 接口參數(shù)
驗(yàn)證規(guī)則: --- 參數(shù)驗(yàn)證規(guī)則

  • 身份證需與本人一致
  • 專業(yè)需與報(bào)考崗位符合
  • 報(bào)名時(shí)間 2024.8.22-2024.8.30
    現(xiàn)場(chǎng)會(huì)給出是否報(bào)名成功 --- 接口響應(yīng)信息

軟件中的接口

接口處理過程

軟件項(xiàng)目中康辑,接口是系統(tǒng)與系統(tǒng)之間摄欲,模塊與模塊之間或者服務(wù)于服務(wù)之間相互調(diào)用的入口。
從開發(fā)者角度疮薇,接口是分工協(xié)作的產(chǎn)物胸墙,不同開發(fā)者實(shí)現(xiàn)自己的功能之后,封裝成接口按咒,供其他開發(fā)者調(diào)用迟隅。其他開發(fā)者只要按規(guī)定格式發(fā)送一些必要參數(shù),就能使用該功能


接口交互場(chǎng)景

常見接口類型?
HTTP接口智袭,RPC接口奔缠,Web Service接口, Dubble接口吼野,RESTful接口校哎,其中RESTful接口是基于HTTP接口的,Web Service及Dubble屬于RPC接口

  • HTTP接口:通過HTTP協(xié)議傳輸?shù)慕涌谕剑梢詡鬏斘谋颈韱螖?shù)據(jù)闷哆,也可以傳輸Json類型的對(duì)象數(shù)據(jù)或xml類型的數(shù)據(jù)
  • RPC: 遠(yuǎn)程方法調(diào)用,隨著分布式系統(tǒng)的出現(xiàn),當(dāng)你需要調(diào)用部署到其他服務(wù)器上的方法時(shí),需要用到RPC忍饰。RPC只是提出了這樣一個(gè)問題前普,有很多種解決方案,比如WebService(基于SOAP協(xié)議)抛蚁, REST(基于HTTP協(xié)議)。
  • SOAP: 簡(jiǎn)單面向?qū)ο髤f(xié)議,基于HTTP绕沈,使用xml作為默認(rèn)傳輸格式
  • Web Service: 基于SOAP協(xié)議的一種RPC實(shí)現(xiàn)方案。相比傳統(tǒng)的HTTP接口只傳輸文本請(qǐng)求和文本相應(yīng)帮寻,通過Web Service可以直接拿到遠(yuǎn)程的一個(gè)對(duì)象乍狐,并能夠直接調(diào)用該對(duì)象的屬性和方法,比HTTP更高級(jí)固逗。
  • REST/RESTful API: REST浅蚪,表述性狀態(tài)轉(zhuǎn)移。一種HTTP接口的設(shè)計(jì)風(fēng)格烫罩,將一切接口視為資源惜傲,要求接口路徑同意管理,分版本管理贝攒,規(guī)定了GET/POST等請(qǐng)求以及HTTP狀態(tài)碼的使用規(guī)范盗誊,默認(rèn)使用JSON格式傳輸。RESTful API即滿足REST風(fēng)格即設(shè)計(jì)規(guī)范的API接口


    相互關(guān)系

什么是接口測(cè)試隘弊?

接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試哈踱。接口測(cè)試主要用于檢測(cè)外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)
子系統(tǒng)之間的交互點(diǎn)。測(cè)試的重點(diǎn)是要檢查數(shù)據(jù)的交換梨熙、傳遞和控制管理過程开镣,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。

為什么要做接口測(cè)試咽扇?

  • 接口測(cè)試介于單元測(cè)試與系統(tǒng)測(cè)試之間邪财,單元測(cè)試一般由開發(fā)完成(不要相信開發(fā))
  • 接口是各種系統(tǒng)功能的基礎(chǔ)舅列,一旦接口出現(xiàn)問題可能會(huì)引起許多系統(tǒng)功能的問題并且不容易定位
  • 開展接口測(cè)試可以及早發(fā)現(xiàn)問題,有效降低測(cè)試成本
  • 接口一般較UI相對(duì)穩(wěn)定卧蜓,利于進(jìn)行自動(dòng)化和持續(xù)集成

接口測(cè)試都測(cè)什么帐要?
接口測(cè)試一般有以下崗位實(shí)施:

  • 手工測(cè)試崗:先提測(cè)接口再提出功能,兼做接口自動(dòng)化
  • 服務(wù)端測(cè)試崗:梳理代碼弥奸,審核接口實(shí)現(xiàn)邏輯是否與業(yè)務(wù)設(shè)計(jì)一致榨惠,技術(shù)實(shí)現(xiàn)邏輯的合理性,異常流測(cè)試盛霎,接口壓測(cè)及安全性測(cè)試
  • 測(cè)試開發(fā)崗:專職做接口(或UI)的自動(dòng)化用例開發(fā)赠橙,測(cè)試工具開發(fā)

接口測(cè)試點(diǎn)參考:


服務(wù)端接口測(cè)試

怎樣掌握接口測(cè)試?

  1. 了解OSI網(wǎng)絡(luò)模型愤炸,TCP/UDP協(xié)議期揪,掌握HTTP/HTTPS協(xié)議,了解RPC, Web Service及REST规个,理解Session和Cookie
  2. 掌握常用的接口測(cè)試工具如curl命令,Postman,Jmeter,LR,SoupUI,AB等
  3. 掌握基本的抓包工具如Chrome開發(fā)者工具,Fiddler,Charles,Wireshark,tcpdumps等
  4. 掌握一門編程語(yǔ)言Python或Java
  5. 了解Nginx, Apache, Tomcat等服務(wù)器中間件
  6. 掌握數(shù)據(jù)庫(kù)基本查詢命令凤薛,及一些NoSQL(如Redis)操作,用于檢查響應(yīng)結(jié)果
  7. 掌握基本的Linux日子查詢和篩選命令

接口測(cè)試重難點(diǎn)

  1. 動(dòng)態(tài)變量參數(shù)化
  2. 接口依賴及中間變量問題
  3. 異步接口結(jié)果驗(yàn)證問題
  4. 相應(yīng)參數(shù)及嵌套很多的驗(yàn)證問題
  5. 接口測(cè)試框架的穩(wěn)定性問題
  6. 資源清理問題
  7. 多接口場(chǎng)景測(cè)試
    ...

網(wǎng)絡(luò)基礎(chǔ)知識(shí):IP,域名, DNS及端口

IP地址

就像每個(gè)人都有一個(gè)身份證號(hào)碼
IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式诞仓,它為互聯(lián)網(wǎng)上的每一個(gè)網(wǎng)絡(luò)和每一臺(tái)主機(jī)分配一個(gè)邏輯地址

ip地址

查看IP命令

  • Windows: ipconfig
  • Linux: ifconfig

Python練習(xí):檢查字符串是否ip

def is_ip(ip):
    num_list = ip.split(".")
    if len(num_list) != 4:
        return False
    for num in num_list:
        if num.lstrip('0')!=num or not num.isdigit() or not 0 <= int(num) <=255:
            return False
    return True

print(is_ip("101.1.0.201"))

使用map函數(shù)實(shí)現(xiàn)方法(參考)

def  check_ipv4(ip_str):
    ip = ip_str.strip().split(".")
    return len(ip)==4 and all(map(lambda x: x.lstrip('0')==x and x.isdigit() and 0<=int(x)<= 255, ip))

端口

"端口"是英文port的意譯缤苫,可以認(rèn)為是設(shè)備與外界通訊交流的出口。
如果把IP地址比作一間房子墅拭,端口就是出入這間房子的門活玲。一個(gè)IP地址的端口可以有65536(即:2^16)個(gè)
端口類型

  • 公認(rèn)端口:從0到1023,緊密綁定于一些服務(wù)
  • 注冊(cè)端口:人1024到49151谍婉,許多服務(wù)綁定這些端口舒憾,這些端口同樣用于許多其它目的。
  • 動(dòng)態(tài)或私有端口:從49152到65535穗熬。理論上镀迂,不應(yīng)為服務(wù)分配這此端口。實(shí)際上死陆,機(jī)器通常從1024起分配動(dòng)態(tài)端口招拙。
    常見軟件默認(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
端口查看

解決端口占用問題

  • Windows: netstat -ano | findstr "8080",找到占用端口的程序的PID -> 打開任務(wù)管理器 -> 設(shè)置顯示PID -> 找到并結(jié)束對(duì)于程序
  • Linux: netstat -ntlp | grep "8080", 找到對(duì)應(yīng)的程序 -> ps -ef | grep "程序名" 找到對(duì)于的pid -> kill 相應(yīng)的id

域名及DNS

由于IP地址不容易記憶,為IP地址賦予了一個(gè)利于記憶的別名措译,稱為域名
如,百度的ip為: 61.135.169.125饰序,對(duì)應(yīng)的域名為 www.baidu.com

域名及ip

如何查看域名所對(duì)于的ip领虹?

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

網(wǎng)絡(luò)基礎(chǔ)知識(shí):OSI七層模型及TCP協(xié)議

OSI七層模型

OSI即開放系統(tǒng)互連參考模型塌衰,一種網(wǎng)絡(luò)架構(gòu)诉稍,分為7層。

OSI網(wǎng)絡(luò)模型
  • 上三層---應(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ù)流層亡嫌,用來管理硬件
    • 傳輸層:提供端對(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
      OSI七層模型及各層協(xié)議

TCP及UDP協(xié)議

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

  • TCP:傳輸控制協(xié)議
  • UDP: 數(shù)據(jù)報(bào)文協(xié)議

TCP和UDP的區(qū)別

  • UDP的特點(diǎn)如下:
  1. 無鏈接
  2. UDP使用盡最大努力交付,不保證可靠性
  3. UDP是面向報(bào)文的竹伸,UDP對(duì)應(yīng)用層交付下來的報(bào)文泥栖,既不合并,也不拆分勋篓,而是保留這些報(bào)文的邊界吧享。應(yīng)用層交給UDP多長(zhǎng)的報(bào)文,UDP就照樣發(fā)送譬嚣,即一次發(fā)送一個(gè)報(bào)文
  4. UDP沒有擁塞控制
  5. UDP支持一對(duì)一钢颂、一對(duì)多、多對(duì)一和多對(duì)多的交互通信
  6. UDP的首部開銷小拜银,只有8字節(jié)
  • TCP的特點(diǎn):
  1. TCP是面向連接的
  2. 每條TCP連接只能用于兩個(gè)斷點(diǎn)殊鞭,一對(duì)一
  3. TCP提供可靠交付的服務(wù):連接傳輸數(shù)據(jù)遭垛、無差錯(cuò)、不丟失操灿、不重復(fù)锯仪、并且按序到達(dá)
  4. TCP提供全雙工通信
  5. 面向字節(jié)流。TCP根據(jù)對(duì)方給出的窗口和當(dāng)前網(wǎng)絡(luò)擁塞的程度來決定一個(gè)報(bào)文應(yīng)該包含多少個(gè)字節(jié)

參考:TCP和UDP協(xié)議的對(duì)比

HTTP協(xié)議

HTTP:超文本傳輸協(xié)議趾盐,是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議庶喜。
HTTP協(xié)議是一種無狀態(tài)協(xié)議,主要包含請(qǐng)求和相應(yīng)兩大部分:

請(qǐng)求(Request)

請(qǐng)求是我們發(fā)送給接口的數(shù)據(jù)對(duì)象谤碳,包含接口地址(URL)溃卡,請(qǐng)求方法,參數(shù)蜒简,請(qǐng)求頭(Headers), Cookies, 數(shù)據(jù)等
真實(shí)抓包一個(gè)請(qǐng)求:

抓包請(qǐng)求

請(qǐng)求原始格式-GET(Raw格式:Fiddler抓包得到)

GET https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC HTTP/1.1
Host: www.sojson.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: __cfduid=dccd65c484a7657b468327b66023fefc41534934250; yjs_id=59d1c42afa817b578b4b562d1f72651f; ctrl_time=1


  • 第1行: 請(qǐng)求方法 接口地址 HTTP協(xié)議版本
  • 第2-N行:請(qǐng)求headers(如果有Cookie瘸羡,最后一行為Cookie)
  • 空一行
  • 請(qǐng)求數(shù)據(jù)(POST等方法使用,此處為空)

請(qǐng)求原始格式-POST請(qǐng)求(Raw格式:Fiddler抓包得到)

POST http://openapi.tuling123.com/openapi/api/v2 HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: 1a39439e-61c8-4e59-82a1-736a362c5962
User-Agent: PostmanRuntime/7.2.0
Accept: */*
Host: openapi.tuling123.com
accept-encoding: gzip, deflate
content-length: 468
Connection: keep-alive

{
    "reqType":0,
    "perception": {
        "inputText": {
            "text": "附近的酒店"
        },
        "inputImage": {
            "url": "imageUrl"
        },
        "selfInfo": {
            "location": {
                "city": "北京",
                "province": "北京",
                "street": "信息路"
            }
        }
    },
    "userInfo": {
        "apiKey": "ec961279f453459b9248f0aeb6600bbe",
        "userId": "206379"
    }
}

URL

URL:統(tǒng)一資源定位符搓茬,接口的訪問地址(包含服務(wù)器地址+接口地址)

URL組成格式

協(xié)議\\: 服務(wù)器地址:端口號(hào)\資源路徑?參數(shù)1=值1&參數(shù)2=值2

如:https://www.sojson.com/open/api/weather/json.shtml?city=北京

注意:?號(hào)要使用英文?,不能使用中文犹赖?

URL編碼
URL編碼是一種瀏覽器用來打包請(qǐng)求參數(shù)及表單參數(shù)的格式, 參數(shù)和參數(shù)之間使用&分割,非ASCII碼使用%加16進(jìn)制編碼替換
如:https://www.sojson.com/open/api/weather/json.shtml?city=北京
編碼后為:https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC

鏈接:URL編碼/解碼工具(http://tool.chinaz.com/Tools/urlencode.aspx)

請(qǐng)求方法

序號(hào) 方法 描述
1 GET 請(qǐng)求指定的頁(yè)面信息卷仑,并返回實(shí)體主體
2 POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)數(shù)據(jù)被包含在請(qǐng)求體中
3 HEAD 類似于get請(qǐng)求峻村,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報(bào)頭
4 PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容
5 DELETE 請(qǐng)求服務(wù)器刪除指定的頁(yè)面
6 CONNECT 預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器
7 OPTIONS 允許客戶端查看服務(wù)器的性能
8 TRACE 回顯服務(wù)器收到的請(qǐng)求锡凝,主要用于測(cè)試或診斷

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

  • GET請(qǐng)求:

    • GET請(qǐng)求可被緩存
    • GET請(qǐng)求保留在瀏覽器歷史記錄中
    • GET請(qǐng)求可被收藏為書簽
    • 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不能被收藏為書簽
    • POST請(qǐng)求對(duì)數(shù)據(jù)長(zhǎng)度沒有要求

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

如:https://www.sojson.com/open/api/weather/json.shtml?city=北京

  • 中的city=北京,向接口傳遞一個(gè)參數(shù)“city”,參數(shù)值為“北京”
  • 不同的參數(shù)之間用&隔開粘昨,非ASCII碼參數(shù)會(huì)自動(dòng)url encode

請(qǐng)求Headers(請(qǐng)求頭)

常見Headers

常見Headers

請(qǐng)求數(shù)據(jù)(又稱為Request Body 或 Data)

請(qǐng)求數(shù)據(jù)類型(Content-Type)(重點(diǎn))

  • application/x-www-form-urlencoded: 網(wǎng)頁(yè)表單格式(默認(rèn))
  • application/json:REST接口常用格式
  • text/xml:xml格式,RPC接口窜锯,Dubbo接口常用格式
  • test/html: html格式
  • multipart/form-data: 混合表單张肾,支持上傳圖片

數(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 編碼方式迹栓,又稱萬國(guó)碼

指定請(qǐng)求數(shù)據(jù)編碼(解決中文亂碼):
請(qǐng)求Headers設(shè)置Content-Type: application/json; charset=utf-8

  • Base64: 一種用64個(gè)字符來表示任意二進(jìn)制數(shù)據(jù)的方法。
    • Base64編碼的作用:由于某些系統(tǒng)中只能使用ASCII字符俭缓。Base64就是用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法克伊。
    • 而且base64特別適合在http,mime協(xié)議下快速傳輸數(shù)據(jù)华坦。
Base64在接口中的的使用

參考:Base64編碼及其作用

響應(yīng)(Response)

接口返回的信息愿吹,包含HTTP狀態(tài)碼,響應(yīng)頭和相應(yīng)信息

原始相應(yīng)數(shù)據(jù)(Raw格式惜姐,F(xiàn)iddler抓包)

HTTP/1.1 200 OK
Date: Thu, 23 Aug 2018 06:32:26 GMT
Transfer-Encoding: chunked
Connection: keep-alive

22b
{"intent":{"actionName":"","code":10005,"intentName":"","parameters":{"lon":"","checkout_date":"2018-08-25","star":"0","city":"北京","days":"1","order":"","price_range":"","nearby_place":"酒店","brand":"","checkin_date":"2018-08-24","place":"信息路","lat":"","needgeo":"0"}},"results":[{"groupType":1,"resultType":"url","values":{"url":"http://m.elong.com/hotel/0101/nlist/#indate=2018-08-24&outdate=2018-08-25&keywords=%E4%BF%A1%E6%81%AF%E8%B7%AF"}},{"groupType":1,"resultType":"text","values":{"text":"親犁跪,已幫你找到相關(guān)酒店信息"}}]}
0

常見的響應(yīng)格式有:

  • html
  • json
  • xml

響應(yīng)編碼:有時(shí)需要根據(jù)不同的編碼來正確解析響應(yīng)內(nèi)容

HTTP狀態(tài)碼

  • 1** 信息,服務(wù)器收到請(qǐng)求歹袁,需要請(qǐng)求者繼續(xù)執(zhí)行操作
  • 2** 成功坷衍,操作被成功接收并處理
  • 3** 重定向,需要進(jìn)一步的操作以完成請(qǐng)求
  • 4** 客戶端錯(cuò)誤条舔,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無法完成請(qǐng)求
  • 5** 服務(wù)器錯(cuò)誤枫耳,服務(wù)器在處理請(qǐng)求的過程中發(fā)生了錯(cuò)誤

常見HTTP響應(yīng)碼

  • 200: 成功
  • 301/302: 請(qǐng)求重定向到另外一個(gè)接口
  • 400: 請(qǐng)求語(yǔ)法錯(cuò)誤
  • 403:資源沒有訪問權(quán)限
  • 404:資源不存在(有可能是請(qǐng)求url錯(cuò)誤或參數(shù)不正確)
  • 405:請(qǐng)求方法不被允許(比如接口只允許Post,使用Get請(qǐng)求接口)
  • 500:服務(wù)器內(nèi)部錯(cuò)誤(通常是服務(wù)器掛了或接口Bug)
  • 502: 網(wǎng)關(guān)失效
  • 504: 網(wǎng)關(guān)請(qǐng)求超時(shí)

HTTP與HTTPS

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)證書凄硼,一般免費(fèi)證書較少铅协,因而需要一定費(fèi)用。
  • HTTP是超文本傳輸協(xié)議摊沉,信息是明文傳輸狐史,HTTPS則是具有安全性的SSL加密傳輸協(xié)議。
  • HTTP和HTTPS使用的是完全不同的連接方式说墨,用的端口也不一樣骏全,前者是80,后者是443婉刀。
  • HTTP的連接很簡(jiǎn)單吟温,是無狀態(tài)的;HTTPS協(xié)議是由HTTP+SSL協(xié)議構(gòu)建的可進(jìn)行加密傳輸突颊、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議鲁豪,比HTTP協(xié)議安全。

Cookie和Session

  • Cookie/Cookies: 是指某些網(wǎng)站為了辨別用戶身份律秃、進(jìn)行session跟蹤儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)爬橡。
  • Session:服務(wù)端為客戶端訪問所建立和維持的會(huì)話,通常會(huì)生成一個(gè)唯一的id棒动,會(huì)話有一定的有效期糙申。
    由于HTTP是無狀態(tài)的,即服務(wù)器不知道用戶上一次做了什么船惨,默認(rèn)也無法識(shí)別用戶身份柜裸。
    比較流行的做法是:
  • 用戶訪問時(shí)服務(wù)端建立會(huì)話(Session)
  • 將會(huì)話id(Session ID)隨響應(yīng)返回缕陕,并保存在客戶端的Cookies里
  • 后續(xù)的訪問中,服務(wù)器通過辨識(shí)疙挺,客戶端請(qǐng)求時(shí)攜帶的Cookies內(nèi)容來識(shí)別用戶


    用戶首次訪問服務(wù)器向客戶端設(shè)置Cookie

    后續(xù)訪問時(shí)攜帶Cookie

Cookie和Session的區(qū)別

  • cookie是存在客戶端(瀏覽器)的進(jìn)程內(nèi)存中和客戶端所在的機(jī)器硬盤上
  • 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ì)回收

授權(quán)與加密

常見的接口安全策略:

  1. Session/Cookie機(jī)制: 即需要登錄,登錄后可訪問各個(gè)接口自点,最常用的一種策略桐罕,適用于內(nèi)部接口。
  2. 固定appid模式: 用戶注冊(cè)時(shí)會(huì)生成一個(gè)唯一的appid樟氢,用戶調(diào)用接口時(shí)需要攜帶appid冈绊,適用于公開接口,安全性較差埠啃。
  3. 動(dòng)態(tài)token模式: token即身份令牌死宣,用戶訪問接口需要使用個(gè)人appid臨時(shí)申請(qǐng)一個(gè)token,token有一定有效期碴开,適用于公開接口毅该,安全性較appid模式好。
  4. 開放協(xié)議: Basic Auth/ Oauth1.0 / Oauth2.0: 適用于開放接口潦牛。
  5. 數(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ù)接口。
    常見的加密算法
    在接口數(shù)據(jù)傳輸過程中常對(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: 最常用的一種加密方法俱尼,是一種摘要算法抖单。

緩存

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)注緩存的命中率
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市囚玫,隨后出現(xiàn)的幾起案子喧锦,更是在濱河造成了極大的恐慌,老刑警劉巖抓督,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燃少,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铃在,警方通過查閱死者的電腦和手機(jī)阵具,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來定铜,“玉大人阳液,你說我怎么就攤上這事〈Э唬” “怎么了帘皿?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)畸陡。 經(jīng)常有香客問我鹰溜,道長(zhǎng),這世上最難降的妖魔是什么罩锐? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任奉狈,我火速辦了婚禮,結(jié)果婚禮上涩惑,老公的妹妹穿的比我還像新娘仁期。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布跛蛋。 她就那樣靜靜地躺著熬的,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赊级。 梳的紋絲不亂的頭發(fā)上押框,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音理逊,去河邊找鬼橡伞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晋被,可吹牛的內(nèi)容都是我干的兑徘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼羡洛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挂脑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起欲侮,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤崭闲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后威蕉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刁俭,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年忘伞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薄翅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氓奈,死狀恐怖翘魄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舀奶,我是刑警寧澤暑竟,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站育勺,受9級(jí)特大地震影響但荤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涧至,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一腹躁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧南蓬,春花似錦纺非、人聲如沸哑了。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弱左。三九已至,卻和暖如春炕淮,著一層夾襖步出監(jiān)牢的瞬間拆火,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工涂圆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留们镜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓乘综,卻偏偏與公主長(zhǎng)得像憎账,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卡辰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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

  • 本節(jié)內(nèi)容 接口及接口測(cè)試 網(wǎng)絡(luò)基礎(chǔ)知識(shí):IP,域名, DNS及端口 網(wǎng)絡(luò)基礎(chǔ)知識(shí):OSI七層模型及TCP協(xié)議 HT...
    半成品yjf閱讀 829評(píng)論 0 0
  • 1.TCP報(bào)頭格式 UDP報(bào)頭格式 TCP報(bào)頭格式 UDP報(bào)頭格式 具體的各部分解釋看 TCP報(bào)文格式詳解 - ...
    杰倫哎呦哎呦閱讀 2,458評(píng)論 0 5
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記邪意,這雖然只是...
    貳零壹柒_fc10閱讀 5,055評(píng)論 0 8
  • 雙宋大婚啦,有粉絲失望策菜,有CP粉很激動(dòng)晶疼。 沒有看過《太陽(yáng)的后裔》的姐,不知道會(huì)不會(huì)錯(cuò)過了太多別人口中“愛情最美的樣...
    貴圈塵姐閱讀 273評(píng)論 0 1
  • 敬愛的李老師又憨,智慧的馬教授翠霍,親愛的躍友們: 大家好!我是來自山峰教外教育的張洪霞 今天是我的日精進(jìn)行動(dòng)第11...
    洪霞張閱讀 137評(píng)論 0 0