python自動(dòng)化測(cè)試面試題整理

1遇骑、類的定義:

一般棉浸,使用 class 語(yǔ)句來(lái)創(chuàng)建一個(gè)新類,class之后為類的名稱(通常首字母大寫)并以冒號(hào)結(jié)尾尾序。

類的專有方法:

init?構(gòu)造函數(shù)钓丰,在生成對(duì)象時(shí)調(diào)用、del?析構(gòu)函數(shù)每币,釋放對(duì)象時(shí)使用携丁、repr?打印,轉(zhuǎn)換

2兰怠、構(gòu)造函數(shù)的定義:

__init__構(gòu)造函數(shù)梦鉴,在Python中,子類如果定義了構(gòu)造函數(shù)揭保,而沒(méi)有調(diào)用父類的肥橙,那么Python不會(huì)自動(dòng)調(diào)用,也就是說(shuō)父類的構(gòu)造函數(shù)不會(huì)執(zhí)行秸侣。#構(gòu)造函數(shù)快骗,類接收外部傳入?yún)?shù)全靠構(gòu)造函數(shù)

3娜庇、函數(shù)的定義:

函數(shù)就是一段代碼的集合塔次,并且可以被重復(fù)調(diào)用方篮,也可以理解為處理事務(wù)的方法。def開(kāi)頭励负、函數(shù)名可以由數(shù)字藕溅、字母或者下劃線組合而成,但不能以數(shù)字開(kāi)頭继榆。

4巾表、數(shù)據(jù)結(jié)構(gòu)的定義:

是將數(shù)據(jù)按照某種邏輯存儲(chǔ)起來(lái)。

5略吨、python的標(biāo)準(zhǔn)數(shù)據(jù)類型有哪六個(gè):

不可變數(shù)據(jù)(3個(gè)):Number(數(shù)字)集币、String(字符串)、Tuple(元組)

Number(數(shù)字)支持的類型:int(整型)翠忠、float(浮點(diǎn)類型)鞠苟、complex(復(fù)數(shù))

可變數(shù)據(jù)(3個(gè)):List(列表)、Dic(字典)秽之、Set(集合)

6当娱、元組、列表考榨、字典的定義:

元組可以由不同的元素組成 跨细,所有元素通過(guò)圓括號(hào)()包含起來(lái),并通過(guò)逗號(hào)隔開(kāi)河质。

列表都是一組元素的集合冀惭,用方括號(hào)[ ],列表可以增刪改的掀鹅,元組是不可以的散休。

字典由一系列的鍵--值成對(duì)組成,并通過(guò)大括號(hào){ }包含起來(lái)淫半,用逗號(hào)隔開(kāi)溃槐。

字典的讀取:是通過(guò)鍵來(lái)作為索引的沒(méi)有先后順序之分科吭,列表和元組是通過(guò)數(shù)字作為索引有先后順序昏滴。

7、Pyton的高階函數(shù)有哪些对人?分別都有什么作用谣殊?

高階函數(shù)就是一個(gè)(內(nèi)置)函數(shù)可以用來(lái)接收另一個(gè)函數(shù)作為參數(shù),這樣的函數(shù)叫做高階函數(shù)牺弄。

變量可以指向函數(shù)姻几,既然變量可以指向函數(shù),而我們知道函數(shù)的參數(shù)可以接收變量。也就是說(shuō)一個(gè)函數(shù)可以接收另一個(gè)函數(shù)作為參數(shù)蛇捌。如下示例:

def add_number(a, b, func_abs):

# 在本例中抚恒,等同于執(zhí)行的是 return abs(a) + abs(b)

? ? return func_abs(a) + func_abs(b)

result = add_number(-10, -20, abs)

print(result)# 輸出內(nèi)容:# 30

python中內(nèi)建(builtins)的高階函數(shù)主要有:

①map()

它接收一個(gè)函數(shù)function 和一個(gè) list,并通過(guò)把函數(shù) function 依次作用在 list 的每個(gè)元素上络拌,得到一個(gè)新的 list 并返回俭驮。

def format_name(s):

? ? return s.capitalize()

result = map(format_name, ['adam', 'LISA', 'barT'])

print(list(result))

# 輸出內(nèi)容:# ['Adam', 'Lisa', 'Bart']

②filter()

filter()接收一個(gè)函數(shù)function 和一個(gè)list,這個(gè)function 的作用是對(duì)list的每個(gè)元素進(jìn)行判斷春贸,返回True或False混萝,filter()根據(jù)判斷結(jié)果自動(dòng)過(guò)濾掉不符合條件的元素,返回由符合條件元素組成的新list萍恕。

def is_contain_s(s):

? ? if 'E' in s:

? ? ? ? return True

? ? else:

? ? ? ? return False

result = filter(is_contain_s, ['sTEst', 'abc', 'str', ' ', 'END'])

print(list(result))

# 輸出內(nèi)容:# ['sTEst', 'END']

③sorted()

reduce()函數(shù)也接收一個(gè)函數(shù)function, 和一個(gè)list逸嘀。但reduce()傳入的函數(shù)必須接收兩個(gè)參數(shù),reduce()對(duì)list的每個(gè)元素反復(fù)調(diào)用函數(shù)function, 并返回最終結(jié)果值允粤。

from functools import reduce

def f(x, y):

return x + y

result = reduce(f, [1, 3, 5, 7, 9])

print(result) # 輸出內(nèi)容: # 25

8崭倘、簡(jiǎn)單說(shuō)說(shuō)生成器、迭代器维哈、裝飾器是什么绳姨?都有哪些作用?

1阔挠、迭代器:

迭代器是訪問(wèn)集合元素的一種方式飘庄。迭代器對(duì)象從集合的第一個(gè)元素開(kāi)始訪問(wèn),直到所有的元素被訪問(wèn)完結(jié)束购撼。迭代器只能往前不會(huì)后退迭代器的一大優(yōu)點(diǎn)是不要求事先準(zhǔn)備好整個(gè)迭代過(guò)程中所有的元素跪削。迭代器僅僅在迭代到某個(gè)元素時(shí)才計(jì)算該元素,而在這之前或之后迂求,元素可以不存在或者被銷毀碾盐。這個(gè)特點(diǎn)使得它特別適合用于遍歷一些巨大的或是無(wú)限的集合。

特點(diǎn):(迭代是訪問(wèn)集合元素的一種方式揩局。迭代器是一個(gè)可以記住遍歷位置的對(duì)象毫玖。迭代器只能往前不能后退。)

1.訪問(wèn)者不需要關(guān)心迭代器內(nèi)部的結(jié)構(gòu)凌盯,僅需通過(guò)next()方法不斷去取下一個(gè)內(nèi)容

2.不能隨機(jī)訪問(wèn)集合中的某個(gè)值 付枫,只能從頭到尾依次訪問(wèn)

3.訪問(wèn)到一半時(shí)不能往回退

4.便于循環(huán)比較大的數(shù)據(jù)集合,節(jié)省內(nèi)存 可被next()函數(shù)調(diào)用并不斷返回下一個(gè)值(直到?jīng)]有數(shù)據(jù)時(shí)拋出 StopIteration錯(cuò)誤)的對(duì)象稱為迭代器(Iterator)驰怎。

5.任何對(duì)象阐滩,如果它實(shí)現(xiàn)了next方法和iter方法,就是迭代器县忌。

例:a = iter([1,2,3,4,5]) print(a) #結(jié)果:<list_iterator object at 0x0044ADFO> print(a.__next__()) #結(jié)果:1 print(a.__next__()) #結(jié)果:2

2.生成器(generator):

