自動化常見面試題


1、這行代碼 '1234'[3:] 的運行結果是什么

    '4'  考察點:python切片

包括:正索引和負索引兩部分,如下圖所示,以list對象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]為例:

  

 

 

 

一個完整的切片表達式包含兩個“:”,用於分隔三個參數(start_index、end_index、step)。
當只有一個“:”時,默認第三個參數step=1;當一個“:”也沒有時,start_index=end_index,表示切取start_index指定的那個元素。
切片操作基本表達式:object[start_index:end_index:step]

step:正負數均可,其絕對值大小決定了切取數據時的‘‘步長”,而正負號決定了“切取方向”,正表示“從左往右”取值,負表示“從右往左”取值。當step省略時,默認為1,即從左往右以步長1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情說三遍!

start_index:表示起始索引(包含該索引對應值);該參數省略時,表示從對象“端點”開始取值,至於是從“起點”還是從“終點”開始,則由step參數的正負決定,step為正從“起點”開始,為負從“終點”開始。

end_index:表示終止索引(不包含該索引對應值);該參數省略時,表示一直取到數據“端點”,至於是到“起點”還是到“終點”,同樣由step參數的正負決定,step為正時直到“終點”,為負時直到“起點”。

2、執行import語句的時候,解釋器是如何 查找模塊文件的?
   最終是通過 sys.path決定的。通常我們可以通過修改環境變量 PYTHONPATH 來添加自己的模塊搜索路徑
3、怎么把一個 字符串 轉換為整型
  可以使用 int函數
4、tuple 和list 的區別主要是什么?
   tuple是不可變的,list是可變的 mutable
5、怎么把一個數字格式化輸出為 10位寬度, 不足前面補零?
  可以用'%010d' % 56 或者 '{:010}'.format(56)
6、打開文件的時候 用with open ... as ... 這種方式有什么好處?
  這種方式不需要調用 close方法關閉文件句柄, 如果用直接用 fh = open(....)這種方式,如果忘掉關閉文件句柄,會造成文件一直打開的后果


7、read,readline和readlines 的區別是什么

  read 讀取整個文件 readline 讀取下一行, readlines 讀取整個文件,返回一個列表,列表中每個元素就是文件匯總的每行內容

8、類的靜態屬性和實例屬性的區別是什么?

  靜態屬性時屬於類的, 所有實例公有的屬性,只有一份。 而實例屬性是每個實例各自獨有的屬性。

9、類的靜態方法和實例方法的區別是什么?

  實例方法的調用離不開實例,我們需要把實例自己傳給函數,而靜態方法可以通過類名進行訪問。靜態方法里面不能訪問實例屬性

10、面向對象中 組合和 繼承的區別

  比如 一個 汽車 對象 擁有一個 發動機 對象 和 4個 輪胎 對象 可以說汽車對象由 發動機 對象和輪胎對象組成 ,這就是對象的組合 而一個 東北虎可以繼承自老虎對象, 這就是繼承 組合是 “有一個”的關系,而繼承是“是一個”的關系

11、什么是多態?

   多態是面向對象設計的一種機制、一種能力。它主要指 對某個類的子類和父類的實例對象, 調用同樣的方法,其執行的效果多種多樣。 這樣的一個特點。 參考 https://www.zhihu.com/question/30082151

12、一個目錄要成為python的package 需要有什么?

   需要在目錄下面加上 init.py 文件

13、Python中調用外部程序有哪些方法?

   可以使用 os.system 或者 subprocess模塊里面的函數(比如check_output)或者Popen類

 

14、Python 怎樣非阻塞(也就是python程序不需要等待被調用程序結束就可以繼續運行下面的代碼)啟動一個外部程序的方法?

  可以用subprocess 的 Popen類,比如
  from subprocess import Popen
  process = Popen(args='mspaint', shell=True)
  print 'done'

15、python 函數參數定義里面 * , ** 分別是什么意思

   可變參數 和 關鍵字可變參數 函數參數的概念可以復習一下下面的例子
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c,
print 'args =', args, 'kw =', kw

其中 a,b 是 必填參數、c是缺省參數、args是可變參數, kw 關鍵字可變參數

16、如果我想直接存儲一個python dict 對象到文件里面,該怎么做?

  可以使用pickle 或者json 將對象進行序列化

17、range(10000) 和 xrange(10000) 的區別

  前者會立刻產生出一個list對象包含0到9999所有數字, 而后者並不立刻產生 包含所有數字的list 對象。 一般比較大的循環,建議使用xrange,這樣會更快一些

18、在什么情況下,python對象會被解釋器清除?

  當該對象沒有任何 指向它的引用(引用計數為0)

 

19、兩個線程更新一個dict 里面的內容,該怎么設計?

 在訪問共享對象的代碼前,要調用Lock對象的acquire方法,進行上鎖操作。當多個線程同時執行lock.acquire()時,只有一個線程能成功地獲取鎖,然后繼續執行代碼,其他線程就繼續等待直到獲得鎖為止。 訪問結束后,一定要調用Lock對象的release方法,進行解鎖操作。否則其它等待鎖的線程將永遠等待下去,成為死線程
 
20、 什么是 GIL , GIL 帶來的問題是什么?
  GIL 是全局解釋器鎖, Python中每個線程執行的時候要獲取這個鎖 才能 執行代碼。 所以Python中的多線程不能真正做到並行執行代碼。不能發揮CPU多核的優勢。
 
