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