開發(fā)轉(zhuǎn)測試?看這篇面試題就夠了

文章已被51測試網(wǎng)收錄:https://mp.weixin.qq.com/s/Mdbyvu-C0WVCfGsYVxTRGA

一、 為什么從開發(fā)轉(zhuǎn)測試

筆者從2019年5月開始從一名java開發(fā)女程序猿正式轉(zhuǎn)為測試開發(fā)工程師,原因 除了機(jī)緣湊巧之外,當(dāng)然是因為這個行業(yè)對測試工程師的要求已經(jīng)越來越高,簡單做 些UI腳本錄制和回放的自動化,參考度娘寫出框架demo卻不知道問題出在哪里的測試 人員,已經(jīng)不能滿足企業(yè)快速迭代產(chǎn)品蒿讥,保證產(chǎn)品質(zhì)量的需求。當(dāng)一個產(chǎn)品越來越龐 大抛腕、用例越來越多芋绸,用例如何設(shè)置、腳本如何規(guī)劃担敌、代碼結(jié)構(gòu)如何優(yōu)化摔敛,當(dāng)需求變動 時又如何做到高可維護(hù)、高健壯性的問題會接踵而來全封。所以马昙,一名優(yōu)秀的測試開發(fā)工 程師是必須具備優(yōu)秀的代碼能力,甚至知識面是需要比普通的開發(fā)人員更廣的刹悴,比如 他需要熟悉自動化測試行楞、服務(wù)器部署、網(wǎng)絡(luò)架構(gòu)颂跨、軟件性能敢伸、軟件安全等等方面的知 識。 所以開發(fā)工程師轉(zhuǎn)測試之后可做的內(nèi)容非常的多恒削,測試這塊領(lǐng)域也需要更多有開 發(fā)背景的人員加入。

二尾序、 前言

背景嘮嗑完钓丰,我們來說說面試題,由于是開發(fā)轉(zhuǎn)測試每币,首先開發(fā)的進(jìn)階基礎(chǔ)知識 是必須要掌握的携丁,面試官也肯定會問(說不定直接是開發(fā)組的人面的),接著會問一 些功能測試的知識點兰怠,但是一般不會多梦鉴,然后是比較重要的自動化測試部分,做自動 化測試框架有很多揭保,每個公司用的也不一樣肥橙,如果沒用過面試官說的,就說自己用過 那套的邏輯就好秸侣。如果沒有在工作中實踐過存筏,非常有必要的告訴大家宠互,在面試之前也 一定要多百度熟悉多動手寫demo,不要讓面試官問的工具和術(shù)語你都沒聽說過椭坚,那么 還沒開始就結(jié)束了的面試只會剩下尬聊(哭暈)予跌。最后前面聊得愉快的話,面試官一 般還會繼續(xù)考察你的其他能力善茎,比如性能券册、安全、Linux垂涯、數(shù)據(jù)庫烁焙、軟件架構(gòu)等。下述 內(nèi)容為大家準(zhǔn)備了每個知識點比較常見的面試題集币,大家可以參考并且發(fā)散準(zhǔn)備考阱,最后 記得準(zhǔn)備必問題目:為什么從開發(fā)轉(zhuǎn)測試?參考我第一章的答案?

三、 開發(fā)基礎(chǔ)面試題

image.png

image.png

自動化常用的語言是 java 和 python鞠苟,參考面試題:
(1) JAVA知識
Q1:List乞榨、Set、Map 之間的區(qū)別
List 是一個有序集合当娱,允許元素重復(fù)吃既。它的某些實現(xiàn)可以??供基于下標(biāo)值的常量訪問 時間,但是這不是 List 接口保證的跨细。Set 是一個無序集合鹦倚。

