軟體測試面試中常見必問(二)自動化問題 內附答案

圆满测试發表於2024-10-23

1.你們自動化怎麼做的
在需求分析階段,跟前端溝通好,規範前端程式碼,避免造成後期自動化工作無法開展的問題。
在用例設計階段,挑選出適合做自動化的用例,單獨整理到一個檔案儲存。
在專案中後期,趨於穩定之後,就可以開始設計自動化指令碼了。

語言python+自動化測試工具selenium+單元測試框架unittest(這裡可以挑自己熟悉的說,比如pytest等)+分層模型PO+測試報告HTMLTestRunner

2.selenium是什麼,測試所需要包括的工具
selenium是基於UI的模擬使用者操作行為的一種web自動化測試工具包,常用於web自動化測試。

需要的工具:webdriver,即瀏覽器驅動(不同的瀏覽器驅動不同,與瀏覽器的版本也相關)。

程式碼庫,python 中的selenium庫。

3.說一下元素定位的基本方式
name id classname tagname

link_text partial_link_next(模糊的文字定位) css xpath

4.自動化的測試用例寫了多少條
這裡回答之後很可能會問總的用例寫了多少條,建議回到自動化測試用例佔全部用例的15%左右(不超過20%)。

5.自動化的測試指令碼你在編寫的時候有遇到什麼問題嗎
1. 檢查自己定位方式是否有誤?
2. 程式載入過快,頁面來不及反應? -- 元素等待
3. 有些輸入框必須先點選,再輸入
4. 需要操作的元素在新視窗? -- 切換到新視窗(控制代碼)
5. 需要操作的元素在frame/iframe標籤內? -- 切換表單
6. 需要操作的元素被其他元素遮擋了? -- 修改display的值為none
7. 需要操作的元素是個只讀元素? -- 修改value的值.或者刪掉readonly屬性.
8. 需要操作的元素在頁面靠下位置?-- 操作捲軸

6.怎麼樣提高自動化的執行速度和效率
· 少用sleep,多用元素等待.
· 在case層,把連線資料庫的程式碼寫到setUpClass裡面.
· 如果涉及到多個elif,把最有可能出現的條件寫到前面.
· 如果不是大量的測試資料,儘量減少檔案IO(input/output)操作.
· 對於一些頁面.必須全部載入完成後才會繼續執行,可以使用顯示等待,這一個元素找到後就繼續執行,不必等所有元素載入成功.
· 提高指令碼的穩定性,避免因為指令碼不穩定影響效率.

7.python的裝飾器是什麼?有哪些?
在不改變程式碼的前提下,讓程式碼實現更多的功能

@classmethod @staticmethod @ddt @data @unittest.skip

8.怎麼樣提高自動化指令碼的穩定性
1. 不使用xpath的絕對路徑.相對路徑,找父標籤不要跳太多的層級.
2. 因為網路的原因造成不穩定. 使用隱式等待.
3. 因為一些隨機出現的元素導致不穩定. 使用try
4. 因為測試資料造成不穩定. 在teardown裡面刪掉.

9.什麼樣的專案適合做自動化(你之前xx專案為什麼做的自動化測試)
專案比較穩定週期長,需求變化少,UI介面變化少

重複測試或者回歸測試多

10.說一下元素等待
隱式等待:

隱式等待是全域性性的,一旦設定,它將對測試指令碼中的所有元素生效。
它告訴WebDriver在丟擲找不到元素的異常之前,應該等待多長時間。
隱式等待適用於頁面上所有元素的查詢操作。
如果在設定的時間內找到了元素,WebDriver將繼續執行;如果超時,則丟擲NoSuchElementException。
隱式等待通常在測試指令碼開始時設定一次。
顯示等待:

顯式等待是區域性性的,它只對特定的元素查詢操作有效。
它允許你等待某個特定條件成立,例如等待某個元素出現。
顯式等待更加靈活,可以等待特定的元素或條件,而不是盲目等待固定的時間。
顯式等待通常使用WebDriverWait和ExpectedConditions類來實現。
顯式等待不會使測試指令碼暫停執行,它會週期性地檢查條件是否滿足。
11.常用的庫
標準庫:os、csv、sys....等

第三方庫:pandas、PyYAML、Pytest.....等

12.元素定位不到有哪些可能
1.網速問題,元素沒載入出來
2.程式碼書寫錯誤
3.巢狀在frame/iframe標籤中
4.新的元素在新的視窗中,切換視窗switch_to程式碼
5.在頁面下方,需要操作捲軸
6.元素只讀readonly

13.深複製和淺複製的區別

a = [1,3,[4,5]]
    # 淺複製: 複製的記憶體空間的地址.等於都是指向的同一個物件.如果源資料修改,複製後的內容也會修改.
    b = a.copy()    # 淺複製
    print(b)
    a[2][0] = 99    # 把a的巢狀列表裡面的4的值改成99
    print(a)
    print(b)        # b也隨之更改.

    # 深複製: 在記憶體空間裡面另外開闢一塊空間,用來儲存值.源資料修改不會影響到修改後的資料.
    from copy import deepcopy
    a = [1, 3, [4, 5]]
    b = deepcopy(a)
    print(b)
    a[2][0] = 99
    print(a)

    print(b)

14.氣泡排序

第一個數和第二個數比較,小的在前面,以此類推

a = [6,4,2,65,1,7]
    # a.sort()
    # print(a)
    for i in range(len(a)):                   # range(0,6) 外層迴圈,控制迴圈次數.
        for j in range(0,len(a)-1):         # 內層迴圈, 把所有的數都拿出來比較一次.,
            if a[j] > a[j+1]:
                a[j],a[j+1] = a[j+1],a[j]         # 就互相換位置.
    print(a)

相關文章