当前位置: 首页 > news >正文

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

要做 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']
复制代码
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

使用关键字操作浏览器

最后是通用的测试用例编写。定义一个 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.lryc.cn/news/195855.html

相关文章:

  • C++标准模板(STL)- 类型支持 (数值极限,min,lowest,max)
  • 国际SPEC CPU创榜以来整机最高纪录!浪潮信息八路服务器TS860G7刷新权威算力基准评测性能
  • 【linux】重定向+缓冲区
  • 【vim 学习系列文章 10 -- vim 将代码中空格高亮显示方法】
  • 吴恩达深度学习笔记
  • 基于SpringBoot的医疗预约服务管理系统
  • Java本地缓存的使用
  • 华为数通方向HCIP-DataCom H12-831题库(单选题:281-300)
  • 【分享Python代码】图片转化为素描画
  • 汇川Easy521PLC与压力传感器485通讯实例
  • 创意作品管理软件 Bridge 2024 mac中文版 br2024功能特色
  • 【分享】教你加速访问GitHub,进来学!
  • 利用在线培训系统提升员工技能,助力企业发展
  • 深度学习小工具:Linux 环境下的用户命令和脚本顺序执行器
  • c# WPF 应用程序在屏幕上居中显示
  • JVM之class文件结构剖析
  • TDengine 签约中石化,支撑八大油田 PCS 系统
  • win11 定时计划任务
  • C++入门之引用与内联函数
  • 浅谈智能照明控制系统应用在城市轨道交通
  • macos 中ios系统升级,但是macos还是老系统,在手机上无法安装ios软件
  • Pytest+Allure生成可添加附件的测试报告
  • Spacedrive:开源跨平台文件管理 | 开源日报 No.57
  • c# 同步异步锁
  • 【Spring AOP】统⼀数据返回格式
  • python+django高校体育乒乓球场地预约管理系统_s2409
  • Python Selenium设计模式-POM
  • 【计算机毕设选题推荐】网络在线考试系统SpringBoot+SSM+Vue
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA的LIN总线控制器设计与验证(续)
  • Qt ModelView显示数据库数据