Q2:ArrayList 與 LinkedList 的區(qū)別?
最明顯的區(qū)別是 ArrrayList 底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,支持隨機(jī)訪問冀惭,而 LinkedList 的底層數(shù)據(jù)結(jié)構(gòu)書鏈表震叙,不支持隨機(jī)訪問。使用下標(biāo)訪問一個元素散休,ArrayList 的時間 復(fù)雜度是 O(1)媒楼,而 LinkedList 是 O(n)。

Q3:Hashtable 與 HashMap 有什么不同之處?
這兩個類有許多不同的地方戚丸,下面列出了一部分: a) Hashtable 是 JDK 1 遺留下來 的類划址,而 HashMap 是后來增加的。 b)Hashtable 是同步的限府,比較慢夺颤,但 HashMap 沒有同步策略,所以會更快胁勺。 c)Hashtable 不允許有個空的 key世澜,但是 HashMap 允許出現(xiàn)一個 null key。d)HashMap 線程不安全

Q4:Java 中 ++ 操作符是線程安全的嗎? 不是線程安全的操作姻几。它涉及到多個指令宜狐,如讀取變量值势告,增加,然后存儲回內(nèi)存抚恒,
這個過程可能會出現(xiàn)多個線程交差咱台。

Q5:int 和 Integer 哪個會占用更多的內(nèi)存?
Integer 對象會占用更多的內(nèi)存。Integer 是一個對象俭驮,需要存儲對象的元數(shù)據(jù)回溺。但是 int 是一個原始類型的數(shù)據(jù),所以占用的空間更少

Q6:Java 中 sleep 方法和 wait 方法的區(qū)別?
雖然兩者都是用來暫停當(dāng)前運(yùn)行的線程混萝,但是 sleep() 實際上只是短暫停頓遗遵,因為它 不會釋放鎖,而 wait() 意味著條件等待逸嘀,這就是為什么該方法要釋放鎖车要,因為只有這 樣,其他等待的線程才能在滿足條件時獲取到該鎖崭倘。

Q7:解釋 Java 堆空間及 GC?
當(dāng)通過 Java 命令啟動 Java 進(jìn)程的時候翼岁,會為它分配內(nèi)存。內(nèi)存的一部分用于創(chuàng)建 堆空間司光,當(dāng)程序中創(chuàng)建對象的時候琅坡,就從對空間中分配內(nèi)存。GC 是 JVM 內(nèi)部的一 個進(jìn)程残家,回收無效對象的內(nèi)存用于將來的分配榆俺。

(2) Python知識
Q1:python 基本數(shù)據(jù)類型? int、str坞淮、float茴晋、list、bool回窘、tuple 元組晃跺、dict 字典、set 集合

Q2:列出 python 中可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型毫玖,并簡述原理
不可變數(shù)據(jù)類型:數(shù)值型、字符串 string凌盯、元組 tuple: 如果改變了變量的值付枫,相當(dāng)于 是新建了一個對象,如果是相同的值驰怎,只用一個內(nèi)存地址保存
可變數(shù)據(jù)類型:列表 list阐滩、字典 dict:允許變量的值發(fā)生變化,即如果對變量進(jìn)行 append县忌、+=等這種操作后掂榔,只是改變了變量的值继效,而不會新建一個對象,變量引用的 對象的地址也不會變化

Q3:python 字典和 json 字符串相互轉(zhuǎn)化方法 字典轉(zhuǎn) json:json.dumps() json 轉(zhuǎn)字典:json.loads()

Q4:Python 中@staticmethod 和@classmethod 的區(qū)別
在類中總共有三種方法:普通方法:需要參數(shù)装获,使用時默認(rèn)將類的實例對象傳進(jìn)去瑞信, 類調(diào)用的時候需要傳遞實例對象@staticmethod 裝飾的靜態(tài)方法與普通函數(shù)相同:實 例和類均可調(diào)用,沒有默認(rèn)的參數(shù)傳遞進(jìn)去@classmethod 裝飾的類方法:需要參 數(shù)穴豫,使用時將調(diào)用的類傳進(jìn)去

