po思想六大原則(官網:
(引用自:1、梳理需要實現自動化的測試用例。1. 公共的方法代表頁面的服務
2. 不要暴露頁面細節
3. 不要把斷言和操作細節混用
4. 方法可以return到新開啟的頁面
5. 不要封裝頁面所有元素(用到哪些封裝哪些)
6. 相同的行為會產生不同的結果,可以封裝不同的方法
具體分析:
原則一:要封裝頁面中的功能或服務,比如點選頁面元素,可以進入到新的頁面,則可為這個服務封裝方法"進入新頁面"
原則二:封裝細節,對外只提供方法名(或者介面)
原則三:封裝的操作細節中不要使用斷言,把斷言放到單獨的模組中,比如:testcase
原則四:點選乙個按鈕會開啟新的頁面,可以用return方法鏈式跳轉,比如return mainpage()表示跳轉到主頁
原則五:只為頁面中重要的元素進行po設計,捨棄不重要的內容;用到哪些再封裝哪些
原則六:乙個動作可能產生不同結果,比如點選按鈕後,可能成功,也可能失敗,為兩種結果封裝兩個方法:click_success和click_error
根據策略將需要實現的用例梳理出來,找其中乙個先實現。
有時間可以建模,可以清晰頁面的跳轉關係(熟練了就沒有必要輸出了),類似如下這種
2、構造po模型
建立包結構:base、page、testcase
根據用例涉及到的頁面,建立頁面相關的類和方法,具體的實現內容可以先跳過。
檢視**
def start(self):
return self # 由於啟動後要跳轉到首頁,所以這裡返回self,便於呼叫into_main_page方法
def stop(self):
pass
def restart(self):
pass
def into_main_page(self):
"""進入首頁"""
return mainpage()
例如:page中的main_page.py
檢視**
class mainpage:
def goto_address_list(self):
"""跳轉到通訊錄頁面"""
return addresslistpage()
就這樣用到那個就建立哪個頁面類,鏈式的就把所有的都建立了,建立後的目錄:
3、編寫測試用例
根據業務邏輯編寫、
鏈式呼叫、做結果校驗,簡單的調通,先把架子打起來,不用寫細節
例如:testcase中的test_add_member.py
檢視**
class testaddmember:
def setup(self):
def teardown(self):
def test_add_member_manual(self):
"""測試手動添輸入加用例"""
result = self.main.goto_address_list() \
.goto_add_member_list() \
.goto_add_member_manual() \
.s**e() \
.get_add_member_result()
# todo 當前返回的是true,待完善後重新寫斷言
assert result
4、填充各方法中的具體實現
driver例項的傳遞
補充細節操作
5、優化用例
6、併發執行
執行時指定引數:
7、繼續下一條用例輸出
z
PHP之OOP 程式設計思想從過程到物件!
有乙個人走進商店,他對老闆說 我想要乙個東西,這個東西呢,它是圓形的,是甜甜的,上面有奶油,並且有一些水果在上面,可以插蠟燭.他繁複得敘述的這個什麼東西,究竟是什麼呢?其實我不說大家也猜得到 他想要乙個生日蛋糕。現實生活中,我們不必描述所有一切事物的製作過程,因為有時,我只想要這個事物,並不關心它的...
利用 遞迴 思想來簡化問題
首先,經典的漢諾塔問題用遞迴來實現將會很簡單,如下 void move char pos1,char pos2 void hannoi int n,char pos1,char pos2,char pos3 else 由兩個函式來實現完成,遞迴結束的終點是只有乙個盤子是將盤子從pos1移動動到pos...
利用異或求解 N N 0 N 0 N
1題 1 1000放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其它均只出現 一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找 出來 不用輔助儲存空 間,能否設計乙個演算法實現?顯然已經有人提出了乙個比較精彩的解法,將所有數加起來,減去1 2 1000的和。這個演算法已經足夠完美了...