一個(gè)函數(shù)調(diào)用時(shí)返回一個(gè)迭代器掂榔,那這個(gè)函數(shù)就叫生成器(generator)继效,如果函數(shù)中包含yield語(yǔ)法,則這個(gè)函數(shù)變成生成器装获。一邊循環(huán)一邊計(jì)算的機(jī)制瑞信,稱為生成器。

3.裝飾器:

是一個(gè)返回函數(shù)的高階函數(shù)饱溢。

裝飾器其實(shí)就是一個(gè)閉包喧伞,把一個(gè)函數(shù)當(dāng)作參數(shù)然后返回一個(gè)替代版函數(shù)。

裝飾器有2個(gè)特性:

1绩郎、可以把被裝飾的函數(shù)替換成其他函數(shù)

2、可以在加載模塊時(shí)候立即執(zhí)行

12翁逞、Python中肋杖,如何將字符串轉(zhuǎn)化為整型?

①將字符串?dāng)?shù)組 轉(zhuǎn)化為 整型數(shù)組

>>> arr = ['22','44','66','88']

>>> arr = list(map(int,arr))

>>> print(arr)

②數(shù)字字符串初始化int類挖函,就可以將整數(shù)字符串(str)轉(zhuǎn)換成整數(shù)(int):int(“112321”)

③相反用整數(shù)初始化str類状植,就可以將整數(shù)(int)轉(zhuǎn)換為對(duì)應(yīng)的字符串(str):string(123213)

④如果字符串是浮點(diǎn)數(shù),可以用字符串初始化float類怨喘,把浮點(diǎn)數(shù)字符串(str)轉(zhuǎn)換成浮點(diǎn)數(shù)(float):float(“12.23”)

9津畸、TCP三次握手和四次揮手,請(qǐng)分別直接寫出來(lái)必怜?

三次握手:

瀏覽器向服務(wù)器發(fā)起 tcp 連接肉拓,與瀏覽器建立 tcp 三次握手。

SYN是同步序列編號(hào)梳庆,是TCP/IP建立連接時(shí)使用的握手信號(hào)暖途。

第一次握手:客戶機(jī)首先發(fā)出一個(gè)SYN(syn=j)消息到服務(wù)器,(并進(jìn)入SYN_SENT)狀態(tài)膏执,等待服務(wù)器確認(rèn)驻售。

第二次握手:服務(wù)器收到SYN消息,必須確認(rèn)客戶的SYN(ack=j+1)更米,同時(shí)發(fā)送一個(gè)SYN+ack應(yīng)答表示接受到了此消息欺栗。(服務(wù)器進(jìn)入到了SVN_RECV狀態(tài))

第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器端發(fā)送確認(rèn)消息ACK(ack=k+1)征峦,發(fā)送完畢之后迟几,客戶端和服務(wù)器進(jìn)入TCP連接成功狀態(tài)。完成三次握手眶痰。

四次揮手:

第一次揮手:客戶端向服務(wù)器端發(fā)送一個(gè)FIN瘤旨,請(qǐng)求關(guān)閉數(shù)據(jù)傳輸

第二次揮手:服務(wù)器接收到客戶端的FIN,向客戶端發(fā)送一個(gè)ACK竖伯,其中ack的值等于FIN+SEQ

第三次揮手:服務(wù)器向客戶端發(fā)送一個(gè)FIN存哲,告訴客戶端應(yīng)用程序關(guān)閉

第四次揮手:客戶端收到服務(wù)器端的FIN锭硼,回復(fù)一個(gè)ACK給服務(wù)器端。其中ack的值等于FIN+SEQ

TCP 三次握手和四次揮手簡(jiǎn)易版:

客戶端向服務(wù)端發(fā)送一個(gè)請(qǐng)求饶氏, syn -----服務(wù)端返回一個(gè) 應(yīng)答 ack+syn? -----客戶端收到后返回一個(gè)確認(rèn) ack

客戶端向服務(wù)器發(fā)送一個(gè)關(guān)閉連接請(qǐng)求 fin? m----服務(wù)端應(yīng)答返回ack m+1---服務(wù)端返回一個(gè)fin n ----客戶端收到后發(fā)一個(gè)確認(rèn)---ack n+1

10前弯、HTTP常見(jiàn)的狀態(tài)碼有哪些?都是什么含義修肠?

? 200 請(qǐng)求已成功贺辰,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。

? 201 請(qǐng)求已經(jīng)被實(shí)現(xiàn)嵌施,而且有一個(gè)新的資源已經(jīng)依據(jù)請(qǐng)求的需要而建立饲化, 且其 URI 已經(jīng)隨 Location 頭信息返回

? 202 服務(wù)器已接受請(qǐng)求,但尚未處理

? 301 (永久移動(dòng)) 請(qǐng)求的網(wǎng)頁(yè)已永久移動(dòng)到新位置吗伤。 服務(wù)器返回此響應(yīng) (對(duì) GET 或 HEAD 請(qǐng)求的響應(yīng))時(shí)吃靠,會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置。

? 302 (臨時(shí)移動(dòng)) 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求足淆,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求巢块。

? 303 (查看其他位置) 請(qǐng)求者應(yīng)當(dāng)對(duì)不同的位置使用單獨(dú)的 GET 請(qǐng)求來(lái)檢索響應(yīng)時(shí),服務(wù)器返回此代碼巧号。

? 304 (未修改) 自從上次請(qǐng)求后族奢,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)。 服務(wù)器返回此響應(yīng)時(shí)丹鸿,不會(huì)返回網(wǎng)頁(yè)內(nèi)容越走。

? 305 (使用代理) 請(qǐng)求者只能使用代理訪問(wèn)請(qǐng)求的網(wǎng)頁(yè)。 如果服務(wù)器返回此響應(yīng)卜高,還表示請(qǐng)求者應(yīng)使用代理弥姻。

? 307 (臨時(shí)重定向) 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求掺涛。

? 401 當(dāng)前請(qǐng)求需要用戶驗(yàn)證庭敦。如果當(dāng)前請(qǐng)求已經(jīng)包含了 Authorization證書,那么 401 響應(yīng)代表著服務(wù)器驗(yàn)證已經(jīng)拒絕了那些證書

? 403 服務(wù)器已經(jīng)理解請(qǐng)求薪缆,但是拒絕執(zhí)行它秧廉。與 401 響應(yīng)不同的是,身份驗(yàn)證并不能提供任何幫助拣帽,而且這個(gè)請(qǐng)求也不應(yīng)該被重復(fù)提交

? 404 請(qǐng)求失敗疼电,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)

? 500 服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,導(dǎo)致了它無(wú)法完成對(duì)請(qǐng)求的處理减拭。一般來(lái)說(shuō)蔽豺,這個(gè)問(wèn)題都會(huì)在服務(wù)器的程序碼出錯(cuò)時(shí)出現(xiàn)。

? 501 服務(wù)器不支持當(dāng)前請(qǐng)求所需要的某個(gè)功能拧粪。當(dāng)服務(wù)器無(wú)法識(shí)別請(qǐng)求的方法修陡,并且無(wú)法支持其對(duì)任何資源的請(qǐng)求沧侥。

? 502 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從上游服務(wù)器接收到無(wú)效的響應(yīng)魄鸦。

? 503 由于臨時(shí)的服務(wù)器維護(hù)或者過(guò)載宴杀,服務(wù)器當(dāng)前無(wú)法處理請(qǐng)求。這個(gè)狀況是臨時(shí)的拾因,并且將在一段時(shí)間以后恢復(fù)旺罢。