Q5:什么是裝飾器? 裝飾器的本質(zhì)是一個閉包函數(shù)凡简,實現(xiàn)的功能是在不修改原函數(shù)及調(diào)用方式的情況下對
原函數(shù)進(jìn)行功能擴(kuò)展的,是開放封閉原則的典型代表精肃。

Q6:python 中常見的異常舉例 Exception 所有異常類的基類 AssertionError assert 語句失敗 FileNotfoundError 文件打開失敗 AttributeError 試圖訪問對象沒有屬性

Q7:Python 是如何進(jìn)行內(nèi)存管理的?
1.對象的引用計數(shù)機(jī)制 Python 內(nèi)部使用引用計數(shù)秤涩,來保持追蹤內(nèi)存中的對象,所有對象都有引用計數(shù)司抱。
2.垃圾回收機(jī)制 當(dāng)一個對象的引用計數(shù)歸零時筐眷,它將被垃圾收集機(jī)制處理掉。
3.內(nèi)存池機(jī) Python ??供了對內(nèi)存的垃圾收集機(jī)制习柠,但是它將不用的內(nèi)存放到內(nèi)存池而 不是返回給操作系統(tǒng)制

(3) 數(shù)據(jù)庫知識
Q1:數(shù)據(jù)表 student 有 name 字段匀谣,其中 name 中的名字可有重復(fù),需要消除重復(fù)行select distinct name from student Q2:什么是內(nèi)鏈接津畸、左鏈接振定、右鏈接、全鏈接?
(1)INNER JOIN 產(chǎn)生的結(jié)果集中肉拓,是左和右的交集 (2)LEFT JOIN 返回左表的 全部行和右表滿足 ON 條件的行后频,其他 null 替代 (3)RIGHT JOIN 返回右表的全部 行和左表滿足 ON 條件的行,其他 null 替代 (4)FULL JOIN 會從左表 和右表 那里返回所有的行暖途,如果其中一個表的數(shù)據(jù)行在另一個表中沒有匹配的行卑惜,那么對面的數(shù) 據(jù)用 NULL 代替
Q3:某個字段被建立索引后,數(shù)據(jù)的什么操作會使用到該索引?
(1)對建立了索引的字段做 where 條件查詢時
(2)多表做 join 操作時會使用索引 (3)對建立了索引的字段做 min()或 max()時 (4)對建立了索引的字段做 sort 或 group 操作時

(4) http知識
Q1:http 協(xié)議是不是安全的?如果不是驻售,如何確保傳輸安全?
HTTP 的連接很簡單露久,是無狀態(tài)的,所以不安全欺栗,HTTPS 協(xié)議是由 SSL+HTTP 協(xié)議 構(gòu)建的可進(jìn)行加密傳輸毫痕、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,是 HTTP 的安全版迟几。(SSL 協(xié)議的對 稱密鑰加密消请、非對稱密鑰加密 Google 查資料)

Q2: 簡述 cookie 和 session 的區(qū)別
session 在服務(wù)器端,cookie 在客戶端(瀏覽器)类腮,session 的運(yùn)行依賴 session id臊泰,而 session id 是存在 cookie 中的,也就是說蚜枢,如果瀏覽器禁用了 cookie 缸逃,同 時 session 也會失效针饥,存儲 Session 時,鍵與 Cookie 中的 sessionid 相同需频,值是開 發(fā)人員設(shè)置的鍵值對信息丁眼,進(jìn)行了 base64 編碼,過期時間由開發(fā)人員設(shè)置

Q3: 什么是socket?
socket 是在應(yīng)用層和傳輸層之間的一個抽象層贺辰,它把 TCP/IP 層復(fù)雜的操作抽象為幾個簡單的接口供應(yīng)用層調(diào)用以實現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信户盯。

