关键字驱动

210 阅读4分钟

要做UI测试自动化,使用关键字驱动是必须的一种测试方式,它可以在纯代码自动化应用中运行,也可以在测试平台上使用。

当采用纯代码方式时,自动化工程师先编写一个通用程序,其他页面只需要执行测试人员手工填写关键字表格,即可执行自动化测试。这个表单可以是Excel电子表格,也可以是yaml文件。

利用测试平台,将测试开发项目编写一个接口,在掩码中,手动测试人员还可以选择需要操作的页面关键词,选择后即可进行自动化测试。

关键字驱动实现了低成本和操作方便,是实现UI测试自动化的好方法。本文介绍了一种简单的关键词驱动方式,不需要高级的编程知识就能掌握。

关键字驱动的实现分为三个部分:关键字方法的定义、页面的常用操作、点击、输入等常用操作,例如由自动化工程师编写测试。

关键字表单配置。谁写用例,自动化配置这种形式,它主要定义了页面用例需要执行的操作和测试数据,通过最佳脚本自动生成固定格式,并且可以选择操作名称,使用方便,在测试平台上,可以使用下拉框进行搜索和选择的方式进行选择,会更加方便。

调用关键字,执行页面操作。这是由测试自动化工程师编写的,读取yaml文件页中的操作,并执行。

如果你想对web网页进行自动化测试,我们可以定义page类,封装点击,输入等页面操作

keywords.py

from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait

DEFAULT_TIMEOUT = 8

class Page: def init(self, driver: WebDriver): self.driver = driver

def goto(self, url): """页面访问""" self.driver.get(url)

def wait_clickable(self, locator, timeout=None) -> WebElement: timeout = DEFAULT_TIMEOUT if timeout is None else timeout wait = WebDriverWait(self.driver, timeout=timeout) return wait.until(expected_conditions.element_to_be_clickable(locator))

def wait_visible(self, locator, timeout=None) -> WebElement: timeout = DEFAULT_TIMEOUT if timeout is None else timeout wait = WebDriverWait(self.driver, timeout=timeout) return wait.until(expected_conditions.visibility_of_element_located(locator))

def click(self, locator): """页面点击""" el = self.wait_clickable(locator) el.location_once_scrolled_into_view el.click()

def fill(self, locator, words): """页面输入""" el = self.wait_visible(locator) el.send_keys(words)

关键字表格

关键字表格是一个自动化用例的测试步骤和数据,我们这里用yaml文件,action表示要使用的页面操作,它对应前面Page类的同名方法,params表示方法需要测试的参数。在每个不同的用例中,编写一个yaml文件,当需要运行自动化测试时,yaml文件可以作为参数传递给自动化应用程序。

login.yaml

  • action: goto params: url: "petstore.octoperf.com/actions/Acc…"

  • action: fill params: locator: ['name', 'username'] words: 'yuze'

  • action: fill params: locator: ['name', 'password'] words: '1234'

  • action: click params: locator: ['name', 'signon']

使用关键字操作浏览器

最后给出了通用的编写测试用例。定义一个test_keyword函数,首先读取login.yaml文件中的测试步骤和数据,使用getattr方法,把需要调用页面操作名称goto,fill,click传入,获取page类中的同名方法,调用这些方法就能实现对应的自动化操作。

大多数代码不需要进行额外的更改,当您需要运行不同的测试用例时,只需要修改yaml文件名。调用不同的yaml测试步骤。

test_login.py

import yaml import pytest from selenium import webdriver from keyworks import Page

@pytest.fixture def driver(): d = webdriver.Chrome() d.implicitly_wait(8) d.maximize_window() yield d d.quit()

def test_keyword(driver): """获取 yaml 文件""" with open('signin.yaml', encoding='utf-8') as f: steps = yaml.safe_load(f) page = Page(driver) for step in steps: action_name = step.get('action') params = step.get('params') action = getattr(page, action_name) action(**params)

运行

我们只需要定义不同的yaml文件,然后使用pytest这样的情况下可以测试框架自动运行。但是,作为一个简单版的关键字驱动方法,该程序仍有很大的优化空间。例如,现在除了编写yaml文件外,还需要创建多个python测试文件。而且比较常见的是,可以通过命令行配置一个yaml文件,就可以运行yaml文件的测试步骤。多个yaml配置文件,可以运行多个yaml文件测试步骤。您可以配置文件夹名称,甚至运行文件夹的所有yaml文件的测试步骤。Yaml文件生成也可以从命令行生成。这一点我们在实现上是落后的,目前,我们至少已经知道了关键字驱动方法的实现方式。