200 - 請(qǐng)求成功301 - 資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其它URL404 - 請(qǐng)求的資源(網(wǎng)頁(yè)等)不存在500 - 內(nèi)部服務(wù)器錯(cuò)誤

11、webdriver的核心原理是什么绢记?

1.Webdriver啟動(dòng)瀏覽器

2.Webdriver將瀏覽器綁定到特定的端口扁达,綁定完成后該瀏覽器實(shí)例便作為webdriver的remote server存在;

3.客戶端(也就是測(cè)試腳本)創(chuàng)建1個(gè)session庭惜,在該session中通過(guò)http請(qǐng)求向remote server發(fā)送restful的請(qǐng)求罩驻,remote server解析請(qǐng)求,完成相應(yīng)操作并返回response給瀏覽器

4.客戶端接受response护赊,并分析其返回值以決定是轉(zhuǎn)到第3步還是結(jié)束腳本;

1.測(cè)試人員運(yùn)行腳本砾跃,由于客戶端腳本(java, python, ruby)不能直接與瀏覽器通信骏啰,這時(shí)候webdriver啟動(dòng)了一個(gè)remote-WebService當(dāng)做一個(gè)翻譯器,

它可以把客戶端代碼翻譯成瀏覽器可以識(shí)別的代碼(比如js)抽高。webdriver 通過(guò)瀏覽器監(jiān)聽(tīng)這個(gè)端口判耕。

2.客戶端(也就是測(cè)試腳本)創(chuàng)建1個(gè)session,

在該session中通過(guò)http請(qǐng)求向WebService發(fā)送restful的請(qǐng)求翘骂,WebService翻譯成瀏覽器懂得腳本傳給瀏覽器壁熄,

3.瀏覽器把執(zhí)行的結(jié)果返回給WebService,WebService把返回的結(jié)果做了一些封裝(一般都是json格式),

然后返回給client,根據(jù)返回值就能判斷對(duì)瀏覽器的操作是不是執(zhí)行成功

總結(jié): webdriver就是基于Http 協(xié)議來(lái)進(jìn)行底層的客戶端與服務(wù)端通信的碳竟。

12草丧、Appium是什么?主要用來(lái)做什么的莹桅?它的核心原理是什么昌执?

1》Appium是一個(gè)開(kāi)源、跨平臺(tái)的诈泼,適用于原生或混合移動(dòng)應(yīng)用(hybrid mobile apps)的自動(dòng)化測(cè)試平臺(tái)懂拾。Appium使用WebDriver(JSON wire protocol)驅(qū)動(dòng)安卓和iOS移動(dòng)應(yīng)用.

2》核心原理:

appium則是基于WebDriver協(xié)議,并通過(guò) post 發(fā)送一個(gè) json 告知服務(wù)端相關(guān)測(cè)試信息铐达,利用Bootstrap.jar的java文件集成包岖赋,最后通過(guò)調(diào)用輸入U(xiǎn)iAutomator的命令,從而實(shí)現(xiàn)App的自動(dòng)化測(cè)試瓮孙。

13唐断、selenium常見(jiàn)的元素定位方法有哪些选脊?

Id、By.ID栗涂、name知牌、classname、tag斤程、xpath角寸、css、link_text等

14忿墅、直接手寫一個(gè)冒泡排序 和 快速排序扁藕,時(shí)間復(fù)雜度是多少,空間復(fù)雜度是多少疚脐,是否穩(wěn)定亿柑?

冒泡排序:穩(wěn)定

def?bubble_sort(li):

????for?i?in?range(len(li)):

????????for?j?in?range(len(li)-i-1):

????????????if?li[j]?>?li[j+1]:

????????????????li[j],li[j+1]?=?li[j+1],li[j]

????print(li)

a?=?bubble_sort([50,23,45,16,7,38])

快速排序:不穩(wěn)定

def partition(arr,low,high):

? ? i = ( low-1 )? ? ? ? # 最小元素索引

? ? pivot = arr[high]? ?

? ? for j in range(low , high):

? ? ? ? # 當(dāng)前元素小于或等于 pivot

? ? ? ? if? arr[j] <= pivot:

? ? ? ? ? ? i = i+1

? ? ? ? ? ? arr[i],arr[j] = arr[j],arr[i]

? ? arr[i+1],arr[high] = arr[high],arr[i+1]

? ? return ( i+1 )

# arr[] --> 排序數(shù)組

# low? --> 起始索引

# high? --> 結(jié)束索引

# 快速排序函數(shù)

def quickSort(arr,low,high):

? ? if low < high:

? ? ? ? pi = partition(arr,low,high)

? ? ? ? quickSort(arr, low, pi-1)

? ? ? ? quickSort(arr, pi+1, high)

arr = [10, 7, 8, 9, 1, 5]

n = len(arr)

quickSort(arr,0,n-1)

print ("排序后的數(shù)組:")

for i in range(n):

? ? print ("%d" %arr[i])

15、如何查詢Linux的后臺(tái)日志棍弄,命令是什么望薄?

cat demo.log

more demo.log

// 查詢包含關(guān)鍵字`123456`且包含`aa`的日志內(nèi)容

grep?"123456" demo.log |?grep?"aa"

Tail -f

16、如何查看當(dāng)前Linux的進(jìn)程呼畸?

netstat

17痕支、Dockerfile是什么?如何去創(chuàng)建一個(gè)Dockerfile蛮原?

Dockerfile 是一個(gè)文本文件卧须,其內(nèi)包含了一條條的指令(Instruction),每一條指令構(gòu)建一層儒陨,因此每一條指令的內(nèi)容花嘶,就是描述該層應(yīng)當(dāng)如何構(gòu)建。

??此處以定制 nginx 鏡像為例蹦漠,使用 Dockerfile 來(lái)定制椭员。

??在一個(gè)空白目錄中,建立一個(gè)文本文件津辩,并命名為 Dockerfile :

$ mkdir mynginx

$ cd mynginx

$ touch Dockerfile

其內(nèi)容為:

FROM nginx

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

18拆撼、Python有沒(méi)有垃圾回收機(jī)制?它又是通過(guò)什么來(lái)處理的喘沿?

1闸度、為什么會(huì)有垃圾機(jī)制,主要是為了有效的釋放內(nèi)存(內(nèi)存溢出與內(nèi)存泄露)蚜印。

內(nèi)存溢出 out of memory是指程序在申請(qǐng)內(nèi)存時(shí)莺禁,沒(méi)有足夠的內(nèi)存空間供其使用。當(dāng)發(fā)生內(nèi)存溢出時(shí)窄赋,程序?qū)o(wú)法進(jìn)行哟冬,強(qiáng)制終止楼熄。

內(nèi)存泄露 memory leak,是指程序在申請(qǐng)內(nèi)存后浩峡,無(wú)法釋放已申請(qǐng)的內(nèi)存空間可岂。如果發(fā)生內(nèi)存泄露,那么可用內(nèi)存會(huì)逐漸減少翰灾,從而降低性能缕粹。

memory leak會(huì)最終會(huì)導(dǎo)致out of memory!

2纸淮、為什么需要Garbage collection平斩?

為了防止內(nèi)存泄露. 對(duì)編程語(yǔ)言來(lái)說(shuō),GC 就是一個(gè)無(wú)名英雄咽块,默默地做著貢獻(xiàn)绘面。

打個(gè)比方,天鵝在水面優(yōu)雅地游動(dòng)時(shí)侈沪,實(shí)際上腳蹼?yún)s在水下拼命地劃水揭璃。GC 也是如此。

在由編程語(yǔ)言構(gòu)造的美麗的源代碼這片水下亭罪,GC在拼命地將垃圾回收再利用塘辅。