(5) Git 知識
Q1: gitpull和gitfetch之間有什么區(qū)別?
簡單來說,git pull 是 git fetch + git merge饲化。
1.git pull 會把所有拉取的??交合并到當(dāng)前處理的分支中莽鸭,如果沒有細(xì)心管理分支,可 能會頻繁遇到?jīng)_突吃靠。
2.git fetch 會收集目標(biāo)分支中的所有不存在的??交硫眨,并將這些??交存儲到本地倉庫 中。但 Git 不會把這些??交合并到當(dāng)前分支中

Q2: git如何進(jìn)行版本回退 git reset --hard HEAD^

Q3: gitlab 如何進(jìn)行分支保護(hù)和代碼審查

四巢块、 測試開發(fā)面試題

Q1: 接口測試如例如何設(shè)計


image.png

Q2: 自動化框架的搭建思路礁阁,分別有什么模塊,作用是什么?
用例模塊族奢、發(fā)送請求姥闭、全局配置文件、數(shù)據(jù)自動采集越走、讀取數(shù)據(jù)棚品、接口斷言、日志記 錄廊敌、測試報告

Q3: 測試數(shù)據(jù)有幾種铜跑,分別放哪里?
全局?jǐn)?shù)據(jù):寫入配置文件 一次性消耗數(shù)據(jù):從隨機(jī)函數(shù)生成 需要被接口多次讀取數(shù) 據(jù):參數(shù)化,放入 excel骡澈、json锅纺、或者從數(shù)據(jù)庫讀取 接口數(shù)據(jù)文件:數(shù)據(jù)驅(qū)動、使用 excel 管理測試接口
Q4: 影響數(shù)據(jù)流的接口如何處理肋殴,比如刪除這種接口如何測試 方法一:最后單獨處理這個接口囤锉,單獨造獨立的數(shù)據(jù)去刪除,豐富數(shù)據(jù) 方法二:連接到數(shù)據(jù)庫中操作

Q5: 測試腳本數(shù)據(jù)如何規(guī)劃設(shè)計
V1.0:跑通一個流程的接口(約 10 個)护锤,常量數(shù)據(jù)腳本 V2.0:跑通一個流程的接口(約 10 個)嚼锄,數(shù)據(jù)參數(shù)化,數(shù)據(jù)與腳本分離 V3.0:跑通所有接口蔽豺,數(shù)據(jù)參數(shù)化,數(shù)據(jù)與腳本分離 V4.0:多組有效數(shù)據(jù)拧粪,保證所有接口能全部跑通且??高覆蓋率 V5.0:多組無效數(shù)據(jù)修陡,加強(qiáng)測試覆蓋率

Q6: 使用什么框架完成自動化?講述使用過程 unittest沧侥、pytest、postman魄鸦、jmeter宴杀、Selenium、Appnium 等

Q7: unittest拾因、pytest 框架對比
pytest 相較于 unittest 最為跳躍的一點應(yīng)該就是 fixture 機(jī)制旺罢。對于 unittest 來說, 每個用例的類中都需要去寫入 setUp 和 tearDown绢记。也就是我們所說的前置和后置扁达,而 不可避免的,很多用例的前置和后置都是一樣蠢熄,重復(fù)的復(fù)制粘貼致工作量增加跪解,代碼 量也增加。

Q8:pytest 的@pytest.mark.parametrize 裝飾器作用是什么?
@pytest.mark.parametrize 裝飾器可以讓我們每次參數(shù)化 fixture 的時候傳入多個項 目签孔〔婕ィ回憶上一節(jié),我們參數(shù)化的時候只能傳入 1 個字符串或者是其他的數(shù)據(jù)對象饥追, parametrize 每次多個參數(shù)图仓,更加靈活。

Q9:postman + Newman 相關(guān)問題 是否會使用 postman 完成接口的基本調(diào)試? 變量有幾種但绕,作用域分別是什么? 如何使用變量?
sandbox 如何使用救崔,如何實現(xiàn)斷言 如何實現(xiàn)接口參數(shù)化,以及接口傳遞 Newman 的作用是什么壁熄,如何使用 如何輸出 html 格式的測試報告
Newman 是否可以改造

