Python自動化試題倉
面試引言
1#?-*-coding=utf-8-*-
2# anthou:石超
3
4??聊聊為什么選擇Python
5-?為什么學(xué)習(xí)Python?
6-?通過什么途徑學(xué)習(xí)的Python?
7
8:?)
Python自動化試題?
1#?-*-coding=utf-8-*-
2# anthou:石超
3
4unittest相關(guān)
51、unittest怎么實現(xiàn)結(jié)果的對比?
6
72、setup和teardown有什么用?
8
9http相關(guān)
103、看過http的請求內(nèi)容嗎?都包含什么?Cookie一般放在哪?平時怎么抓包?
11
124、知道urllib嗎?有沒有更優(yōu)的選擇?
13
14json相關(guān)
155、json和python的字典有什么區(qū)別呢?
16
175.1、網(wǎng)絡(luò)傳輸需求格式為json,你在python中寫的是字典,這時候怎么辦呢?
18
195.2、清楚json.loads與json.dumps的區(qū)別嗎?
20
216、有遇到過這種情況嗎:在函數(shù)的內(nèi)部引用了外部(非全局)作用域的變量。這種情況最著名的應(yīng)用是什么?
22
23考察面向?qū)ο笙嚓P(guān):
247、有用過類的一些魔法方法嗎?用過哪些?都有什么用?
25
268、類的實例化方法第一個參數(shù)是什么?必須是這個單詞嗎?意義是什么?有沒有可能第一個參數(shù)是其他的或者沒有?什么情況下會出現(xiàn)這種情況?
27
28考察多線程相關(guān):
299、Python能否利用多核cpu的優(yōu)勢?為什么?
30
3110、Python多線程更適合什么場景?
32
3311、thread和threading,推薦使用threading模塊,原因如下:
34
3511.1join()的作用是:
36
3712、Python多線程需要鎖嗎?有GIL在,則某一時刻只能有一條線程運(yùn)行,不會有多條線程同時修改數(shù)據(jù)的情況產(chǎn)生,那為什么還要加鎖?
38
39
40?總結(jié):試題只是為了測試自己的技術(shù)相關(guān)知識點,面試過程更多要將自己的想法與技術(shù)結(jié)合哈,沒有想法的測試/開發(fā)基本猶如一個絞肉機(jī),毫無感情思想而言
41
42
43:?)
03?
經(jīng)典試題
1#?-*-coding=utf-8-*-
2# anthou:石超
3
41、如何實現(xiàn)?“1,2,3”?變成?[‘1’,’2’,’3’]??
5
62、如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100]??
7
83、一行代碼實現(xiàn)刪除列表中重復(fù)的值??
9
104、如何生成一個隨機(jī)數(shù)?
11
125、如何使用python刪除一個文件?
13
146、一行代碼實現(xiàn)9*9乘法表
15
167、1、2、3、4、5?能組成多少個互不相同且無重復(fù)的三位數(shù)
17
18
19:?)
1#?-*-coding=utf-8-*-
2# anthou:石超
3
4
5unittest相關(guān)
61、unittest怎么實現(xiàn)結(jié)果的對比?
7 通過斷言,unittest常用的斷言有assertrqual、assertnotequal等等
8
92、setup和teardown有什么用?
10 1).setup是測試前的準(zhǔn)備工作,每條用例代碼執(zhí)行前都會先執(zhí)行一次setup。
11 2)?.Teardown是測試結(jié)束后的清理
12
13http相關(guān)
143、看過http的請求內(nèi)容嗎?都包含什么?Cookie一般放在哪?平時怎么抓包?
15 1).包含url,請求方法,狀態(tài)碼,請求頭,請求體
16 2).Cooike一般放在請求頭
17 3).Web可以用谷歌控制臺抓,手機(jī)或者客戶端程序可以用fidder等工具。
18
194、知道urllib嗎?有沒有更優(yōu)的選擇?
20 1).urllib是python3的庫,內(nèi)置了一些操作http請求的方法。更優(yōu)的選擇是requests,python的第三方庫,封裝了urllib,更簡潔易用。
21
22json相關(guān)
235、json和python的字典有什么區(qū)別呢?
24 1).json是一種數(shù)據(jù)傳輸?shù)母袷?,字典是python內(nèi)置的一種數(shù)據(jù)結(jié)構(gòu)。python dict 單引號雙引號均可,json強(qiáng)制規(guī)定雙引號。json key value必須是字符串,python 字典的key,value是任何可哈希的對象
255.1、網(wǎng)絡(luò)傳輸需求格式為json,你在python中寫的是字典,這時候怎么辦呢?
26 1).用json庫進(jìn)行轉(zhuǎn)換,json.loads和json.dumps
275.2、清楚json.loads與json.dumps的區(qū)別嗎?
28 1).json中的dumps方法是用來將特定格式的數(shù)據(jù)進(jìn)行字符串化的操作,比如列表字典都可以進(jìn)行字符串化操作然后寫入json的file;而且如果是要寫入json文件就必須要進(jìn)行dumps操作;
29 2).loads用來將字符型數(shù)據(jù)轉(zhuǎn)換成原來的數(shù)據(jù)格式,諸如列表和字典,就是原本是什么格式就還原成什么格式。
30
316、有遇到過這種情況嗎:在函數(shù)的內(nèi)部引用了外部(非全局)作用域的變量。這種情況最著名的應(yīng)用是什么?
32 1).其實這就是閉包,最著名的應(yīng)用是裝飾器。自動化測試經(jīng)常用到裝飾器,比如在登錄,打日志,輸出時間等等情況
33
34考察面向?qū)ο笙嚓P(guān):
357、有用過類的一些魔法方法嗎?用過哪些?都有什么用?
36 1).以雙下劃線開頭和結(jié)尾的方法是魔法方法。最常用的:__init__,用來初始化類。其他還很多,比如:__str__,__call__等等
37
388、類的實例化方法第一個參數(shù)是什么?必須是這個單詞嗎?意義是什么?有沒有可能第一個參數(shù)是其他的或者沒有?什么情況下會出現(xiàn)這種情況?
39 1).類的實例化方法第一個參數(shù)是self,不一定非得是self,也可以是abcd,隨意。
40 2).意義是類自身實例化出的對象。
41 3).也可能第一個參數(shù)是cls
42 4).這種情況是類方法,需要加裝飾器@classmethod,也可能沒有,這種情況是靜態(tài)方法,需要加裝飾器@staticmethod
43
44考察多線程相關(guān):
459、Python能否利用多核cpu的優(yōu)勢?為什么?
46 1).不能,因為python內(nèi)置了全局解釋器鎖(GIL),同一時刻只能有一個線程在運(yùn)行
47
4810、Python多線程更適合什么場景?
49 1).io密集型(如爬蟲,文件操作,網(wǎng)絡(luò)編程等)
50
5111、thread和threading,推薦使用threading模塊,原因如下:
52 1).threading更先進(jìn),有更好的線程支持
53 2).thread模塊的同步原語很少,只有一個,threading很多
54 3).thread模塊對于進(jìn)程何時退出沒有控制。主線程結(jié)束,子線程隨即強(qiáng)制結(jié)束。thread不支持守護(hù)線程。
5511.1join()的作用是:
56 1).在子線程完成運(yùn)行之前,這個子線程的父線程將一直被阻塞,主線程會在所有非守護(hù)線程退出后退出。
57
5812、Python多線程需要鎖嗎?有GIL在,則某一時刻只能有一條線程運(yùn)行,不會有多條線程同時修改數(shù)據(jù)的情況產(chǎn)生,那為什么還要加鎖?
59 1).需要鎖。因為很多操作不是原子操作。線程會在執(zhí)行到100條字節(jié)碼的時候切換。舉例如下:
60雖然兩個線程A、B由于GIL鎖的存在,不會同時執(zhí)行。(假設(shè)A、B功能是對一個全局變量 m 進(jìn)行+1)但是A由于時間片用完切回B之前的最后一步操作可能是讀取m的值,記作m1.此時B執(zhí)行讀取m的值,m加一,寫回m,此時m的值是m1+1.又切回A,A執(zhí)行加一,寫回m,而寫回的值是多少呢?還是m1+1.
61
62
63?總結(jié):以上就是本期的內(nèi)容,你學(xué)會了嗎?如果有什么不懂得,請公眾號搜索[小X聊測試],每周會定期更新測試相關(guān)的內(nèi)容?下期內(nèi)容提示:?下期內(nèi)容主要針對面試時,一些需要注意的事項進(jìn)行整理!?。?!
1#?-*-coding=utf-8-*-
2# anthou:石超
3
41、如何實現(xiàn)?“1,2,3”?變成?[‘1’,’2’,’3’]??
5s?=?'1,2,3'
6li?=?s.split(',')??#?指定分隔符對字符串進(jìn)行切片
7print(li)???#?['1',?'2',?'3']
8
92、如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100]??
10li?=?[x**2?for?x?in?range(1,11)]
11print(li)???#?[1,?4,?9,?16,?25,?36,?49,?64,?81,?100]
12
133、一行代碼實現(xiàn)刪除列表中重復(fù)的值??
14集合的主要作用是去重和關(guān)系運(yùn)算.
15
16li?=?[1,1,4,7,4,9,7,9,11]
17new_li?=?list(set(li))
18print(new_li)??#?[1,?4,?7,?9,?11]
19
204、如何生成一個隨機(jī)數(shù)?
21random模塊可以很容易生成隨機(jī)數(shù)和隨機(jī)字符串。
22
23random.randint(1,?100)??#?1-100之間取一個隨機(jī)數(shù)
24random.randrange(1,?100)??#?1-100之間取一個隨機(jī)數(shù)
25randint&randrange區(qū)別:randint包含100,randrange不包含100!!!
26
27
28string模塊可以生成隨機(jī)字符串
29
30string.digits??#?數(shù)字字符串???'0123456789'
31string.ascii_letters??#?字母字符串?'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
32string.ascii_lowercase??#?小寫字母字符串??'abcdefghijklmnopqrstuvwxyz'
33string.ascii_uppercase???#?大寫字母字符串?'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
34string.punctuation???#?特殊字符??'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
35
365、如何使用python刪除一個文件?
37os.remove()????#?刪除一個文件的方法
38
39>>>?os.remove('atm_shopmall.zip')
40>>>?os.listdir()
41['.DS_Store',?'atm_shopmall',?'startMyPython3.0']?
42
436、一行代碼實現(xiàn)9*9乘法表
44print("\n".join("\t".join(["%s*%s=%s"?%(x,y,x*y)?for?y?in?range(1,?x+1)])?for?x?in?range(1,?10)))
45
467、1、2、3、4、5?能組成多少個互不相同且無重復(fù)的三位數(shù)
47li?=?[1,?2,?3,?4,?5]
48new_li?=?[]
49
50for?i?in?li?:
51????for?j?in?li:
52????????for?m?in?li:
53????????????if?i?!=?j?and?i?!=?m?and?j?!=?m:
54????????????????num_str?=?str(i)+str(j)+str(m)
55????????????????num?=?int(num_str)
56????????????????new_li.append(num)
57
58new_set?=?set(new_li)
59new_list?=?list(new_set)
60new_list.sort()
61print(new_list)
62print(len(new_list))????#?60???5*4*3
63
64:?)
作者:石超?
來源:Python測試社區(qū)? ??(這是一個有深度,有態(tài)度的公眾號,推薦大家關(guān)注)
鏈接:https://mp.weixin.qq.com/s/zl7hpYGqsLx6afTtI2B9eA
評論
圖片
表情