3、python采用的是引用計(jì)數(shù)機(jī)制為主,標(biāo)記-清除和分代收集兩種機(jī)制為輔的策略皆撩。

4、垃圾回收:計(jì)數(shù)機(jī)制

1》GC 原本是一種“釋放怎么都無(wú)法被引用的對(duì)象的機(jī)制”哲银。那么人們自然而然地就會(huì)想到,可以讓所有對(duì)象事先記錄下“有多少程序引用自己”扛吞。讓各對(duì)象知道自己的“人氣指數(shù)”,從而讓沒(méi)有人氣的對(duì)象自己消失,這就是引用計(jì)數(shù)法(Reference Counting).清除這些無(wú)用的垃圾對(duì)象,把它們送回到可用列表。

2》引用計(jì)數(shù)法的優(yōu)點(diǎn):高效荆责、實(shí)時(shí)性滥比、對(duì)象有確定的生命周期、易于實(shí)現(xiàn)做院。

3》缺點(diǎn):維護(hù)引用計(jì)數(shù)消耗資源盲泛、無(wú)法解決循引用的問(wèn)題。

5键耕、垃圾回收:標(biāo)記-清除

1》如它的字面意思一樣,GC 標(biāo)記 - 清除算法由標(biāo)記階段和清除階段構(gòu)成寺滚。標(biāo)記階段是

把所有活動(dòng)對(duì)象都做上標(biāo)記的階段。清除階段是把那些沒(méi)有標(biāo)記的對(duì)象,也就是非活動(dòng)對(duì)象回收的階段屈雄。通過(guò)這兩個(gè)階段,就可以令不能利用的內(nèi)存空間重新得到利用村视。

6、垃圾回收:分代收集

1》分代垃圾回收(Generational GC)在對(duì)象中導(dǎo)入了“年齡”的概念,通過(guò)優(yōu)先回收容

易成為垃圾的對(duì)象,提高垃圾回收的效率酒奶。

2》gc的邏輯

分配內(nèi)存

-> 發(fā)現(xiàn)超過(guò)閾值了

-> 觸發(fā)垃圾回收

-> 將所有可收集對(duì)象鏈表放到一起

-> 遍歷, 計(jì)算有效引用計(jì)數(shù)

-> 分成 有效引用計(jì)數(shù)=0 和 有效引用計(jì)數(shù) > 0 兩個(gè)集合

-> 大于0的, 放入到更老一代

-> =0的, 執(zhí)行回收

-> 回收遍歷容器內(nèi)的各個(gè)元素, 減掉對(duì)應(yīng)元素引用計(jì)數(shù)(破掉循環(huán)引用)

-> 執(zhí)行-1的邏輯, 若發(fā)現(xiàn)對(duì)象引用計(jì)數(shù)=0, 觸發(fā)內(nèi)存回收

-> python底層內(nèi)存管理機(jī)制回收內(nèi)存

7蚁孔、gc模塊

gc模塊提供操作垃圾回收的接口奶赔,包括禁用gc,調(diào)整回收頻率杠氢,配置debug選項(xiàng)站刑,同時(shí)提供對(duì)無(wú)法釋放內(nèi)存對(duì)象的訪問(wèn)權(quán)。

19鼻百、熟悉TestNG绞旅,說(shuō)明一下用法?

TestNG的注釋非常強(qiáng)大和方便愕宋,TestNG允許并行測(cè)試玻靡,并可以基于group的方式執(zhí)行測(cè)試,還可以生成測(cè)試報(bào)表中贝,并且報(bào)告展示多樣化囤捻,可在其基礎(chǔ)上自行開(kāi)發(fā)測(cè)試報(bào)告插件以及測(cè)試監(jiān)聽(tīng)器。

20邻寿、數(shù)據(jù)庫(kù)的增刪改查蝎土,手寫sql

21、Redis是做什么用的绣否?ElasticSearch是什么誊涯?做什么用的?

Redis是內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ), 用作數(shù)據(jù)庫(kù), 緩存和消息代理蒜撮。

Elasticsearch是基于Apache Lucene的現(xiàn)代搜索和分析引擎暴构。

22、接口測(cè)試的定義段磨,接口測(cè)試是怎么做的取逾?如何存在接口依賴關(guān)系,怎么處理苹支?

接口測(cè)試主要用于外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互點(diǎn)砾隅,定義特定的交互點(diǎn),然后通過(guò)這些交互點(diǎn)來(lái)债蜜,通過(guò)一些特殊的規(guī)則也就是協(xié)議晴埂,來(lái)進(jìn)行數(shù)據(jù)之間的交互。

23寻定、Python中儒洛,“arg”和“kwarg”分別代表什么含義,都有哪些作用特姐?

如果我們不確定要往函數(shù)中傳入多少個(gè)參數(shù)晶丘,或者我們想往函數(shù)中以列表和元組的形式傳參數(shù)時(shí),那就使要用*args;

如果我們不知道要往函數(shù)中傳入多少個(gè)關(guān)鍵詞參數(shù)浅浮,或者想傳入字典的值作為關(guān)鍵詞參數(shù)時(shí)沫浆,那就要使用**kwargs;

1.*args的使用方法

*args用來(lái)將參數(shù)打包成tuple(元組)給函數(shù)體調(diào)用

舉個(gè)栗子:

>> def func2(*args):

>> print(args,type(args))

>>>> func2("a")

>> ('aa',) <class 'tuple'>

>>> func2(1,2,3)

>> (1, 2, 3) <class 'tuple'>

2.**kwargs的使用方法

**kwargs 打包關(guān)鍵字參數(shù)成dict(字典)給函數(shù)體調(diào)用

舉個(gè)栗子:

>> def func(**kwargs):

? ? print(kwargs,type(kwargs))

>> func(a=1,b=2)>> {'a': 1, 'b': 2} <class 'dict'>

24滚秩、冒煙測(cè)試的定義:

冒煙測(cè)試(smoketest)在測(cè)試中發(fā)現(xiàn)問(wèn)題专执,找到了一個(gè)Bug,然后開(kāi)發(fā)人員會(huì)來(lái)修復(fù)這個(gè)Bug郁油。這時(shí)想知道這次修復(fù)是否真的解決了程序的Bug本股,或者是否會(huì)對(duì)其它模塊造成影響,就需要針對(duì)此問(wèn)題進(jìn)行專門測(cè)試桐腌,這個(gè)過(guò)程就被稱為SmokeTest拄显。在很多情況下,做SmokeTest是開(kāi)發(fā)人員在試圖解決一個(gè)問(wèn)題的時(shí)候案站,造成了其它功能模塊一系列的連鎖反應(yīng)躬审,原因可能是只集中考慮了一開(kāi)始的那個(gè)問(wèn)題,而忽略其它的問(wèn)題蟆盐,這就可能引起了新的Bug承边。SmokeTest優(yōu)點(diǎn)是節(jié)省測(cè)試時(shí)間,防止build失敗石挂。缺點(diǎn)是復(fù)蓋率比較低博助。

25、session痹愚、cookie的區(qū)別:

? cookies 數(shù)據(jù)保存在客戶端富岳,session 數(shù)據(jù)保存在服務(wù)器端;

? cookies 可以減輕服務(wù)器壓力拯腮,但是不安全城瞎,容易進(jìn)行 cookies 欺騙;

? session 較安全疾瓮,但占用服務(wù)器資源

26、壓力測(cè)試匯總:(高并發(fā)的情況下飒箭,看響應(yīng)情況)

