日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python po设计模式_(Python)PO设计模式

發(fā)布時(shí)間:2023/12/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python po设计模式_(Python)PO设计模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

無(wú)規(guī)矩不成方圓。編寫代碼也是,如果沒(méi)有大概的框架,管理代碼將會(huì)是一件很頭疼的事。

先看看筆者以前寫的python腳本:

如果只有一個(gè)用例,這樣看著好像挺整潔的。但是當(dāng)用例越來(lái)越多后,如果元素定位發(fā)生了改變,那你將要在多個(gè)類、多個(gè)方法中,去尋找那個(gè)元素,然后一個(gè)一個(gè)修改,這將耗費(fèi)很多時(shí)間。

引入PO設(shè)計(jì)模式后,管理代碼將會(huì)很輕松。

什么是PO設(shè)計(jì)模式?

PO設(shè)計(jì)模式是一種業(yè)務(wù)流程與頁(yè)面元素操作分離的模式;這意味著,當(dāng)UI發(fā)生變化,元素定位發(fā)生變化時(shí),只需要在一個(gè)地方修改即可。

下面是代碼目錄:

頁(yè)面元素的定位、封裝寫到pages模塊中;業(yè)務(wù)流程的操作寫到test_case模塊中;run_main是執(zhí)行所有用例。

其它如讀取配置文件等,可另外寫到models模塊中。

模塊下的文件如下:

models模塊

configfile.cfg:#存儲(chǔ)后臺(tái)登錄賬號(hào)密碼

[login]

username=adminpassword=admin

#平臺(tái)地址

[platform]

url= http://ip/admin

讀取文件(readconfig.py):

importConfigParserimportos

conf=ConfigParser.RawConfigParser()#讀取文件

conf.read(os.path.join(os.getcwd(),'models\\configfile.cfg'))#賬號(hào)、密碼

username = conf.get("login", "username")

password= conf.get("login", "password")#url

url = conf.get("platform", "url")

Myunit.py:

from selenium importwebdriverimportunittestfrom models importreadconfigclassMyTest(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下的登錄頁(yè)面loginpage.py

from selenium.webdriver.common.by importByfrom pages.page importBasePageclassLoginPage(BasePage):'''用戶登錄頁(yè)面'''

#元素集

#用戶名

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"點(diǎn)擊 登錄 按鈕"self.click(self.loginbtn)

test_case模塊

test_case下的登錄操作logintest.py

from models.myunit importMyTestfrom models importreadconfigfrom pages.loginpage importLoginPageimportunittestimportos

#所有test類都繼承MyTest類;

#每次執(zhí)行xx_test方法時(shí),會(huì)先執(zhí)行MyTest中的setUp(),結(jié)束操作后再執(zhí)行tearDown()classLoginTest(MyTest):'''登錄測(cè)試'''

deftest_login1(self):'''用戶名和密碼都為空'''

try:

loginpage =LoginPage(self.driver)

loginpage.login_sys("", "")

self.assertEqual(loginpage.none_user_hint(), u"請(qǐng)輸入用戶名")

self.assertEqual(loginpage.none_passwd_hint(), u"請(qǐng)輸入密碼")exceptException as msg:print(u"異常原因:%s"%msg)

self.driver.get_screenshot_as_file(os.path.join(readconfig.screen_path,'login1.png'))raise Exception("false")

run_main

run_main.py:

importsys

reload(sys)

sys.setdefaultencoding('utf-8')importunittestimportHTMLTestRunnerfrom models importreadconfig

report_path=readconfig.report_pathif __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()

總結(jié)

以上是生活随笔為你收集整理的python po设计模式_(Python)PO设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。