web自动化测试:selenium怎么实现关键字驱动

news/2024/12/4 23:29:02/

要做 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 WebDriverWaitDEFAULT_TIMEOUT = 8class Page:def __init__(self, driver: WebDriver):self.driver = driverdef goto(self, url):"""页面访问"""self.driver.get(url)def wait_clickable(self, locator, timeout=None) -> WebElement:timeout = DEFAULT_TIMEOUT if timeout is None else timeoutwait = 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 timeoutwait = 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_viewel.click()def fill(self, locator, words):"""页面输入"""el = self.wait_visible(locator)el.send_keys(words)

 关键字表格

关键字表格是一个自动化用例的测试步骤和数据,这里我们使用 yaml 文件,action 表示要使用的页面操作,它对应前面 Page 类中的同名方法, params 表示方法需要传入的测试参数。

每个不同的用例,编写一个 yaml 文件,当需要运行自动化测试时,把 yaml 文件作为参数传入自动化程序中就可以了。

# login.yaml
-action: gotoparams:url: "https://petstore.octoperf.com/actions/Account.action?signonForm="
-action: fillparams:locator: ['name', 'username']words: 'yuze'
-action: fillparams:locator: ['name', 'password']words: '1234'
-action: clickparams:locator: ['name', 'signon']

使用关键字操作浏览器

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

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

# test_login.pyimport 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 dd.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 的 test 文件。而更加常见的方式是,可以通过命令行配置一个 yaml 文件,我就可以运行该 yaml 文件的测试步骤。

配置多个 yaml 文件,就可以运行多个 yaml 文件的测试步骤。甚至可以配置文件夹名称,就运行文件夹下所有的 yaml 文件的测试步骤。

yaml 文件的生成也可以通过命令行生成。

这个我们在后面在实现,目前来说,我们至少已经知道关键字驱动的实现方式了。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取


http://www.ppmy.cn/news/660862.html

相关文章

施耐德、科士达、艾特网能等多品牌精密空调集中监控方案

管理范围大、效率低? 网点多,设备分散、距离远,不适合目前集中化管理的模式。传统人工管理效率低。 无法及时预知风险? 不能第一时间得知精密空调异常和告警,及时排除隐患和故障。难以及时发现精密空调存在的隐患。…

JS知识点汇总(五)--执行上下文

1. JavaScript中执行上下文和执行栈是什么? 1、执行上下文 执行上下文是一种对Javascript代码执行环境的抽象概念,也就是说只要有Javascript代码运行,那么它就一定是运行在执行上下文中 执行上下文的类型分为三种: 全局执行上…

集成测试、单元测试、系统测试之间的关系和区别

目录 前言 什么是集成测试? 什么是单元测试? 什么是系统集成测试? 集成测试与单元测试 系统测试与集成测试 总结: 前言 为了使软件正常工作,所有单元都应集成在一起并正常运行。集成测试就像是要求不同工种的工…

嵌入式常用软件/工具

工欲善其事,必先利其器。开发嵌入式或者其他的代码编写,有工具使用会好很多。以下总结几个常用的顺手工具: 1、Source Insight 快速查看代码,以及方便翻阅关联代码 2、Beyond Compare 比较代码文件和文件夹,用来改代码…

word中插入页码

选择“插入”选项卡,单击“页眉和页脚”组中的“页码”命令,打开“页码”下拉列表,在列表里选中页码插入的位置即可。 对页码的格式可以进行修改,单击“页码”下拉列表中的“设置页码格式”命令,打开“页码格式”对话框…

Word文档页码如何从第三页(或某一页)开始添加

背景 有时候写论文或者报告会要求页码从正文那一页再开始添加,经过自己的摸索尝试,终于找到了解决方法,如下所示。 解决方法 假若要从第三页开始添加页码 将光标定位到第二页的最末尾的位置,然后点击:布局->分割…

Word如何从中间页插入页码

Word如何从中间页插入页码 第一步-添加分节符 光标置于起始页码得上一页,点击【布局】->【分隔符】->【分节符下一页】 第二步-设置页码格式 点击【插入】->【页码】->【设置页码格式】 选中【起始页码】,设置起始页为‘1’ 第三步-…

word插入页码技巧

最近需要打印项目结题报告,在排版上遇到了些困难。 第一个是目录制作。原来都是手工制作的,这样做出来的既难看,又不稳定,只要稍微改下正文中的内容,目录又得重新修改。所以最好得办法当然是用word自动给我们生成。在h…