Python PO设计模式的具体使用

  • 时间:
  • 浏览:26

无端方没有成周遭。编写代码也是,若是出有大要的框架,办理代码将会是1件很头痛的事。

先看看笔者之前写的Python剧本:

若是只要1个用例,如许看着仿佛挺整齐的。可是当用例愈来愈多后,若是元素定位产生了改动,那您将要正在多个类、多个办法中,来寻觅阿谁元素,然后1个1个修正,那将消耗良多工夫。

引进PO设想形式后,办理代码将会很沉紧。

甚么是PO设想形式?

PO设想形式是1种营业流程取页里元素操纵别离的形式;那意味着,当UI产生变革,元素定位产生变革时,只需求正在1个处所修正便可。

上面是代码目次:

页里元素的定位、启拆写到pages模块中;营业流程的操纵写到test_case模块中;run_main是履行一切用例。

别的如读与设置装备摆设文件等,可别的写到models模块中。

模块下的文件以下:

models模块

configfile.cfg:

#存储背景登录账号稀码
[login]
username=admin
password=admin

#仄台地点
[platform]
url = http://ip/admin

读与文件(readconfig.py):

import ConfigParser
import os

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 import webdriver
import unittest

from models import readconfig

class MyTest(unittest.TestCase):
  def setUp(self):
    self.driver = webdriver.Firefox()
    self.driver.get(readconfig.url)
    self.driver.maximize_window()
    time.sleep(4)
    #self.driver.implicitly_wait(2)
    
  def tearDown(self):
    self.driver.quit()

pages模块

pages下的登录页里loginpage.py

from selenium.webdriver.common.by import By
from 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")

  def input_username(self,text):
    print u"输出用户名:",text
    self.input_text(self.username, text)
    
  def input_passwd(self,text):
    print u"输出稀码:",text
    self.input_text(self.passwd, text)
    
  def click_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_main

run_main.py:

import sys
reload(sys)
sys.setdefaultencoding('utf⑻')

import unittestimport 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()

以上便是本文的全数内容,期望对各人的进修有所帮忙,也期望各人多多撑持剧本之家。