Python PO设计模式的具体使用


Posted in Python onAugust 16, 2019

无规矩不成方圆。编写代码也是,如果没有大概的框架,管理代码将会是一件很头疼的事。

先看看笔者以前写的python脚本:

Python PO设计模式的具体使用

如果只有一个用例,这样看着好像挺整洁的。但是当用例越来越多后,如果元素定位发生了改变,那你将要在多个类、多个方法中,去寻找那个元素,然后一个一个修改,这将耗费很多时间。

引入PO设计模式后,管理代码将会很轻松。

什么是PO设计模式?

PO设计模式是一种业务流程与页面元素操作分离的模式;这意味着,当UI发生变化,元素定位发生变化时,只需要在一个地方修改即可。

下面是代码目录:

Python PO设计模式的具体使用

页面元素的定位、封装写到pages模块中;业务流程的操作写到test_case模块中;run_main是执行所有用例。

其它如读取配置文件等,可另外写到models模块中。

模块下的文件如下:

Python PO设计模式的具体使用Python PO设计模式的具体使用Python PO设计模式的具体使用

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-8')

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python函数装饰器用法实例详解
Jun 04 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
对python:print打印时加u的含义详解
Dec 15 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
python爬虫中多线程的使用详解
Sep 23 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 Python
python使用sessions模拟登录淘宝的方式
Aug 16 #Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 #Python
Python facenet进行人脸识别测试过程解析
Aug 16 #Python
Python Web框架之Django框架Model基础详解
Aug 16 #Python
pycharm配置git(图文教程)
Aug 16 #Python
Django如何实现上传图片功能
Aug 16 #Python
Python如何调用JS文件中的函数
Aug 16 #Python
You might like
用在PHP里的JS打印函数
2006/10/09 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
jquery cookie插件代码类
2009/05/26 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
python抖音表白程序源代码
2019/04/07 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
Python列表list操作相关知识小结
2020/01/29 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
社团文化节策划书
2014/02/01 职场文书
迟到早退检讨书
2014/02/10 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
贷款承诺书
2015/01/20 职场文书
校园环境卫生倡议书
2015/04/29 职场文书