壓力測(cè)試狼电,需要先了解壓測(cè)的場(chǎng)景、壓測(cè)的參數(shù)弦蹂,然后準(zhǔn)備好要壓測(cè)的工具肩碟,代碼和數(shù)據(jù)。

壓力測(cè)試之前要明確壓測(cè)的功能和壓測(cè)的指標(biāo):

①固定接口參數(shù)進(jìn)行壓測(cè)還是進(jìn)行接口參數(shù)隨機(jī)化壓測(cè)凸椿?

②要求支持多少并發(fā)數(shù)削祈?

③TPS(每秒鐘處理事務(wù)數(shù))目前是多少?響應(yīng)時(shí)間要達(dá)到多少?

④被壓的服務(wù)器名稱或者被壓的服務(wù)器IP髓抑?

壓測(cè)完畢之后咙崎,需要出具壓力測(cè)試的測(cè)試報(bào)告,通過(guò)報(bào)告來(lái)分析是否壓測(cè)達(dá)到標(biāo)準(zhǔn):

查看聚合報(bào)告中的:

TPS吞吐量能不能達(dá)到呀唔要求吨拍,響應(yīng)時(shí)間褪猛、錯(cuò)誤率。

27羹饰、python中對(duì)多態(tài)的理解

多態(tài)是指一類事物有多種形態(tài)伊滋,比如動(dòng)物類,可以有貓队秩,狗笑旺,豬等等。(一個(gè)抽象類有多個(gè)子類馍资,因而多態(tài)的概念依賴于繼承)

多態(tài)性是指具有不同功能的函數(shù)可以使用相同的函數(shù)名筒主,這樣就可以用一個(gè)函數(shù)名調(diào)用不同內(nèi)容的函數(shù)。

28迷帜、postman中請(qǐng)求報(bào)文有哪四種

POST請(qǐng)求一:表單提交

請(qǐng)求頭中的Content-Type與請(qǐng)求參數(shù)的格式之間是有關(guān)聯(lián)關(guān)系

post參數(shù)格式:表單提交:application/x-www-form-urlencoded

Json提交:application/json

xml提交:text/xml

POST請(qǐng)求二:json提交

POST請(qǐng)求三:xml提交

POST請(qǐng)求四:二進(jìn)制文件提交

請(qǐng)求Body里面:

1. form-data

就是http請(qǐng)求中的multipart/form-data,它會(huì)將表單的數(shù)據(jù)處理為一條消息物舒,以標(biāo)簽為單元,用分隔符分開(kāi)戏锹。既可以上傳鍵值對(duì)冠胯,也可以上傳文件。當(dāng)上傳的字段是文件時(shí)锦针,會(huì)有content-type來(lái)說(shuō)明文件類型荠察;content-disposition用來(lái)說(shuō)明字段的一些信息;由于有boundary隔離奈搜,所以multipart/form-data既可以上傳文件悉盆,也可以上傳鍵值對(duì),它采用了鍵值對(duì)的方式馋吗,所以可以上傳多個(gè)文件焕盟。

2.x-www-form-urlencoded:

就是application/x-www-from-urlencoded,會(huì)將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為鍵值對(duì)

3.raw

可以上傳任意格式的文本,可以上傳text宏粤、json脚翘、xml、html等

4.binary

相當(dāng)于content-type:application/octet-stream,從字面意思得知绍哎,只可以上傳二進(jìn)制數(shù)據(jù)来农,通常用來(lái)上傳文件,由于沒(méi)有鍵值崇堰,所以沃于,一次只能上傳一個(gè)文件涩咖。

29、selenium的簡(jiǎn)介和原理

Selenium是一個(gè)用于Web應(yīng)用程序自動(dòng)化測(cè)試工具繁莹。Selenium測(cè)試直接運(yùn)行在瀏覽器中檩互,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11)蒋困,Mozilla Firefox盾似,Safari,Google Chrome雪标,Opera等零院。

主要功能包括:測(cè)試與瀏覽器的兼容性——測(cè)試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。

Selenium原理村刨,主要需要三個(gè)東西:

1.自動(dòng)化測(cè)試代碼:自動(dòng)化測(cè)試代碼發(fā)送請(qǐng)求給瀏覽器的驅(qū)動(dòng)(比如火狐驅(qū)動(dòng)告抄、谷歌驅(qū)動(dòng))

2.瀏覽器驅(qū)動(dòng):它來(lái)解析這些自動(dòng)化測(cè)試的代碼,解析后把它們發(fā)送給瀏覽器

3.瀏覽器:執(zhí)行瀏覽器驅(qū)動(dòng)發(fā)來(lái)的指令嵌牺,并最終完成工程師想要的操作打洼。

30、monkey命令三個(gè)-v的含義逆粹、monkey中-v的命令

①需要有l(wèi)og日志輸出募疮,可以加上-v參數(shù)。-v表示輸出的Log級(jí)別僻弹,-v最低阿浓,-v -v -v最高。adb shell monkey -v? <event -count> 包名

②Monkey也提供了這樣的參數(shù) -s----復(fù)現(xiàn)隨機(jī)點(diǎn)擊事件蹋绽。

adb shell monkey -s <seed> <event-count> 包名

31芭毙、Linux命令vi與vim的區(qū)別

vi與vim

vi編輯器是所有Unix及Linux系統(tǒng)下標(biāo)準(zhǔn)的編輯器,他就相當(dāng)于windows系統(tǒng)中的記事本一樣卸耘,它的強(qiáng)大不遜色于任何最新的文本編輯器退敦。他是我們使用Linux系統(tǒng)不能缺少的工具。由于對(duì)Unix及Linux系統(tǒng)的任何版本蚣抗,vi編輯器是完全相同的侈百,學(xué)會(huì)它后,您將在Linux的世界里暢行無(wú)阻翰铡。

vim 具有程序編輯的能力设哗,可以以字體顏色辨別語(yǔ)法的正確性,方便程序設(shè)計(jì)两蟀;

因?yàn)槌绦蚝?jiǎn)單,編輯速度相當(dāng)快速震缭。

vim可以當(dāng)作vi的升級(jí)版本赂毯,他可以用多種顏色的方式來(lái)顯示一些特殊的信息。

vim會(huì)依據(jù)文件擴(kuò)展名或者是文件內(nèi)的開(kāi)頭信息, 判斷該文件的內(nèi)容而自動(dòng)的執(zhí)行該程序的語(yǔ)法判斷式党涕,再以顏色來(lái)顯示程序代碼與一般信息烦感。

vim里面加入了很多額外的功能,例如支持正則表達(dá)式的搜索膛堤、多文件編輯手趣、塊復(fù)制等等。 這對(duì)于我們?cè)贚inux上進(jìn)行一些配置文件的修改工作時(shí)是很棒的功能肥荔。

32绿渣、jmeter的分布式壓測(cè)

Jmeter做分布式測(cè)試的原因:

測(cè)試機(jī)器的配置低,對(duì)服務(wù)器進(jìn)行壓測(cè)時(shí)燕耿,造成不了壓力中符。

jmeter并發(fā)10000后,測(cè)試機(jī)就已經(jīng)卡頓了誉帅,而且測(cè)試結(jié)果有大量失數砩ⅰ(忽略了jmeter自身問(wèn)題=。=|||)~ 此現(xiàn)象又稱:Jmeter內(nèi)存溢出蚜锨。

https://www.cnblogs.com/UncleYong/p/10854152.html

33档插、MVC模式的定義:

邏輯層與數(shù)據(jù)層分開(kāi)

34、web端測(cè)試與app端測(cè)試的區(qū)別

系統(tǒng)架構(gòu)方面:

web項(xiàng)目亚再,一般都是b/s架構(gòu)郭膛,基于瀏覽器的

