Python PO設計模式

2022-07-15 06:21:09 字數 4568 閱讀 8054

無規矩不成方圓。編寫**也是,如果沒有大概的框架,管理**將會是一件很頭疼的事。

先看看筆者以前寫的python指令碼:

如果只有乙個用例,這樣看著好像挺整潔的。但是當用例越來越多後,如果元素定位發生了改變,那你將要在多個類、多個方法中,去尋找那個元素,然後乙個乙個修改,這將耗費很多時間。

引入po設計模式後,管理**將會很輕鬆。

什麼是po設計模式?

po設計模式是一種業務流程與頁面元素操作分離的模式;這意味著,當ui發生變化,元素定位發生變化時,只需要在乙個地方修改即可。

下面是**目錄:

頁面元素的定位、封裝寫到pages模組中;業務流程的操作寫到test_case模組中;run_main是執行所有用例。

其它如讀取配置檔案等,可另外寫到models模組中。

模組下的檔案如下:

models模組

configfile.cfg:

#儲存後台登入賬號密碼

[login]

username=adminpassword=admin

#平台位址

讀取檔案(readconfig.py):

import

configparser

import

osconf =configparser.rawconfigparser()

#讀取檔案

conf.read(os.path.join(os.getcwd(),'

models\\configfile.cfg'))

#賬號、密碼

username = conf.get("

login

", "

username")

password = conf.get("

login

", "

password")

#url

url = conf.get("

platform

", "

url")

myunit.py:

from selenium import

webdriver

import

unittest

from models import

readconfig

class

mytest(unittest.testcase):

defsetup(self):

self.driver =webdriver.firefox()

self.driver.get(readconfig.url)

self.driver.maximize_window()

time.sleep(4)

#self.driver.implicitly_wait(2)

defteardown(self):

self.driver.quit()

pages模組pages下的登入頁面loginpage.py

from selenium.webdriver.common.by import

byfrom pages.page import

basepage

class

loginpage(basepage):

'''使用者登入頁面

'''#

元素集#

使用者名稱 username = (by.name,"

username")

#密碼passwd = (by.name,"

password")

#登入 按鈕

loginbtn = (by.xpath,"

//form[@id='frmlogin']/div[2]/footer/button")

definput_username(self,text):

print u"

輸入使用者名稱:

",text

self.input_text(self.username, text)

definput_passwd(self,text):

print u"

輸入密碼:

",text

self.input_text(self.passwd, text)

defclick_loginbtn(self):

print u"

點選 登入 按鈕

"self.click(self.loginbtn)

test_case模組test_case下的登入操作logintest.py

from models.myunit import

mytest

from models import

readconfig

from pages.loginpage import

loginpage

import

unittest

import

os#所有test類都繼承mytest類;

#每次執行xx_test方法時,會先執行mytest中的setup(),結束操作後再執行teardown()

class

logintest(mytest):

'''登入測試

'''def

test_login1(self):

'''使用者名稱和密碼都為空

'''try

:

loginpage =loginpage(self.driver)

loginpage.login_sys(

"", ""

) self.assertequal(loginpage.none_user_hint(), u

"請輸入使用者名稱")

self.assertequal(loginpage.none_passwd_hint(), u

"請輸入密碼")

except

exception as msg:

print(u"

異常原因:%s

"%msg)

self.driver.get_screenshot_as_file(os.path.join(readconfig.screen_path,

'login1.png'))

raise exception("

false

")

run_mainrun_main.py:

import

sysreload(sys)

sys.setdefaultencoding(

'utf-8')

import

unittest

import

htmltestrunner

from models import

readconfig

report_path =readconfig.report_path

if__name__ == '

__main__':

#suite = unittest.testsuite()

#suite.addtest(testall('test_a'))

now = time.strftime("

%y%m%d%h%m%s

",time.localtime(time.time()))

filename = report_path+now+'

result.html

'fp = open(filename,'wb'

) runner = htmltestrunner.htmltestrunner(stream=fp,title='

report

',description='

result')

discover = unittest.defaulttestloader.discover("

test_case

",pattern="

*test.py

",top_level_dir=none)

runner.run(discover)

fp.close()

設計模式 設計模式

物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...

設計模式 命令設計模式

一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...

設計模式 9 設計模式

文章 head first 第一章 head first 設計模式讀書筆記 1 策略模式 觀察者模式 head first設計模式學習2 裝飾者模式 head first 設計模式3 工廠模式 head first設計模式4 命令模式 head first 設計模式5 介面卡模式和外觀模式 head...