8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案
1、python的數據類型有哪些
答:Python基本數據類型一般分為:數字、字符串、列表、元組、字典、集合這六種基本數據類型。
浮點型、復數類型、布爾型(布爾型就是只有兩個值的整型)、這幾種數字類型。列表、元組、字符串都是序列。
2、列表和元組的區別
答:列表是動態的,長度可變,可以隨意地增刪改元素。列表的存儲空間略大于元組,性能略遜于元組。
元組是靜態的,長度大小固定,不可以對元組元素進行增刪改操作。元組對于列表更加輕量級,性能稍優。
3、字典的原理
答:python中的字典底層依靠哈希表(hash table)實現, 使用開放尋址法解決沖突,
哈希表是key-value類型的數據結構, 可以理解為一個鍵值需要按照一定規則存放的數組, 而哈希函數就是這個規則
字典本質上是一個散列表(總有空白元素的數組, python至少保證1/3的數組是空的), 字典中的每個鍵都占用一個單元,
一個單元分為兩部分, 分別是對鍵的引用和對值的引用, 使用hash函數獲得鍵的散列值, 散列值對數組長度取余, 取得的值就是存放位置的索引
哈希沖突(數組的索引相同), 使用開放尋址法解決
這也是python中要求字典的key必須可hash的原因
數組中1/3的位置為空, 增加元素可能會導致擴容, 引發新的散列沖突, 導致新的散列表中鍵的次序發生變化, 這也是字典遍歷時不能添加和刪除的原因
字典在內存中開銷很大, 實際上是以空間換時間
4、說一下hash算法與哈希沖突
答:哈希算法:根據設定的哈希函數H(key)和處理沖突方法將一組關鍵字映象到一個有限的地址區間上的算法。也稱為散列算法、雜湊算法。
哈希表:數據經過哈希算法之后得到的集合。這樣關鍵字和數據在集合中的位置存在一定的關系,可以根據這種關系快速查詢。
非哈希表:與哈希表相對應,集合中的 數據和其存放位置沒任何關聯關系的集合。
由此可見,哈希算法是一種特殊的算法,能將任意數據散列后映射到有限的空間上,通常計算機軟件中用作快速查找或加密使用。
哈希沖突:由于哈希算法被計算的數據是無限的,而計算后的結果范圍有限,因此總會存在不同的數據經過計算后得到的值相同,這就是哈希沖突。
5、怎么解決哈希沖突
答:解決哈希沖突的方法一般有:開放定址法、鏈地址法(拉鏈法)、再哈希法、建立公共溢出區等方法。(https://www.cnblogs.com/zyyhxbs/p/12408604.html)
6、說下python的內存管理和垃圾回收機制
答:python的內存管理機制有三種:引用計數、垃圾回收、內存池。
引用計數:引用計數是一種非常高效的內存管理手段,當一個pyhton對象被引用時其引用計數增加1,當其不再被引用時引用計數減1,當引用計數等于0的時候,對象就被刪除了
垃圾回收:引用計數、標記清除、分代回收(https://www.jianshu.com/p/892aa84e5814)
內存池:Python提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。
Python中所有小于256個字節的對象都使用pymalloc實現的分配器,而大的對象則使用系統的 malloc。
另外Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。
也就是說如果你分配又釋放了大量的整數,用于緩存這些整數的內存就不能再分配給浮點數。
7、內存過大時你有什么調優手段
答:1.手動垃圾回收 2.避免循環引用(手動解循環引用和使用弱引用)3.調高垃圾回收閾值
8、請簡述下python的拷貝
答:1.賦值: 只是復制了新對象的引用,不會開辟新的內存空間。
2.淺拷貝: 創建新對象,其內容是原對象的引用。
淺拷貝有三種形式:切片操作,工廠函數,copy模塊中的copy函數。
如: lst = [1,2,3,[4,5]]
切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst] 要注意:list1=lst 和list1=lst[:]的區別
工廠函數:lst1 = list(lst)
copy函數:lst1 = copy.copy(lst)
淺拷貝之所以稱為淺拷貝,是它僅僅只拷貝了一層,在lst中有一個嵌套的list[4,5],如果我們修改了它,情況就不一樣了。
3.深拷貝:只有一種形式,copy模塊中的deepcopy函數。
和淺拷貝對應,深拷貝拷貝了對象的所有元素,包括多層嵌套的元素。
深拷貝出來的對象是一個全新的對象,不再與原來的對象有任何關聯。
#說明如下:
#1.外層添加元素時, 淺拷貝c不會隨原列表a變化而變化;內層list添加元素時,淺拷貝c才會變化。
#2.無論原列表a如何變化,深拷貝d都保持不變。
#3.賦值對象隨著原列表一起變化
9、請講一下協程的原理
答:我自己暫時也不清楚,還沒有自己的理解,資料如下:
運用協程機制最典型的場景就是異步IO。所謂異步,是指一段程序在執行完成前有能力“暫停”,讓其他程序段執行。
從語法上來看,協程和生成器類似,都是定義體中包含yield關鍵字的函數,所以總體上在協程中把yield看做是控制流程的方式。
協程是一個特殊的生成器,yield有返回值>生成器,yield沒有>協程(沒返回值就是協程)
(https://www.cnblogs.com/ajianbeyourself/p/11261302.html、https://www.cnblogs.com/yc3110/p/10443108.html)
10、數據庫的事務是什么
答:數據庫事務是指一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性
(https://www.cnblogs.com/chaojiyingxiong/p/11029406.html、https://blog.csdn.net/x_i_xw/article/details/81408656)
11、sql的多表聯查方式
答:內連接:JOIN / INNER JOIN、不等連接:ON 子句中使用了不等于運算符、自連接:一張表連接自身、左(外)連接:LEFT JOIN / LEFT OUTER JOIN、
右(外)連接:RIGHT JOIN / RIGHT OUTER JOIN、全(外)連接:FULL JOIN / FULL OUTER JOIN、交叉連接:CROSS JOIN (可用","代替)、
UNION 、UNION ALL操作符用于合并兩個或多個 SELECT 語句的結果集。
12、數據庫的存儲過程
答:一組為了完成特定功能的SQL語句集(或者自定義數據庫操作命令集), 根據傳入的參數(也可以沒有),
通過簡單的調用, 完成比單個SQL語句更復雜的功能, 存儲在數據庫服務器端,只需要編譯過一次之后再次使用都不需要再進行編譯:主要對存儲的過程進行控制
(https://www.runoob.com/w3cnote/mysql-stored-procedure.html)
13、數據庫的存儲過程與事務的異同
答:事務是保證多個SQL語句的原子型的,也就是要么一起完成,要么一起不完成
存儲過程是把一批SQL語句預編譯后放在服務器上,然后可以遠程調用
(https://www.jb51.net/article/158051.htm)
14、cookie與session的區別是什么
答:(1)Cookie以文本文件格式存儲在瀏覽器中,而session存儲在服務端,因為每次發起 Http 請求,都要攜帶有效Cookie信息,所以Cookie一般都有大小限制,以防止增加網絡壓力,一般不超過4k
(2)cookie的存儲限制了數據量,只允許4KB,而session是無限量的
(3)我們可以輕松訪問cookie值但是我們無法輕松訪問會話值,因此它更安全
(4)設置cookie時間可以使cookie過期。但是使用session-destory(),我們將會銷毀會話。
(https://baijiahao.baidu.com/s?id=1619095369231494766&wfr=spider&for=pc)
15、項目中能不能只使用SESSION,不使用COOKIE
答:可以,通過重定向的形式,把session id放在url后面,但是這樣做直接將把session id暴露出來了,于安全考慮不建議使用這樣的方式
(https://blog.csdn.net/weixin_40648117/article/details/78844100)
16、http和https的區別
答:1、https協議需要到CA (Certificate Authority,證書頒發機構)申請證書,一般免費證書較少,因而需要一定費用。(原來網易官網是http,而網易郵箱是https。)
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
4、http的連接很簡單,是無狀態的。Https協議是由SSL+Http協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
(無狀態的意思是其數據包的發送、傳輸和接收都是相互獨立的。無連接的意思是指通信雙方都不長久的維持對方的任何信息。)
(https://blog.csdn.net/guolin_blog/article/details/104546558、https://blog.csdn.net/qq_38289815/article/details/80969419)
17、https是非對稱加密還是對稱加密
答:Https的加密機制是一種共享密鑰加密和公開密鑰加密并用的混合加密機制。
握手前使用非對稱加密,連接后使用對稱加密,因為僅使用非對稱加密的話,會影響數據的傳輸效率
(https://blog.csdn.net/jiangshangchunjiezi/article/details/88545263)
18、啟動shell腳本的方式
答:1、工作目錄執行,指的是執行腳本時,先進入到腳本所在的目錄(此時,稱為工作目錄),然后使用 ./腳本方式執行
2、絕對路徑中執行,指的是直接從根目錄/到腳本目錄的絕對路徑
3、sh執行,指的是用腳本對應的sh或bash來接著腳本執行
4、shell環境執行,指的是在當前的shell環境中執行,可以使用 . 接腳本 或 source 接腳本
(https://www.jb51.net/article/161001.htm)
19、SQL與ORM的優缺點
答:相對來說,ORM的缺點就是SQL的優勢地方,而優點也是SQL的劣勢地方。
優點
方便的使用面向對象,語句清晰
防注入『這個其實不算ORM的核心,因為比如Phalcon的SQL形式寫法也可以防注入』
方便動態構造語句,對于不同的表的相同操作采用多態實現更優雅
一定程度方便重構數據層『比如改表名,字段名等』
設置鉤子函數
缺點
不太容易處理復雜查詢語句
性能較直接用SQL差
20、請講一下生產者消費者模型
答:生產者消費者模型設計要合理,如果生產者慢了,可以增加生產者,消費者慢了,增加消費者;
實際應用中,生產者,消費者可能是兩套不同的系統,不會存在于一個進程里,甚至不在同一臺設備上;而queue.Queue只能用于線程間通訊,那么該怎么辦呢?
采用消息隊列,比如rabbitMQ;
最后,上傳一篇將進程線程做了很好的類比的一篇文章
計算機的核心是CPU,它承擔了所有的計算任務。它就像一座工廠,時刻在運行。
假定工廠的電力有限,一次只能供給一個車間使用。也就是說,一個車間開工的時候,其他車間都必須停工。背后的含義就是,單個CPU一次只能運行一個任務。
進程就好比工廠的車間,它代表CPU所能處理的單個任務。任一時刻,CPU總是運行一個進程,其他進程處于非運行狀態。
一個車間里,可以有很多工人。他們協同完成一個任務。
線程就好比車間里的工人。一個進程可以包括多個線程。
車間的空間是工人們共享的,比如許多房間是每個工人都可以進出的。這象征一個進程的內存空間是共享的,每個線程都可以使用這些共享內存。
可是,每間房間的大小不同,有些房間最多只能容納一個人,比如廁所。里面有人的時候,其他人就不能進去了。這代表一個線程使用某些共享內存時,其他線程必須等它結束,才能使用這一塊內存。
一個防止他人進入的簡單方法,就是門口加一把鎖。先到的人鎖上門,后到的人看到上鎖,就在門口排隊,等鎖打開再進去。這就叫“互斥鎖”(Mutual
exclusion,縮寫 Mutex),防止多個線程同時讀寫某一塊內存區域。
還有些房間,可以同時容納n個人,比如廚房。也就是說,如果人數大于n,多出來的人只能在外面等著。這好比某些內存區域,只能供給固定數目的線程使用。這時的解決方法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。后到的人發現鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做“信號量”(Semaphore),用來保證多個線程不會互相沖突。
不難看出,mutex是semaphore的一種特殊情況(n=1時)。也就是說,完全可以用后者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨占的情況下,還是采用這種設計。
操作系統的設計,因此可以歸結為三點:
(1)以多進程形式,允許多個任務同時運行;
(2)以多線程形式,允許單個任務分成不同的部分運行;
(3)提供協調機制,一方面防止進程之間和線程之間產生沖突,另一方面允許進程之間和線程之間共享資源。
21、HTTP狀態碼有哪些?
答:HTTP狀態碼總的分為五類:1開頭:信息狀態碼、2開頭:成功狀態碼、3開頭:重定向狀態碼、4開頭:客戶端錯誤狀態碼、5開頭:服務端錯誤狀態碼
22、如何保障測試的充分度?
答:從代碼覆蓋率和業務覆蓋率來定義充分度模型,代碼覆蓋率比較直觀,業務覆蓋率可以基于流量場景挖掘技術及fuzz技術來補充度量
23、自動化測試用例如何設計?
答:自動化用例的設計依據場景訴求構造合理輸入及輸出斷言,測試用例需要滿足健壯性,有效性,可擴展,時效性要求
24、如何對測試用例進行優化與提煉,精簡不必要測試用例?
答:等價劃分,可從代碼路徑,業務要素,領域模型三個方面做最大覆蓋最小流量用例精簡,也可以考慮在變更基礎上的精準測試
25、自動化測試框架設計中的分層如何實現,有哪幾類分層?
答:自動化框架設計包含數據流,執行流,數據流解決測試數據存儲及使用方式,執行流定義標準測試流程,一個標準的測試框架流程應該是數據清理,數據準備(入參,db,外部依賴),結果驗證
26、如何準備完整的測試數據?
答:這個問題沒啥可答的,要讓一個用例能夠符合預期就需要構造合理的輸入,數據準備,需要依賴對于系統設計及業務的了解,沒啥方法,但是可以借助實時流量提供準備數據效率
27、自動化測試執行前后,分別需要進行何種操作,以確保自動化不會影響系統運行?
答:用例運行可獨立部署集群或者線下集群,一般很少在生產環境運行
28、如何基于Mock實現數據結果的返回,實現外部接口的測試?
答:mockito這些工具類可以看一下,也可以寫攔截器構造返回對象
29、如何評判系統是否具備可測性?
答:這個問題比較廣泛,我需要點時間整理出來
30、自動化測試執行中,如何對多個用例進行并發運行?
答:并發運行testng具備,其余的可看一下jenkins的多job或者自己寫并發調度
31、在較大自動化用例運行壓力下,如何實現自動化測試框架的分布式集群?
答:要做到這個點用例需要具備隔離性,其余的均衡調度就可以了
Web 自動化測試
32、Selenium 中 hidden 或者是 display = none 的元素是否可以定位到?
答:不能,可以寫 JavaScript 將標簽中的 hidden 先改為 0,再定位元素
33、Selenium 中如何保證操作元素的成功率?也就是說如何保證我點擊的元素一定是可以點擊的?
答:
1.添加元素智能等待時間 driver.implicitly_wait(30)
2.添加強制等待時間(比如 python 中寫 sleep)
3.try 方式進行 id,name,clas,x path, css selector 不同方式進行定位,如果第一種失敗可以自動嘗試第二種
3.如何提高 Selenium 腳本的執行速度?
代碼優化,多任務,分布式部署都是可以提升腳本執行速度的。
34、用例在運行過程中經常會出現不穩定的情況,也就是說這次可以通過,下次就沒辦法通過了,如何去提升用例的穩定性?
答:
1.time.sleep( )
2.driver.implicitly_wait(30)
3.多用 try 捕捉,處理異常
35、你的自動化用例的執行策略是什么?
答:自動化測試與軟件開發本質上是一樣的,利用自動化測試工具,經過測試需求分析,設計出自動化測試用例,從而搭建自動化測試的框架,設計與編寫自動化腳本,驗證測試腳本的正確性,最終完成自動化測試測試腳本(即主要功能為測試的應用軟件)并輸出測試結果
36、自動化測試的時候是不是需要連接數據庫做數據校驗?
答:從數據庫層面來進行數據校驗可以更方便驗證系統的數據處理方面是否正確,數據處理邏輯正常后,UI 層面上的校驗也是需要做的。
37:id,name,class,xpath, css selector 這些屬性,你最偏愛哪一種,為什么?
答:css 、xpath 幾乎所有的元素都可以定位到,但是它們的短處在于頁面上更改了元素后位置很容易改變,所以首先使用的還是 id 或者 name 等。
38、如何去定位頁面上動態加載的元素?
答:觸發動態加載元素的事件,直至動態元素出現,進行定位
39、如何去定位屬性動態變化的元素?
答:xpath 或者 css 通過同級、父級、子級進行定位
40、點擊鏈接以后,Selenium 是否會自動等待該頁面加載完畢?
答:會的
41、什么是 page object 設計模式?
答:簡單來說,就是把頁面作為對象,在使用中傳遞頁面對象,來使用頁面對象中相應的成員或者方法,能更好的體現面向對象語言(比如 java 或者 python)的面向對象和封裝特性。
42、如何在定位元素后高亮元素(以調試為目的)?
答:用 JavaScript 等腳本來重置元素屬性,給定位的元素加背景、邊框
43、什么是斷言?
答:斷言的英文是 assertion,斷言檢查的英文是 assertion checking。
斷言是指定一個程序必須已經存在的狀態的一個邏輯表達式,或者一組程序變量在程序執行期間的某個點上必須滿足的條件。
44、你覺得自動化測試最大的缺陷是什么?
答:
1.不穩定
2.可靠性
3.不易維護
4.成本與收益
45、Webdriver 可以用來做接口測試嗎?
答:接口測試有現成的模塊來處理,WebDriver 是用于做 WebUI 自動化測試的。如果要實現接口測試,可以使用 Requests 模塊來實現
APPUI 自動化測試
46、Android APP 內存不足時, 系統如何結束進程獲得內存?
答:系統優先結束被掛起(暫停)的進程,釋放內存
47、APP 測試常見的嚴重問題有哪些? 分別引起的原因有哪些?
答:常見的有 crash、ANR(應用無響應、卡死),一般由設備碎片化、網絡波動大、內存泄漏、代碼編寫錯誤
48、請簡單介紹你曾使用過的一款 APP 自動化測試工具 ?
答:開放性問題,帶點主觀意見
1.對比其他熟悉的自動化工具的優缺點
2.自動化的簡要方案(簡要的同時關鍵內容請具體)。(提示: appnium 等)
49、Android 測試與 web 測試有什么區別?
答:相同點:
1.設計測試用例均依據等價類、邊界值等方法,測試原理相同;
2.大多數都采用黑盒測試方法來驗證業務功能;
3.需要檢查界面布局、風格和按鈕是否美觀、統一等(UI 測試);
4.測試頁面載入和翻頁的速度、登錄時長是否溢出等問題(性能測試)
5.測試應用系統的穩定性; 不同點:
1.手機作為通信工具,通信等一些行為會對 APP 產生(中斷測試)
2.手機用戶對 app 產品的安裝卸載操作:從上一版本/上兩個版本直接升級到最新版本(安裝卸載測試);
3.web 自動化測試使用的工具較常用的是 selenium,而 android 手機自動化測試比較常用的自動化工具是 monkey、monkeyrunner、Appium(測試工具不一樣)
50、app 測試有哪幾種環境?
答:
1.本地環境: app 安裝的手機環境和電腦搭建的自動化測試環境(比如安卓 SDK 等等) 。
2.服務器環境:war 包部署的服務器,服務器可以通過瀏覽器訪問,也可以通過 app去訪問。(訪問的是 web 程序的接口)
51、簡單介紹一下 Android SDK 的安裝步驟:
答:
1.下載 jdk 和安卓 sdk
2.安裝 jdk, 配置環境變量(java_home、 classpath、 path)
52、請簡要介紹一下移動應用及其服務端的測試點?
答:
1.移動應用主要有權限、安裝運行卸載、UI、功能、性能、中斷、兼容性、安全性、回歸、升級更新、用戶體驗。(app 的 11 大測試點)
2.服務端有接口測試、性能測試、安全測試。
53、如何判斷 app 的 bug 是客戶端問題還是后臺問題
答:這個要根據業務來,一般數據的問題前端的問題多些,一般做法是有問題提給前端開發, 他們知道是他們自己的問題還是后臺返回的數據問題。
54、安卓中如何取出日志信息?
答:
1.把安卓系統日志信息實時導入到本地: adb logcat -v time > d:\mylog.log
2.運行使用某個 app,實時獲取該 app 的日志信息(cmd 里面的返回信息) : adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log
55、常見的 adb 命令:
答:
1.查看當前連接的設備: adb devices
2.安裝軟件: adb install 路徑\xx.apk
3.卸載軟件: adb uninstall <包名>
4.從電腦上發送文件到設備: adb push <本地路徑> <遠程路徑> adb push C:\test1.txt /sdcard/
5.從設備上下載文件到電腦: adb pull <遠程路徑> <本地路徑> adb pull /sdcard/test1.txt D:
6.實時獲取日志: adb logcat -v time > D:\mylog.log
7.登錄終端設備 shell: adb shell
8.查找包名/活動名: adb logcat | findstr START
(腳本中, cmp= 后面的值就是 包名/activity 名稱)
9.啟動 APP 啟動
adb shell am start -n packageName/activity
10.關閉 app
語法: adb shell am force-stop 包名
11.監控 APP 啟動時間
adb shell am start -W packageName/activity
12.Monkey 命令:
adb shell monkey -v -p mypackage 50
56、APP 這么多主流機型如何測試 ?
答:
我們公司就買了, 魅族, 華為, 小米, iphone7、iphone8 、iphone8plus 、iphone
x 測試兼容性,有些沒有的機型,先借用同事的手機進行測試,同時申請公司購買,或者采用云真機。
57、App 崩潰(閃退),可能是什么原因導致的?
答:緩存垃圾過多:由于安卓系統的特性,如果長時間不清理垃圾文件.會導致越來越卡.也會出現閃退情況,運行的程序過多,導致內存不足
應用版本兼容問題:如果應用版本太低,會導致不兼容,造成閃退。此外,有些新版本 在調試中,也會造成應用閃退。解決方法:如果是版本太舊,更新為新版本即可;如果是新版本閃退, 可能是應用在改版調試,可卸載后安裝舊版。檢查 APP 中訪問網絡的地方,組件中的 ImageView 是否可以正常的下載并顯示到 app 頁面上。檢查 APP 的 sdk 和手機的系統是否兼容。在一些特定情況下的閃退,比如播放視頻,在 Android5.0 升級到 Android6.0 的時候, 有些系統 API 老版本有,新版本沒有,到時回去對象的時候失敗,報空,系統就會出現閃退
58、Appium 都有哪些啟動方式
答:
1.客戶端啟動
2.命令行啟動
59、請簡單介紹一下使用過的安卓 UI 自動化測試工具?
答:appium:是一個移動端的自動化框架,可用于測試原生應用,移動網頁應用和混合型應用,且是跨平臺的。robotium:是一款國外的 Android 自動化測試框架,主要針對 Android 平臺的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點擊、長按、滑動等)、查找和斷言機制的 API,能夠對各種控件進行操作。
60、請說明 Android 手機和 IOS 手機,系統有什么區別?
答:
1.兩者運行機制不同:IOS 采用的是沙盒運行機制,安卓采用的是虛擬機運行機制。
2.兩者后臺制度不同:IOS 中任何第三方程序都不能在后臺運行;安卓中任何程序都能在后臺運行,直到沒有內存才會關閉。
3.IOS 中用于 UI 指令權限最高,安卓中數據處理指令權限最高。接口自動化測試
61、按你的理解,軟件接口是什么?
答:
就是指程序中具體負責在不同模塊之間傳輸或接受數據的并做處理的類或者函數。
62、HTTPS 在哪一層?
答:HTTPS 在應用層。
63、get 和 post 區別是什么?
答:POST 和 GET 都是向服務器提交數據,并且都會從服務器獲取數據。區別:
1)傳送方式:get 通過地址欄傳輸,post 通過報文傳輸
2)傳送長度:get 參數有長度限制(受限于 url 長度),而 post 無限制
3)GET 產生一個 TCP 數據包(對于 GET 方式的請求,瀏覽器會把 http header 和 data 一并發送出去,服務器響應 200 返回數據),POST 產生兩個 TCP 數據包(對于 POST,瀏覽器先發送 header,服務器響應 100 continue,瀏覽器再發送 data,服務器響應 200 ok 返回數據)
4)get 請求參數會被完整保留在瀏覽歷史記錄里,而 post 中的參數不會被保留
5)在做數據查詢時,建議用 GET 方式;而在做數據添加、修改或刪除時,建議用 post 方式
64、常見的 POST 提交數據方式
答:主要有四種方式:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xml 等。
65、什么是 Http 協議無狀態協議?怎么解決 HTTP 協議無狀態協議
答:無狀態是指協議對于事務處理沒有記憶能力,服務器不知道客戶端是什么狀態。即我們給服 務器發送 HTTP 請求之后,服務器根據請求,會給我們發送數據過來,但是,發送完,不會記錄任何信息。HTTP 是一個無狀態協議,這意味著每個請求都是獨立的,Keep-Alive 沒能 改變這個結果。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導 致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。HTTP 協議這種特性有優點也有缺點,優點在于解放了服務器,每一次請求“點到為止”不會造成 不必要連接占用,缺點在于每次請求會傳輸大量重復的內容信息。客戶端與服務器進行動態 交互的 Web 應用程序出現之后,HTTP 無狀態的特性嚴重阻礙了這些應用程序的實現,畢竟交互是需要承前啟后的,簡單的購物車程序也要知道用戶到底在之前選擇了什么商品。于是, 兩種用于保持 HTTP 連接狀態的技術就應運而生了,一個是 Cookie,而另一個則是 Session。
66、cookie 和 session 的區別
答:cookie 數據存放在客戶的瀏覽器上,session 數據放在服務器上
cookie 不是很安全,別人可以分析存放在本地的 cookie 并進行 cookie 欺騙,考慮到安全應當使用 session
session 會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面應當使用 cookie
單個 cookie 保存的數據不能超過 4K,很多瀏覽器都限制一個站點最多保存 20 個 cookie 可以將登陸信息等重要信息存放為 session;其他信息需要保存,可以放在 cookie
67、什么是 DNS?
答:DNS 是域名系統 (Domain Name System),DNS 是用來做域名解析的,它會在你上網輸入網址后,把它轉換成 IP,然后去訪問對方服務器;沒有它,你想上百度就要記住百度的 IP, 但有了 DNS 的處理,你只需要記住對應網站的域名,即網址就可以了。
68、請問你們公司是如何做接口測試的?
答:
接口測試實際跟一般測試不同就是測試用例的設計部分。
①獲取接口規范。
②設計接口測試功能用例(主要從用戶角度出發看接口能否實現業務需求,用例設計就是黑 盒用例那一套)。
③各種入參驗證(正常情況,異常情況包括輸入參數個數不對,類型不對,可選/必選,還 有考慮參數有互斥或關聯的情況)。
④接口返回值各種驗證(符合接口文檔需求)
⑤了解接口實現邏輯,實現邏輯覆蓋(語句/條件/分支/判定/…)
⑥接口能并發執行嗎、安全嗎,性能滿足要求嗎?
⑦采用工具或者自寫代碼來驗證。
⑧發現問題跟功能測試一樣,該報 bug 報 bug,該跟蹤狀態的跟蹤狀態。
69、怎么設計接口測試用例?
答:
通常,設計接口測試用例需要考慮以下幾個方面:
①是否滿足前提條件
有些接口需要滿足前提,才可成功獲取數據。常見的,需要登錄 Token 逆向用例:針對是否滿足前置條件(假設為 n 個條件),設計 0~n 條用例
②是否攜帶默認值參數
正向用例:帶默認值的參數都不填寫、不傳參,必填參數都填寫正確且存在的“常規”值, 其他不填寫,設計 1 條用例
③業務規則、功能需求
這里根據時間情況,結合接口參數說明,可能需要設計 N 條正向用例和逆向用例
④參數是否必填
逆向用例:針對每個必填參數,都設計 1 條參數值為空的逆向用例
⑤參數之間是否存在關聯
有些參數彼此之間存在相互制約的關系
⑥參數數據類型限制
逆向用例:針對每個參數都設計 1 條參數值類型不符的逆向用例
⑦參數數據類型自身的數據范圍值限制
正向用例:針對所有參數,設計 1 條每個參數的參數值在數據范圍內為最大值的正向用例
70、你做接口測試,測什么?
答:
可用性測試
根據約定的協議、方法、格式內容,傳輸數據到接口經處理后返回期望的結果:
?接口功能是否正確實現;
?返回值測試 - 返回值除了內容要正確,類型也要正確,保證調用方能夠正確地解析;
?參數值邊界值、等價類測試; 錯誤和異常處理測試
?輸入異常值(空值、特殊字符、超過約定長度等),接口能正確處理,且按預期響應;
?輸入錯誤的參數,接口能正確處理,并按預期響應;
?多輸入、少輸入參數,接口能正確處理,且按預期響應;
?錯誤傳輸數據格式(如 json 格式寫成 form 格式)測試; 安全性測試,主要指傳輸數據的安全性:
?敏感數據(如密碼、秘鑰)等是否加密傳輸;
?返回數據是否含有敏感數據,如用戶密碼、完整的用戶銀行賬號信息等;
?接口是否對傳入的數據做安全校驗,如身份 ID 加 token 類似校驗;
?接口是否防止惡意請求(如大量偽造請求接口致使服務器崩潰);性能測試,如接口的響應時間、并發處理能力、壓測處理情況:
?并發請求相同的接口(特別為 POST 請求),接口的處理情況(如插入了相同的記錄導致數據出錯,引發系統故障);
?接口響應時長在用戶可忍受的范圍內;
?對于請求量大的接口做壓測,確定最大的瓶頸點是否滿足當前業務需要;
?
面試題整理:
對于以上這些知識點,經過長時間整理,已經形成了文檔資料以及講解視頻等等,下面給出部分截圖:
?
這份文檔,對于今年備戰金三銀四面試的朋友來說,應該會有很大的幫助,希望大家都能收到滿意的offer,大家覺得有用的話記得給我點贊收藏,點擊下方小卡片均可以分享。?
?
總結
以上是生活随笔為你收集整理的8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钉钉群机器人关键词自动回复_企业微信群机
- 下一篇: SSM整合APP项目