app項(xiàng)目,則是c/s的针余,必須要有客戶端饲鄙,用戶需要安裝客戶端。

web測(cè)試只要更新了服務(wù)器端圆雁,客戶端就會(huì)同步會(huì)更新忍级。

App項(xiàng)目則需要客戶端和服務(wù)器都更新。

性能方面:

web頁(yè)面主要會(huì)關(guān)注響應(yīng)時(shí)間

而app則還需要關(guān)心流量伪朽、電量轴咱、CPU、GPU烈涮、Memory這些朴肺。

它們服務(wù)端的性能沒(méi)區(qū)別,都是一臺(tái)服務(wù)器坚洽。

兼容方面:

web是基于瀏覽器的戈稿,所以更傾向于瀏覽器和電腦硬件,電腦系統(tǒng)的方向的兼容

app測(cè)試則要看分辨率讶舰,屏幕尺寸鞍盗,還要看設(shè)備系統(tǒng)需了。

web測(cè)試是基于瀏覽器的所以不必考慮安裝卸載。

而app是客戶端的般甲,則必須測(cè)試安裝肋乍、更新、卸載敷存。除了常規(guī)的安裝墓造、更新、卸載還要考慮到異常場(chǎng)景锚烦。包括安裝時(shí)的中斷觅闽、弱網(wǎng)、安裝后刪除安裝文件

此外APP還有一些專項(xiàng)測(cè)試:如網(wǎng)絡(luò)挽牢、適配性谱煤。。禽拔。

APP測(cè)試特點(diǎn)

(除了按需求說(shuō)明書外的 功能測(cè)試 之外還需要進(jìn)行如下測(cè)試)

1刘离、適配性測(cè)試(也叫兼容性測(cè)試,不同的安卓版本睹栖,不同廠商硫惕,不同手機(jī)品牌)

2、不同網(wǎng)絡(luò)測(cè)試 (2G網(wǎng)絡(luò)/3G網(wǎng)絡(luò)/4G網(wǎng)絡(luò)/WIFI網(wǎng)絡(luò))

3野来、在線升級(jí)測(cè)試

4恼除、中斷測(cè)試(電話、短中消息打擾)

5曼氛、耗電量測(cè)試

6豁辉、弱網(wǎng)測(cè)試(信號(hào)差,信號(hào)屏蔽實(shí)驗(yàn)室)

7舀患、安裝卸載 (C/S)

8徽级、流量測(cè)試

35、js的彈框的按鈕的定位

Alert()聊浅、

36餐抢、jmeter的定時(shí)器的作用

在默認(rèn)情況下,jmeter發(fā)送每個(gè)請(qǐng)求之間是沒(méi)有延時(shí)的低匙,如果線程數(shù)足夠大旷痕,瞬間就會(huì)將服務(wù)器壓死。

在實(shí)際的業(yè)務(wù)過(guò)程中顽冶,請(qǐng)求之間是有一定時(shí)間的停頓的欺抗,比如登錄網(wǎng)站時(shí)輸入用戶名和密碼需要時(shí)間(用戶會(huì)確認(rèn)下輸入的對(duì)不對(duì)),所以在請(qǐng)求之間設(shè)置合理的延時(shí)是必須的强重,也更接近用戶的真實(shí)業(yè)務(wù)情況绞呈。

在jmeter中团滥,定時(shí)器組件提供了系列不同類型的延時(shí)控制。合理使用定時(shí)器組件报强,能讓你的性能測(cè)試更接近真實(shí),更能挖掘出系統(tǒng)的瓶頸和評(píng)估系統(tǒng)的性能指標(biāo)拱燃。

37秉溉、sql命令:左鏈接、右鏈接碗誉、分頁(yè)召嘶、去重

Join.left、Join.right哮缺、distinct弄跌、limit

38、linux命令中尝苇,操作管理文件權(quán)限

Sudo chmod 777 -R 文件名

39铛只、appium的原理:

appium則是基于WebDriver協(xié)議,并通過(guò) post 發(fā)送一個(gè) json 告知服務(wù)端相關(guān)測(cè)試信息糠溜,利用Bootstrap.jar的java文件集成包淳玩,最后通過(guò)調(diào)用輸入U(xiǎn)iAutomator的命令,從而實(shí)現(xiàn)App的自動(dòng)化測(cè)試非竿。

40蜕着、函數(shù)式編程

函數(shù)式編程是指用一系列函數(shù)決定問(wèn)題。

函數(shù)是一等公民(我們程序的基本單位是用函數(shù)來(lái)組成的)红柱,函數(shù)本身可以賦值給變量承匣,賦值后變量綁定函數(shù),允許將函數(shù)本身作為參數(shù)傳入另一個(gè)函數(shù)并返回一個(gè)函數(shù)锤悄。

函數(shù)式編程要求函數(shù)可重入性:即一個(gè)函數(shù)傳的參數(shù)一定韧骗,則結(jié)果必須一定;要求def定義的函數(shù)不要訪問(wèn)除局部變量以外的變量铁蹈。

示例:

def myadd(x, y)

return x + y

print(myadd(10, 20))

41宽闲、瀏覽器輸入 url 按回車背后經(jīng)歷了哪些?

1握牧、首先容诬,在瀏覽器地址欄中輸入 url,先解析 url沿腰,檢測(cè) url 地址是否合法

2览徒、瀏覽器先查看瀏覽器緩存-系統(tǒng)緩存-路由器緩存,如果緩存中有颂龙,會(huì)直接在屏幕中顯示頁(yè)面內(nèi)容习蓬。若沒(méi)有纽什,則跳到第三步操作。

瀏覽器緩存:瀏覽器會(huì)記錄 DNS 一段時(shí)間躲叼,因此芦缰,只是第一個(gè)地方解析 DNS 請(qǐng)求;

操作系統(tǒng)緩存:如果在瀏覽器緩存中不包含這個(gè)記錄枫慷,則會(huì)使系統(tǒng)調(diào)用操作系統(tǒng)让蕾,獲取操作系統(tǒng)的記錄(保存最近的 DNS 查詢緩存);

路由器緩存:如果上述兩個(gè)步驟均不能成功獲取 DNS 記錄或听,繼續(xù)搜索路由器緩存探孝;

ISP 緩存:若上述均失敗,繼續(xù)向 ISP 搜索誉裆。

3顿颅、在發(fā)送 http 請(qǐng)求前,需要域名解析(DNS 解析)足丢,解析獲取相應(yīng)的 IP 地址粱腻。

4、瀏覽器向服務(wù)器發(fā)起 tcp 連接霎桅,與瀏覽器建立 tcp 三次握手栖疑。

5、握手成功后滔驶,瀏覽器向服務(wù)器發(fā)送 http 請(qǐng)求遇革,請(qǐng)求數(shù)據(jù)包。

6揭糕、服務(wù)器處理收到的請(qǐng)求萝快,將數(shù)據(jù)返回至瀏覽器

7、瀏覽器收到 HTTP 響應(yīng)

8著角、瀏覽器解碼響應(yīng)揪漩,如果響應(yīng)可以緩存,則存入緩存吏口。

9奄容、 瀏覽器發(fā)送請(qǐng)求獲取嵌入在 HTML 中的資源(html,css产徊,javascript昂勒,圖片,

音樂(lè)..........)舟铜,對(duì)于未知類型戈盈,會(huì)彈出對(duì)話框。

10、 瀏覽器發(fā)送異步請(qǐng)求塘娶。

11归斤、頁(yè)面全部渲染結(jié)束。

