請問一下大家,自動化測試編碼結構是怎麼樣的?

小小Prcc發表於2020-08-06

前些天問過大家 WPF 框架的桌面應用怎麼 UI 自動化,在此謝謝大家的建議,我都一一嘗試過,最後是用 “pywinauto” 進行控制元件識別配合 “pyautogui” 控制滑鼠鍵盤事件解決的。
我現在寫好了一個表單必填項驗證的自動化測試指令碼,用到的模組如下:

pywinauto #控制元件識別
pyautogui #鍵盤滑鼠控制
pytest #測試框架
faker #虛擬資料創造

現在是測試一個有 24 項必填項的表單,驗證各個必填項是否成功判斷。目前我的編碼結構如下:

# 1.填寫必填項
class Sharp_Instrument_Injury_Required_Fields(object):
    # 姓名填寫
    def name_fill_in(self):
        name_window = self.child("S1","Edit")
        name_window.type_keys(str(self.fake.name()))

# 2.刪除必填項
class Required_Missing(Sharp_Instrument_Injury_Required_Fields):
    # 查詢姓名填寫項,刪除內容
    def gender_not_filled(self):
        self.Operation(self.gender,0.7,'click')
        # 呼叫判斷方法返回 True或False
        return self.faild_fill_in(self.gender_missing,func = self.gender_fill_in)

    # 點選儲存按鈕
    def save_button(self):
        save_button_window = self.window_1.child_window(title="儲存(S)", control_type="Button")
        save_button_window.click_input()
        pyautogui.press('Enter')

    # 失敗判斷
    def faild_fill_in(self,image,func,**kw):
        # 圖片座標作為引數傳入
        filled_missing = self.imagepath(image)
        save_succeed = self.imagepath(self.save_succeed)
        # 判斷是否"儲存成功"
        if save_succeed != None:
            self.ensure()
            self.required_fields_fill_in()
            # self.scroll(6,80)
            return 'False'
        # 判斷是否"必填項提示"
        elif filled_missing != None:
            self.ensure()
            # 將函式作為引數傳入
            func(**kw)
            return 'True'
        # 判斷是否其他提示
        else:
            self.ensure()
            func(**kw)
            return 'Exception'

# 3.pytest測試框架
class Test_Required_Missing(object):
    # 驗證姓名空值是否提示“姓名不能為空”
    def test_name_missing(self):
        r = Required_Missing()
        # 斷言
        assert r.name_not_filled() == 'True'

我就是這樣三層的模式,操作步驟是 “填寫必填項”→“刪除必填項”→“點選儲存按鈕”→“斷言驗證結果”
但不知道是不是正確的,看別人的自動化程式碼,是將測試用例操作步驟放在 pytest/unittest 框架內的,而我是單獨寫了一個測試用例操作的類,pytest 僅用來做斷言,24 個必填項就有 24 個方法。
所以在此想請教大家,測試用例是必須寫在測試框架裡的嗎?還有我這個可以怎麼進行最佳化呢?還望大家不吝賜教,謝謝!

相關文章