1. 程式人生 > 實用技巧 >測試面試題合集3(測試相關)

測試面試題合集3(測試相關)

1、cookie 和 session 的區別

http 請求無狀態

session 在伺服器端,cookie 在客戶端(瀏覽器)

session 預設被存在在伺服器的一個檔案裡(不是記憶體)

session 的執行依賴 session id(隨機字串),而 session id 是存在 cookie 中的,也就是說,如果瀏覽器禁用了 cookie,同時 session 也會失效(但是可以通過其它方式實現,比如在 url 中傳遞 session_id)

session 可以放在 檔案、資料庫、或記憶體中都可以。維持 session 以及多機器同步 session 需要耗費大量資源。

token(令牌) 用演算法對使用者資料進行加密,返回給客戶端一個 token,下次使用者請求的時候放到 http header 裡面傳給伺服器。伺服器進行解密使用。

2、簡述 http 請求中 get 和 post 的區別,常見的 post 提交資料型別以及區別

HTTP 定義了與伺服器互動的不同方法,常用的有 4 種,Put(增),Delete(刪),Post(改),Get(查),即增刪改查。最常用的是 get 和 post。

get 請求 url,可以帶引數,引數用?與 url 分開,多個引數以&拼接 形式 http://url?key=value&key2=value2... (url 過長會提示 414 錯誤)

post 向指定的 url 提交資料

常見 3 種提交方式

application/x-www-form-urlencoded,key1=val1&key2=val2

application/json,son 格式

form-data,生成了一個 boundary 用於分割不同的欄位,可以上傳檔案

3、app 效能測試

關注一些引數 FPS、Jank、FTime、CPU、GPU、Memory、Battery 、Network、CTemp等效能引數

4、用 python 獲取請求的狀態碼,常見的狀態碼有哪些
import requests
r = requests.get('https://www.baidu.com')
print(r.status_code)

常見狀態碼: 200,301,400,404,500,503等

不應以狀態碼判斷業務是否正常,在效能或者介面測試中,狀態碼返回 200,業務可能已經錯誤。

5、描述 tcp/ip 協議的層次結構,以及每一層中的協議

1.鏈路層(資料鏈路層/網路介面層):包括作業系統中的裝置驅動程式、計算機中對應的網路介面卡

2.網路層(網際網路層):處理分組在網路中的活動,比如分組的選路。

3.運輸層:主要為兩臺主機上的應用提供端到端的通訊。

4.應用層:負責處理特定的應用程式細節。

6、常見的 http 協議除錯代理工具有哪些,怎麼抓取 https 協議

fiddler、charles 等

簡單的說安裝工具帶的證書,匯入的信任證書欄,工具裡開啟抓取 https 選項。

7、fiddler 怎麼抓 app

fiddler抓取手機app資料

8、簡述一次完整的 http 事務過程

• 域名解析

• 發起TCP3次握手

• 建立TCP連線後發起http請求

• 伺服器響應請求,返回結果

• 瀏覽器得到html標籤程式碼

• 瀏覽器解析html程式碼中的資源,例如js,css,img等

• 瀏覽器對頁面進行渲染並呈現給使用者

9、http 請求 header 中有哪些常用的 tag

"headers": {

"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",

"Cookie": "UM_distinctid=173b70175043d8-0eab64d97191f6-43450521-1fa400-173b7017505807; CNZZDATA1256793290=1446484856-1596499673-%7C1597822838",

"Dnt": "1",

"Host": "httpbin.org",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",

"X-Amzn-Trace-Id": "Root=1-5f58cae5-9dceb360c71bbe3c8cf56c8e"

}

10、為什麼 tcp 需要第三次握手,而不是兩次或者四次?

在 TCP/IP 協議中,TCP 協議提供可靠的連線服務,採用三次握手建立一個連線。

第一次握手:建立連線時,客戶端傳送 syn 包(syn=j)到伺服器,並進入 SYN_SEND 狀態,等待伺服器確認;

第二次握手:伺服器收到 syn 包,必須確認客戶的 SYN(ack=j+1),同時自己也傳送一個 SYN 包(syn=k),即 SYN+ACK 包,此時伺服器 進入 SYN_RECV 狀態;

第三次握手:客戶端收到伺服器的 SYN+ACK 包,向伺服器傳送確認包 ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入 ESTABLISHED 狀態,完成三次握手。

通過這樣的三次握手,客戶端與服務端建立起可靠的雙工的連線,開始傳送資料。

三次握手的最主要目的是保證連線是雙工的,可靠更多的是通過重傳機制來保證的。

(全雙工:指可以同時(瞬時)進行訊號的雙向傳輸(A→B且B→A)。指A→B的同時B→A,是瞬時同步的。

半雙工:指一個時間內只有一個方向的訊號傳輸(A→B或B→A)。)

兩次握手只能保證單向連線是暢通的。

Step1 A -> B : 你好,B。

Step2 A <- B : 收到。你好,A。

這樣的兩次握手過程,A 向 B 打招呼得到了迴應,即 A 向 B 傳送資料,B 是可以收到的。

但是 B 向 A 打招呼,A 還沒有迴應,B 沒有收到 A 的反饋,無法確保 A 可以收到 B 傳送的資料。

只有經過第三次握手,才能確保雙向都可以接收到對方的傳送的 資料。

Step3 A -> B : 收到,B。

這樣 B 才能確定 A 也可以收到 B 傳送給 A 的資料。

第二次握手,伺服器接受併發送(相當於兩次) ,可以提高連線的速度與效率 。所以不是 2 次和 4 次