50刁岸、GET 和 POST 有一個(gè)重大區(qū)別脏里,簡(jiǎn)單的說(shuō):

GET 產(chǎn)生一個(gè) TCP 數(shù)據(jù)包;POST 產(chǎn)生兩個(gè) TCP 數(shù)據(jù)包虹曙。

對(duì)于 GET 方式的請(qǐng)求膝宁,瀏覽器會(huì)把 http header 和 data 一并發(fā)送出去,服務(wù)器響應(yīng) 200(返回?cái)?shù)據(jù))根吁;

而對(duì)于 POST,瀏覽器先發(fā)送 header合蔽,服務(wù)器響應(yīng) 100 continue击敌,瀏覽器再發(fā)送data,服務(wù)器響應(yīng) 200 (返回?cái)?shù)據(jù))拴事。

42沃斤、什么是閉包?

內(nèi)部函數(shù)對(duì)外部函數(shù)作用域里變量的引用(非全局變量)刃宵,則稱內(nèi)部函數(shù)為閉包衡瓶。

閉包三要素:

1、嵌套函數(shù) 2牲证、變量的引用? 3哮针、返回內(nèi)部函數(shù)

43、測(cè)試流程:

需求評(píng)審坦袍、需求落實(shí)十厢、制定測(cè)試計(jì)劃、設(shè)計(jì)測(cè)試用例捂齐、用例評(píng)審蛮放、冒煙測(cè)試、測(cè)試執(zhí)行奠宜、alpha包颁、beta測(cè)試、驗(yàn)收測(cè)試压真、風(fēng)險(xiǎn)評(píng)估娩嚼、上線\測(cè)試觀察、問(wèn)題跟進(jìn)榴都、提出問(wèn)題解決方案待锈、測(cè)試報(bào)告、復(fù)盤會(huì)議嘴高。

44竿音、super 是干嘛用的和屎?在 Python2 和 Python3 使用,有什么區(qū)別春瞬?為什么要使用 super柴信?請(qǐng)舉例說(shuō)明。

答:

super 用于繼承父類的方法宽气、屬性随常。

super 是新式類中才有的,所以 Python2 中使用時(shí)萄涯,要在類名的參數(shù)中寫 Object绪氛。Python3 默認(rèn)是新式類,不用寫涝影,直接可用枣察。

使用 super 可以提高代碼的復(fù)用性、可維護(hù)性燃逻。修改代碼時(shí)序目,只需修改一處。

代碼舉例:

class baseClass:

? ? ? def test1(self, num):

? ? ? ? ? ? ? print(num)

class?sonClass(baseClass):

def?test2(self):

super().test1(num)

son = sonClass()

son.test1(11)

3伯襟、快速編寫前端 HTML猿涨、JavaScript、Vue 代碼姆怪。

答:

HTML朵你、JavaScript 代碼:

<!DOCTYPE html><html? lang="en"><head>

? ? <meta? charset="utf-8"></head><body>

? ? <h1? id="title">xxx公司</h1>

? ? <p>xxx公司是一家......</p>

? ? <div? id="mybox">

? ? ? ? <h1>{{a}}</h1>

? ? ? ? <input? type="button"? value="按我"? v-on:click="add()">

? ? </div>

? ? <script? type="text/javascript"? src="public/bundle.js"></script></body></html><script>

? ? var title = document.getElementById("title");

title.onclick =? function()? {

alert('我愛(ài)xxx公司垛膝,祝我面試成功');

? ? }</script>

Vue 代碼編寫:

import? Vue? from? "vue";new? Vue({

? ? el :? "#mybox",

? ? data :? {

? ? ? ? a :? 100

? ? },

? ? methods :? {

? ? ? ? add :? function(){

? ? ? ? this.a ++;

? ? }

? }

});

45荔泳、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3]激况,用一行代碼得出 [11, 1, 2, 3, 5]

答:?list(set(L))

46、L = [1, 2, 3, 4, 5]淀衣,L[10:]的結(jié)果是昙读?

答:?空列表

47、L = [1, 2, 3, 5, 6]膨桥,如何得出 '12356'蛮浑?

答:

s =? ''for i in L:

? ? s = s + str(i)print(s)? # 12356print(type(s))? # <class 'str'>

48、列表和字典有什么區(qū)別只嚣?

答:?一般都是問(wèn)列表和元組有什么不同沮稚。

(1)獲取元素的方式不同。列表通過(guò)索引值獲取册舞,字典通過(guò)鍵獲取蕴掏。

(2)數(shù)據(jù)結(jié)構(gòu)和算法不同。字典是 hash 算法,搜索的速度特別快盛杰。

(3)占用的內(nèi)存不同挽荡。

49、如何結(jié)束一個(gè)進(jìn)程即供?

答:

(1)調(diào)用 terminate 方法定拟。

(2)使用 subProcess 模塊的 Popen 方法。使用簡(jiǎn)單逗嫡,具體用法青自,這里不展開(kāi)。

50驱证、進(jìn)程延窜、線程有什么區(qū)別?什么情況下用進(jìn)程抹锄?什么情況下用線程需曾?

答:

(1)區(qū)別:

① 地址空間和其它資源(如打開(kāi)文件):進(jìn)程之間相互獨(dú)立,同一進(jìn)程的各線程之間共享祈远。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見(jiàn)。

② 通信:進(jìn)程間通信 IPC商源,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來(lái)進(jìn)行通信——需要進(jìn)程同步和互斥手段的輔助车份,以保證數(shù)據(jù)的一致性。

③ 調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多牡彻。

④ 在多線程操作系統(tǒng)中扫沼,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。

(2)使用場(chǎng)景:同時(shí)操作一個(gè)對(duì)象的時(shí)候庄吼,比如操作的是一個(gè)全局變量缎除,我用線程,因?yàn)槿肿兞渴撬芯€程共享的总寻。

51器罐、什么是ORM?為什么要用ORM渐行?不用ORM會(huì)帶來(lái)什么影響轰坊?

答:

ORM 框架可以將類和數(shù)據(jù)表進(jìn)行對(duì)應(yīng),只需要通過(guò)類和對(duì)象就可以對(duì)數(shù)據(jù)表進(jìn)行操作祟印。

通過(guò)類和對(duì)象操作對(duì)應(yīng)的數(shù)據(jù)表肴沫,類的靜態(tài)屬性名和數(shù)據(jù)表的字段名一一對(duì)應(yīng),不需要寫 SQL 語(yǔ)句蕴忆。

ORM 另外一個(gè)作用颤芬,是根據(jù)設(shè)計(jì)的類生成數(shù)據(jù)庫(kù)中的表。

52、寫一段代碼站蝠,ping 一個(gè) ip 地址汰具,并返回成功、失敗的信息沉衣。

答:?使用 subProcess 模塊的 Popen 方法

53郁副、說(shuō)說(shuō)接口測(cè)試的流程,介紹一下request有哪些內(nèi)容豌习。

答:

(1)流程:獲取接口文檔存谎,依據(jù)文檔設(shè)計(jì)接口參數(shù),獲取響應(yīng)肥隆,解析響應(yīng)既荚,校驗(yàn)結(jié)果,判斷測(cè)試是否通過(guò)栋艳。

(2)request 內(nèi)容:

① 封裝了各種請(qǐng)求類型恰聘,get、post 等吸占;

② 以關(guān)鍵字參數(shù)的方式晴叨,封裝了各種請(qǐng)求參數(shù),params矾屯、data兼蕊、headers、token 等件蚕;

③ 封裝了響應(yīng)內(nèi)容孙技,status_code、json()排作、cookies牵啦、url 等;

④ session 會(huì)話對(duì)象妄痪,可以跨請(qǐng)求哈雏。