Q10:selenium 常用的八大定位法 Id帚豪、name、link_text草丧、partial_link_text狸臣、tag_name、class_name昌执、css_selector烛亦、
xpath

Q11:GUI 測試如何??高腳本的穩(wěn)定性
不要右鍵復(fù)制 xpath(十萬八千里那種路徑,肯定不穩(wěn)定)懂拾,自己寫相對路徑煤禽,多用 name 定位,sleep 等待盡量少用(影響執(zhí)行時間)岖赋、使用 WebDriverWait檬果,結(jié)合 WebDriverWait 和 expected_conditions 判斷元素方法,自己封裝一套定位元素方法

五、 擴(kuò)展問題

Q1: 安全測試有哪些方面?
Q2: 簡述性能測試选脊、負(fù)載測試杭抠、壓力測試 性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進(jìn)行測試恳啥。負(fù)載測試- 核實在保持配置不變的情況下偏灿,測試對象在不同操作條件(如不同用戶 數(shù)、事務(wù)數(shù)等)下性能行為的可接受性壓力測試:壓力測試主要是為了測試硬件系統(tǒng)是否達(dá)到需求文檔設(shè)計的性能目標(biāo)钝的,譬 如在一定時期內(nèi)翁垂,系統(tǒng)的 cpu 利用率,內(nèi)存使用率硝桩,磁盤 I/O 吞吐率沿猜,網(wǎng)絡(luò)吞吐量 等,壓力測試和負(fù)載測試最大的差別在于測試目的不同亿柑。

Q3: 常用的性能指標(biāo)的名稱與具體含義邢疙。 響應(yīng)時間、并發(fā)用戶數(shù)望薄,吞吐量疟游,性能計數(shù)器,TPS痕支,HPS颁虐、XSS、CSRF 攻擊卧须、SQL 注入攻擊另绩、web 木馬攻擊、文件上傳攻擊花嘶、賬密暴力破解笋籽、驗證碼缺陷、用戶權(quán)限椭员、端口掃??车海、服務(wù)檢測、中間件安全隘击。對這塊有要求的小伙伴找本書看看侍芝,推薦《web 安全防護(hù)指南基礎(chǔ)篇》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者埋同。
  • 序言:七十年代末州叠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凶赁,更是在濱河造成了極大的恐慌咧栗,老刑警劉巖逆甜,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異楼熄,居然都是意外死亡忆绰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門可岂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翰灾,你說我怎么就攤上這事缕粹。” “怎么了纸淮?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵平斩,是天一觀的道長。 經(jīng)常有香客問我咽块,道長绘面,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任侈沪,我火速辦了婚禮揭璃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亭罪。我一直安慰自己瘦馍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布应役。 她就那樣靜靜地躺著情组,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箩祥。 梳的紋絲不亂的頭發(fā)上院崇,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音袍祖,去河邊找鬼底瓣。 笑死,一個胖子當(dāng)著我的面吹牛盲泛,可吹牛的內(nèi)容都是我干的濒持。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寺滚,長吁一口氣:“原來是場噩夢啊……” “哼柑营!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起村视,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤官套,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奶赔,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡惋嚎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了站刑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片另伍。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绞旅,靈堂內(nèi)的尸體忽然破棺而出摆尝,到底是詐尸還是另有隱情,我是刑警寧澤因悲,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布堕汞,位于F島的核電站,受9級特大地震影響晃琳,放射性物質(zhì)發(fā)生泄漏讯检。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一卫旱、第九天 我趴在偏房一處隱蔽的房頂上張望人灼。 院中可真熱鬧,春花似錦誊涯、人聲如沸挡毅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跪呈。三九已至,卻和暖如春取逾,著一層夾襖步出監(jiān)牢的瞬間耗绿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工砾隅, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留误阻,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓晴埂,卻偏偏與公主長得像究反,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子儒洛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355