python po设计模式_(Python)PO设计模式
無規矩不成方圓。編寫代碼也是,如果沒有大概的框架,管理代碼將會是一件很頭疼的事。
先看看筆者以前寫的python腳本:
如果只有一個用例,這樣看著好像挺整潔的。但是當用例越來越多后,如果元素定位發生了改變,那你將要在多個類、多個方法中,去尋找那個元素,然后一個一個修改,這將耗費很多時間。
引入PO設計模式后,管理代碼將會很輕松。
什么是PO設計模式?
PO設計模式是一種業務流程與頁面元素操作分離的模式;這意味著,當UI發生變化,元素定位發生變化時,只需要在一個地方修改即可。
下面是代碼目錄:
頁面元素的定位、封裝寫到pages模塊中;業務流程的操作寫到test_case模塊中;run_main是執行所有用例。
其它如讀取配置文件等,可另外寫到models模塊中。
模塊下的文件如下:
models模塊
configfile.cfg:#存儲后臺登錄賬號密碼
[login]
username=adminpassword=admin
#平臺地址
[platform]
url= http://ip/admin
讀取文件(readconfig.py):
importConfigParserimportos
conf=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 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下的登錄頁面loginpage.py
from selenium.webdriver.common.by importByfrom pages.page importBasePageclassLoginPage(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 importMyTestfrom models importreadconfigfrom pages.loginpage importLoginPageimportunittestimportos
#所有test類都繼承MyTest類;
#每次執行xx_test方法時,會先執行MyTest中的setUp(),結束操作后再執行tearDown()classLoginTest(MyTest):'''登錄測試'''
deftest_login1(self):'''用戶名和密碼都為空'''
try:
loginpage =LoginPage(self.driver)
loginpage.login_sys("", "")
self.assertEqual(loginpage.none_user_hint(), u"請輸入用戶名")
self.assertEqual(loginpage.none_passwd_hint(), u"請輸入密碼")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()
總結
以上是生活随笔為你收集整理的python po设计模式_(Python)PO设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql语句中的冒号是什么意思?(四个
- 下一篇: linux中bin存放什么文件格式(Li