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

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

使用纯代码方式时,自动化工程师先写好一个通用的程序,其他手工测试人员只需要把执行的页面操作关键字填入到一个表格当中,就可以执行自动化测试了。这个表格可以是 Excel 表格,也可是 yaml 文件。

使用测试平台时,测试开发工程会编写一个界面,在假面中,手工测试人员也可以选择需要操作的页面关键字,选择完以后就可以执行自动化测试了。

关键字驱动实现成本低,操作起来也方便,真是个做 ui 自动化测试的好方式。本文介绍一种简单的关键字驱动实现方式,不需要很高深的编程知识也能掌握。

关键字驱动实现主要分为三个部分:

  • 关键字方法的定义,其实就是页面的通用操作,比如点击、输入等常见操作,由自动化测试工程师编写。
  • 关键字表格配置。谁编写自动化用例,谁配置这个表格,它主要定义用例需要执行的页面操作和测试数据,最好通过脚本自动生成固定格式的文件,并且把可以选择的操作名称说明,方便使用, 在测试平台中,可以通过下拉框搜索和选择的方式选择,会更加方便。
  • 调用关键字,执行页面操作。这个也是由自动化测试工程师编写,读取 yaml 文件中的页面操作,并且执行。

定义关键字方法

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

  1. # keywords.py

  2. from selenium.webdriver.remote.webdriver import WebDriver

  3. from selenium.webdriver.remote.webelement import WebElement

  4. from selenium.webdriver.support import expected_conditions

  5. from selenium.webdriver.support.wait import WebDriverWait

  6. DEFAULT_TIMEOUT = 8

  7. class Page:

  8. def __init__(self, driver: WebDriver):

  9. self.driver = driver

  10. def goto(self, url):

  11. """页面访问"""

  12. self.driver.get(url)

  13. def wait_clickable(self, locator, timeout=None) -> WebElement:

  14. timeout = DEFAULT_TIMEOUT if timeout is None else timeout

  15. wait = WebDriverWait(self.driver, timeout=timeout)

  16. return wait.until(expected_conditions.element_to_be_clickable(locator))

  17. def wait_visible(self, locator, timeout=None) -> WebElement:

  18. timeout = DEFAULT_TIMEOUT if timeout is None else timeout

  19. wait = WebDriverWait(self.driver, timeout=timeout)

  20. return wait.until(expected_conditions.visibility_of_element_located(locator))

  21. def click(self, locator):

  22. """页面点击"""

  23. el = self.wait_clickable(locator)

  24. el.location_once_scrolled_into_view

  25. el.click()

  26. def fill(self, locator, words):

  27. """页面输入"""

  28. el = self.wait_visible(locator)

  29. el.send_keys(words)

 关键字表格

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

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

  1. # login.yaml

  2. -

  3. action: goto

  4. params:

  5. url: "https://petstore.octoperf.com/actions/Account.action?signonForm="

  6. -

  7. action: fill

  8. params:

  9. locator: ['name', 'username']

  10. words: 'yuze'

  11. -

  12. action: fill

  13. params:

  14. locator: ['name', 'password']

  15. words: '1234'

  16. -

  17. action: click

  18. params:

  19. locator: ['name', 'signon']

使用关键字操作浏览器

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

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

  1. # test_login.py

  2. import yaml

  3. import pytest

  4. from selenium import webdriver

  5. from keyworks import Page

  6. @pytest.fixture

  7. def driver():

  8. d = webdriver.Chrome()

  9. d.implicitly_wait(8)

  10. d.maximize_window()

  11. yield d

  12. d.quit()

  13. def test_keyword(driver):

  14. """获取 yaml 文件"""

  15. with open('signin.yaml', encoding='utf-8') as f:

  16. steps = yaml.safe_load(f)

  17. page = Page(driver)

  18. for step in steps:

  19. action_name = step.get('action')

  20. params = step.get('params')

  21. action = getattr(page, action_name)

  22. action(**params)

运行

现在,我们只需要定义不同的 yaml 文件,然后使用 pytest 这样的测试框架来运行自动化用例就可以。 但是,作为一个简单版关键字驱动实现方式,这个程序还有很多的优化空间。

比如,现在编写多个 yaml 文件后,还需要创建多个 python 的 test 文件。而更加常见的方式是,可以通过命令行配置一个 yaml 文件,我就可以运行该 yaml 文件的测试步骤。

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

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

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

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

  • 12
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值