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

测试工具 创建于:2022-03-25
  要做 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: "https://petstore.octoperf.com/actions/Account.action?signonForm="   -     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 的 test 文件。而更加常见的方式是,可以通过命令行配置一个 yaml 文件,我就可以运行该 yaml 文件的测试步骤。   配置多个 yaml 文件,就可以运行多个 yaml 文件的测试步骤。甚至可以配置文件夹名称,就运行文件夹下所有的 yaml 文件的测试步骤。   yaml 文件的生成也可以通过命令行生成。   这个我们在后面在实现,目前来说,我们至少已经知道关键字驱动的实现方式了。


  
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理

权威发布,测试选择不纠结!第15届软件测试行业报告,直击行业发展,把握未来方向!

原文地址:http://www.51testing.com/?action-viewnews-itemid-5086945

免责声明:本文来源于互联网,版权归合法拥有者所有,如有侵权请公众号联系管理员

* 本站提供的一些文章、资料是供学习研究之用,如用于商业用途,请购买正版。

发表于:2022-3-25 10:13 作者:九柄 来源:稀土掘金