54、UI 自動(dòng)化衫生,如何做集群僧著?

答:?Selenium Grid。

55障簿、移動(dòng)端 UI 自動(dòng)化盹愚,經(jīng)常會(huì)自動(dòng)安裝 2 個(gè)程序,你知道那兩個(gè)程序是什么東西不站故?

答:?守護(hù)精靈皆怕,和 Python 并發(fā)編程中的 daemon 原理一樣毅舆,父進(jìn)程/父線程的代碼執(zhí)行完畢,它就終止愈腾,要寫在 start 方法前面憋活。另外,要找到配置文件虱黄,注釋掉兩行代碼悦即。

56、說(shuō)5個(gè)以上 Linux 命令橱乱。

答:

ls?列出目錄下的文件和文件夾?

cd?切換目錄?

cd ..? 返回上一級(jí)目錄

rm?刪除目錄和文件?

cat??查看文件內(nèi)容?

ps?可以看那個(gè)進(jìn)程再跑?

ps?-x?[PID]?查看單個(gè)進(jìn)程的狀態(tài)?

top?可以看那個(gè)進(jìn)程的占用率最高?

su?切換到root用戶?

kill?[pid]?殺死一個(gè)進(jìn)程?

chmod?777?<file>?修改該文件為可執(zhí)行權(quán)限?

57辜梳、自動(dòng)化代碼中,用到了哪些設(shè)計(jì)模式泳叠?

答:自動(dòng)化代碼用到過(guò)的設(shè)計(jì)模式:

①單例設(shè)計(jì)模式

②工廠模式

③PO設(shè)計(jì)模式

④數(shù)據(jù)驅(qū)動(dòng)模式

⑤面向接口編程設(shè)計(jì)模式

58作瞄、什么是Selenium

答:Selenium是一個(gè)開(kāi)源的web自動(dòng)化測(cè)試框架,支持多種編程語(yǔ)言開(kāi)發(fā)自動(dòng)化測(cè)試腳本危纫,支持跨瀏覽器平臺(tái)進(jìn)行測(cè)試

58宗挥、什么是斷言?

答:斷言Assert用于在代碼中驗(yàn)證實(shí)際結(jié)果是不是符合預(yù)期結(jié)果种蝶,如果測(cè)試用例執(zhí)行失敗會(huì)拋出異常并提供斷言日志

59契耿、TestNG有哪些有點(diǎn)?

答:TestNG的注釋非常強(qiáng)大和方便螃征,TestNG允許并行測(cè)試搪桂,并可以基于group的方式執(zhí)行測(cè)試,還可以生成測(cè)試報(bào)表会傲,并且報(bào)告展示多樣化,可在其基礎(chǔ)上自行開(kāi)發(fā)測(cè)試報(bào)告插件以及測(cè)試監(jiān)聽(tīng)器

60拙泽、什么是web自動(dòng)化測(cè)試淌山?

答:web自動(dòng)化測(cè)試指的是從UI(用戶界面)層面進(jìn)行的自動(dòng)化測(cè)試,測(cè)試人員通過(guò)編程自動(dòng)化程度(測(cè)試用例腳本)來(lái)打開(kāi)瀏覽器測(cè)試網(wǎng)站的業(yè)務(wù)邏輯

61顾瞻、寫出Selenium中你最熟悉的接口或類泼疑?

答:webDriver、lnternetExplorerDriver荷荤、FirefoxDriver退渗、ChromeDriver、WebElement蕴纳、WebDriverWait会油、By

62、元素定位類型有哪些古毛?

答:By類一共有8中元素定位方式翻翩,他們都是靜態(tài)方法:

By.id(),By.name(),By.tagName(),By.className(),By.cssSelector(),By.linkText(),By.partialLinText(),By.xpath()

63都许、登錄按鈕除了用click方法進(jìn)行點(diǎn)擊以外還有其他方式么?

答:還可以使用submit()方法嫂冻,前提是input元素的type為submit

64胶征、怎么對(duì)含有驗(yàn)證碼的功能進(jìn)行自動(dòng)化測(cè)試的?

答:1)圖像識(shí)別桨仿,技術(shù)難度大睛低,效果不佳,不推薦

2)屏蔽驗(yàn)證服傍,邀請(qǐng)開(kāi)發(fā)處理钱雷,但在預(yù)生產(chǎn)環(huán)境或者生產(chǎn)環(huán)境不推薦

3)萬(wàn)能驗(yàn)證碼,使用一個(gè)負(fù)責(zé)的其他人無(wú)法猜到的驗(yàn)證碼

65伴嗡、怎么驗(yàn)證復(fù)選按鈕是不是被選中急波?

答:可以使用元素的isSelected()方法,如果返回的是true則說(shuō)明被選中瘪校,否則表明未被選中

66澄暮、如何處理alert彈窗?

答:處理alert彈窗首先需要先跳轉(zhuǎn)到alert上阱扬,然后在點(diǎn)擊確定或者取消按鈕泣懊,

Alert alet=driver.switchTo().alert();//切換到alert

alert…accept();//確定

alert.dismiss();//取消

67、如何用webdriver進(jìn)行鼠標(biāo)右鍵點(diǎn)擊操作麻惶?

答:使用Actions類

Actions actions=new Actions(driver);

actions.moveToElement(element).perform();

actions.contextClick().perform();

68馍刮、舉一個(gè)webDriver中方法重載的例子?

答:frame(string nama),frame(int index),

frame(WebElement element)

69窃蹋、下拉菜單中如何去選擇一個(gè)菜單項(xiàng)卡啰?

答:如果下拉菜單是select標(biāo)簽,使用方法:

selectByValue()或者是selectBylndex()或者selectByVisibleText()即可

如果這個(gè)下拉菜單不是通過(guò)select標(biāo)簽創(chuàng)建警没,則直接通過(guò)xpath定位元素然后去點(diǎn)擊選擇

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匈辱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杀迹,更是在濱河造成了極大的恐慌亡脸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件树酪,死亡現(xiàn)場(chǎng)離奇詭異浅碾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)续语,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門垂谢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人疮茄,你說(shuō)我怎么就攤上這事埂陆】涟祝” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵焚虱,是天一觀的道長(zhǎng)购裙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鹃栽,這世上最難降的妖魔是什么躏率? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮民鼓,結(jié)果婚禮上薇芝,老公的妹妹穿的比我還像新娘。我一直安慰自己丰嘉,他們只是感情好夯到,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著饮亏,像睡著了一般耍贾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上路幸,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天荐开,我揣著相機(jī)與錄音,去河邊找鬼简肴。 笑死晃听,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砰识。 我是一名探鬼主播能扒,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辫狼!你這毒婦竟也來(lái)了初斑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤予借,失蹤者是張志新(化名)和其女友劉穎越平,沒(méi)想到半個(gè)月后频蛔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體灵迫,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年晦溪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瀑粥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡三圆,死狀恐怖狞换,靈堂內(nèi)的尸體忽然破棺而出避咆,到底是詐尸還是另有隱情,我是刑警寧澤修噪,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布查库,位于F島的核電站,受9級(jí)特大地震影響黄琼,放射性物質(zhì)發(fā)生泄漏樊销。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一脏款、第九天 我趴在偏房一處隱蔽的房頂上張望围苫。 院中可真熱鬧,春花似錦撤师、人聲如沸剂府。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腺占。三九已至,卻和暖如春万俗,著一層夾襖步出監(jiān)牢的瞬間湾笛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工闰歪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚎研,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓库倘,卻偏偏與公主長(zhǎng)得像临扮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子教翩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345