zoukankan      html  css  js  c++  java
  • 行为驱动behave结合PO设计模式

      用PO的思想去重构或者管理行为驱动测试能使测试更有效率。

       以携程网登录场景为例,项目中体现PO思想的是page目录下的两个文件分别为“base.py”和“loginPage.py”。            

       其中“base.py”文件代码抽取了一些基本的方法,如元素定位的方法;打开网站方法和得到当前网页标题等方法。其代码如下:

    #学习有疑问请联系作者
    #作者qq:2574674466
    #作者邮箱2574674466@qq.com
    #coding=utf-8
    from selenium.webdriver.common.by import By
    class Base:
        def __init__(self,driver):
            self.driver = driver
    
         #*loc 函数参数是指传入的是不定参数,这个知识点在前面章节已经提到过
         #意思是findele函数可以传入1个参数,也可以传入2个参数等等。
        def findele(self,*loc):
            return  self.driver.find_element(*loc)
    
        def get_url(self,url):
            self.driver.get(url)
    
        def get_title(self):
            return self.driver.title
    • page目录下的另外一个文件loginPage.py其目的是为了封装登录页面的操作,将这些操作以类成员方法的形式展现。注意类“loginPage”的构造函数的实现逻辑,具体内容已在以下的代码注释中写明
    #学习有疑问请联系作者
    #作者qq:2574674466
    #作者邮箱2574674466@qq.com
    #coding=utf-8
    from features.com.page.base import  Base
    from selenium.webdriver.common.by import  By
    #loginPage继承了Base类
    class loginPage(Base):
        #以下为类的初始化函数,其又调用了父类的初始化函数,这样做的目的是为了
        #将context.driver串起来,在调用PO类时,可以使用超级全局变量context下的driver对象
        def __init__(self,context):
            super(loginPage,self).__init__(context.driver)
        def login(self,username):
            self.findele(By.ID,"nloginname").send_keys(username)
    • 项目主目录下有文件environment.py,其主要目的是对行为驱动环境进行配置,可以被全局调用。其代码如下:
    #学习有疑问请联系作者
    #作者qq:2574674466
    #作者邮箱2574674466@qq.com
    #coding=utf-8
    from selenium import  webdriver
    
    def before_all(context):
        context.driver = webdriver.Chrome("chromedriver路径")
    
    def after_tag(contex):
        context.driver.quit()

    项目主目录下有文件example.feature,其定义了行为驱动要执行的场景描述细节

    Feature: Login
      Scenario:open website
         When I open the login website "https://passport.ctrip.com/user/login?"
         Then I input username "tim"

    在目录steps下有文件example.py,其定义了行为驱动场景的实现过程,注意代码中涉及到了正则表达式的使用,具体见如下代码细节

    #coding=utf-8
    from behave import *
    from features.com.page.loginPage import loginPage
    
    #以下re表示在step中定义正则表达式,要使用正则表达式
    use_step_matcher('re')
    
    #这里表示开始抓取正则表达式的匹配值,此次是为了抓取在场景文件example.feature中的url值,
    #抓取到之后传值给url,然后进行下面的操作
    @when('I open the login website "([^"]*)"')
    def step_reg(context,url):
        loginPage(context).get_url(url)
    @Then('I input username "([^"]*)"')
    def step_r(context,code):
        loginPage(context).login(code)
    • 执行测试,测试结构如图12.8所示:

    视频、学习笔记联系qq:2574674466
    更多内容请关注公众号:“大牛测试

     

    欢迎加入交流群:Selenium学习群: 628908894
  • 相关阅读:
    计算系数
    P2734 [USACO3.3]游戏 A Game——区间dp+博弈论
    4.14作业
    安装MySQL数据库,建立用户表 uid uname upwd 并插入3条数据 2.制作jsp登录页面 index.jsp 提交到ok.jsp,使用jdbc连数据库,判断输入的用户名密码是否存在 3.如果存在,把用户名保存,跳转到yes.jsp
    jsp 3.10作业
    软件测试第一次课堂练习3.4
    easysync 协同算法详解
    支付宝订阅消息推送
    Linux防火墙操作指令
    Windows端口号操作
  • 原文地址:https://www.cnblogs.com/tim2016/p/15386313.html
Copyright © 2011-2022 走看看