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)