21、 裝飾器 是什么回事?
      Python中裝飾器通常用來裝飾函數、或者類的方法。 被裝飾后的函數, 原有的函數基礎上,會多出增加一點功能,或者功能有一些變化。 一般來說裝飾器本身也是一個函數,我們可以把裝飾器 想象成包含了 被裝飾的函數。
 
22、 python 的代碼中如果有中文,代碼文件應該做如何處理
 
  在頂部注釋中 加入 類似 # coding=utf8 這樣的聲明 , 但是要注意代碼文件是什么中文編碼,是gbk還是utf8 , 聲明的編碼格式匹配就可以了。
 
23、 python 2.X中 怎么定義一個 unicode的字符串

     比如 u'abcd'

24、怎么把unicode字符串的編碼為utf8的字符串

    比如 u'abcd'.encode('utf8')

25、進程間通信有哪些方法?

  共享內存,socket 通信 都可以

26、多線程如何同步和互斥?

  python 中可以用 threading.Lock 或者條件變量等 方法

27、Python中如何捕獲所有的異常?

  如下:
  如下:
  try:
    ...
  except :
    ...

28、Python中如何指定一段代碼,不管是否有異常發生都執行的?

   可以用finally 語句,如下:
    try:
      ...
    except :
      ...
    finally:
      ...

29、進程和線程的區別

   進程是運行着的程序,而線程是進程中指令的執行單元。 代碼指令必須在操作系統分配的線程中執行。 一個進程至少包含一個線程。

30、python怎么實現一個單例模式的類?

  參考 http://www.cnblogs.com/dyllove98/archive/2013/07/20/3202955.html

31、請用一種算法將一個包含了n個整數的列表 按從小到大的順序進行排序

  可以使用下面的冒泡排序法
def bubbleSort(alist):
# j 是最后一個元素 到 第二個元素
for j in range(len(alist)-1,0,-1):
for i in range(0, j):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
return alist

32、請畫出Selenium 的架構示意圖

  

 

 33、selenium 有哪些選擇元素的方法

  可以根據 id ,name 屬性, class 屬性等, 最靈活的是css選擇器 和xpath 選擇器 (自行復習一下css選擇器,xpath的語法)

34、Django中一個http請求由那個函數處理是怎么決定的?

   根據url路由配置

35、django 通常要和那些wsgi server 一起使用?

    Gunicorn 或者 uwsgi , 也可以使用 cherrypy等
 
36、 django 開發的web應用,性能瓶頸通常會有哪些?
  一般性能瓶頸通常在數據庫操作上面,特別是數據表很大的時候,訪問操作又特別復雜(比如 多個表的聯合查詢)
 
37、 提高數據庫查詢性能的方法通常有哪些?
    合理的加索引
 
38、 RF作為測試框架, 提供了哪些功能?
  為測試用例的開發提供 清晰明了 的 關鍵字定義用例的模式 為自動化項目 的套件、用例目錄結構 提供 比較靈活的初始化、清除的 機制 為自動化項目的執行提供 靈活的用例、套件選擇機制 為測試結果提供 清晰、細致 的日志和報表
 
39、 RF 怎么定義一個變量?
  可以在用例中定義 : ${var1}= Set Variable hello 可以在Settings 表中聲明 ${var1} hello
 
40、 RF 循環的寫法
   如下:
${list}= create list 1 2 3 4
:FOR ${index} IN @{list}
\ Log To Console ${index}
 
41、 RF 條件判斷的寫法
  如下:
Run Keyword If '2016' in $html and 'UTC' in $html
... log to console \n2016年的,UTC時間
... ELSE IF '2016' in $html log to console \n2016年的
... ELSE IF 'UTC' in $html log to console \nUTC時間
... ELSE log to console \n以上都不是
 
42、 RF 的Setup 、Teardown 是如何設置的
  可以在 測試套件目錄的初始化腳本文件 init.robot中, 可以在 測試套件文件的 Settings表中,可以在測試用的 [Setup][Teardown] 配置項中。
 
43、 RF 執行的時候怎么過濾選擇 用例和套件
  可以通過 --test --suite 參數根據 名稱過濾, 也可以用參數 --include 根據 用例標簽 過濾
 
44、 請畫出Appium的架構示意圖
  

 45、開發移動應用自動化的大體步驟有哪些

  主要就是根據要操作的元素的屬性特征,選擇到這些元素,然后調用Appium 庫的方法操作這些元素,獲取元素的信息(主要是文本內容)。 分析元素信息是否正確

 

46、怎樣查看移動應用的界面元素的屬性

  可以通過 UIAutomate Viewer 工具

47、Appium 選擇元素的方法有哪些

   通過 resource id, class name, accessibility id, xpath, UIAutomator API 的java代碼

48、Appium 怎樣滑動屏幕

  可以通過 WebDriver的swipe 方法

49、負載測試和壓力測試的區別

   根據 國外Wiki上的解釋
負載測試 主要是 根據需求規格上說明的應該能承受系統負荷,模擬相應的負荷量,看看系統是否能滿足需求規格
而壓力測試 則是 模擬超出需求規格上說明的更大的負載情況下, 系統的健壯性如何(是否會崩潰等)

 

 
 
 
 
 
 
 
 
 
 
 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM