我開始一個新的Python項目,它將通用GUI測試功能(外部開發的,例如Sikuli)包裝到應用程序特定的框架中。其目的是儘可能簡化應用程序的編寫測試腳本,包括報告測試結果和處理錯誤。避免Python中的非平凡或不可維護的GUI測試結構
有很多可能的方法,沒有一個看起來很理想,但是我對Python很新,所以可能會有一些簡單而有效的東西,我錯過了。基本上我試圖平衡清潔__init__.py
文件,易於使用和可維護的結構。
舉個例子,我想劇本作家能夠寫出這樣的事:
import framework
import framework.programs.program_f as curr_program
import framework.pages.page_b.area_a as curr_area
if __name__ == "__main__":
framework.log.start_section("Section 1")
curr_area.click_button(curr_area.buttons.BUTTON_D)
curr_program.wait_for_launch()
curr_program.test_is_running()
framework.log.end_section()
所以,沒有必要爲他們創建一個對象實例(即使我可以使用的對象背景)。然而,這種佈局需要的對象實例在包中創建__init__.py
文件,如:
|- framework
| |- log.py
|
|- pages
| |- page_a
| | |- _areas.py (contains class AreaA(AreaBase): ...)
| | |- dialogs
| | | |- __init__.py
| | |- __init__.py (contains area_a = _areas.AreaA())
| |
| |- page_b
| |- __init__.py
|
|- __init__.py
另一種方法是提供測試作家班和依靠測試人員合理使用(例如,只創建一個實例)。然而,一個包爲每個頁面(保持特定的頁面文件良好的組織),並保持__init__.py
慾望文件大部分是空的它很容易導致需要對這樣的代碼:
curr_page = framework.pages.page_a_pkg.page_a_mod.PageA()
intro_page = framework.pages.intro.intro.Intro()
,而不是我的原:
curr_page = framework.pages.page_a
intro_page = framework.pages.intro
由於深層嵌套和重複,第一個人會感到不和諧。第二個人覺得不太和諧,因爲我掩蓋了對象的使用。我看不到第三種方式,並認爲這可能是由於我對Python的經驗不足。
是否有任何調整或替代方案適合這個問題?甚至,我以錯誤的方式處理這個問題?
編輯補充:
第三種選擇是使用的結構,如:
framework
| |- pages
| | |- page_a_mod.py
| | |- _page_a_pkg
| | | |- page_a-specific stuff
| | | |- __init__.py
但是,剛剛轉page_a_mod.py
到一個額外的__init__.py
文件_page_a_pkg
,但以不同的名稱。同樣的結果,只需移動甲板椅子一下。
這是一個有趣的想法,但謝謝,但它沒有解決結構選項。 – user1472525