WebUI自动化框架 - 关键字驱动

本文介绍了关键字驱动框架,一种功能自动化测试方法,强调将测试用例分解为四个部分:测试步骤、测试对象、动作和数据。通过示例解释了框架的工作原理,并列举了其优势,如易于理解和维护,早期介入测试,以及组件和代码的重用性。文章还提到了将要实现的通用组件,包括Excel数据表、action_page.py方法文件和run.py运行程序。

关键字驱动介绍

什么是关键字驱动框架?

  • 关键字驱动框架是一种功能自动化测试框架,它也被称为表格驱动测试或者基于动作字的测试。关键字驱动的框架的基本工作是将测试用例分成四个不同的部分。首先是测试步骤(Test Step),二是测试步骤中的对象(Test Object),三是测试对象执行的动作(Action),四是测试对象需要的数据(Test Data)。

四个主要组成部分

  • Test Step:是一个小的测试步骤的描述或者测试对象的一个操作说明。

  • Test Object:是指页面对象或元素,就像用户名、密码,

  • Action指页面操作的动作,打开浏览器,点击一个按钮,文本框输入一串文本等。

  • Test Data: 是任何对象操作时所需要的值,就像用户名、密码进行输入时的输入内容。

​ 其实我们做关键字的驱动的思想,就是把编码从测试用例和测试步骤中分离出来,这样对于不会编码的人员更容易理解自动化,从而让手工测试人员也可以编写自动脚本。(这并不意味这不需要自动化测试人员,对于自动化框架的构建,自动化代码的更新,结构调整等都需要一个技术性的人员)对于测试小的项目的团队,可以有两个手工测试人员和一个自动化测试人员。

举例:

  • 通过一个简单的登录功能例子来理解这个概念,想想看你的自动化流程需要做哪些事情:
  1. 打开一个浏览器
  2. 输入url跳转到网站首页
  3. 点击“登录”链接,进入登录页面
  4. 输入“用户名”
  5. 输入“密码”
  6. 点击“登录”按钮,进行登录
  7. 点击“注销”按钮,退出登录
  8. 关闭浏览器

优势

  1. 不需要太多的技术:一旦框架建立,手工测试人员和非技术人员都可以很容易的编写自动化测试脚本。
  2. 简单易懂:它存在Excel表格中,没有编码,测试脚本容易阅读和理解。关键字和操作行为这样的手工测试用例,使它变得更容易编写和维护。
  3. 早期介入:可以在应用未提交测试之前,就可以建立关键字驱动测试用例对象库,从而减少后期工作。使用需求和其它相关文档进行收集信息,关键字数据表可以建立手工测试程序。
  4. 组件的重用性:实施关键字驱动的模块化,进一步提高可重用性。
  5. 代码的重用性:作为关键字驱动框架中,只有一个执行引擎,它是鼓励极端的代码的复用。

下面是我们将要去实现的一些通用组件:

  1. excel: 是我们存放测试用例(Test Case)、测试步骤(Test Step)、测试对象(Test Object)和操作动作(Action)的关键字驱动数据表;
  2. action_page.py: 基于webdriver封装的方法文件,这个组件在关键字驱动框架中起着很重要的作用,它主要存放执行的Action,通过映射实现调用方法;
  3. run.py: 运行程序文件,程序入口。

关键字驱动实战

封装所有的动作的几类:action_page.py

from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import logging
import time
import os


logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(filename)s - %(levelname)s - %(message)s",
    datefmt='%a, %Y - %m - %d %H: %M: %S',
)


class ActionPage(object):

    def __init__(self):
        self.driver = None
        if self.driver is None:
            self.driver = webdriver.Chrome()

    def open_browser(self, browser: str):
        browser = str(browser).title()
        if browser == 'Chrome':
            self.driver = webdriver.Chrome()
        elif browser == 'Firefox':
            self.driver = webdriver.Firefox()
        else:
            self.driver = 'type error'
        return self.driver

    def open_url(self, url: str):
        """
        获取url地址
        使窗口最大化
        设置隐性等待30秒
        :param url:
        :return:
        """
        self.driver.get(url)
        logging.info("Open url: {}".format(url))
        self.driver.maximize_window()
        logging.info("Maximizes the current window")
        self.driver.implicitly_wait(30)

    def quit(self):
        logging.info("Quit the browser!")
        self.driver.quit()

    def close(self):
        self.sleep(2)
        logging.info("Closing and quit the browser.")
        self.driver.close()

    def sleep(self, seconds):
        logging.info("Sleep for {} seconds".format(seconds))
        time.sleep(seconds)

    def is_displayed(self, element):
        """
        判断元素是否存在
        :param element: 元素对象(WebElement对象)
        :return:
        """
        value = element
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值