用Selenium和Python建立现代网络测试自动化框架

402 阅读11分钟

DZone>性能区 > 用Selenium和Python建立现代网络测试自动化框架

用Selenium和Python建立现代网络测试自动化框架

每一个引入新功能和错误修复的新部署都需要深入的端到端测试以确保部署的成功率。

Ramit Dhamija user avatar通过

拉米特-达米贾

·

Aug. 06, 21 -性能区 -教程

喜欢 (1)

评论

保存

Tweet

2.88K浏览次数

加入DZone社区,获得完整的会员体验。

免费加入

如今,在不牺牲产品质量的前提下,不定期地部署大版本已经成为一种主流趋势。随着每一个引入新功能的新部署,错误修复需要深入的端到端测试以确保部署的成功率。小的产品或项目可以用手动测试来覆盖,但功能数量庞大的产品或应用肯定需要自动化测试,以便在最短的时间内提供最大的测试覆盖。这种用例可以通过使用Selenium和任何强大的编程语言来实现,在这篇文章中,我们将使用Selenium和Python

Selenium WebDriver是一个网络框架,它允许在各种支持的浏览器上实现基于网络的应用程序的自动化,如Chrome、Firefox、Safari等。Selenium测试自动化框架使你能够定义与网络应用的逐步互动,并添加断言以发现最大的错误。

Selenium网络测试自动化框架可用于不同的编程语言,如Java、Python、Javascript、Ruby、C#等。根据GitHub的调查,Python是开发者最需要的编程语言。Python语言有一个平滑的学习曲线,具有简单的语法和简洁的代码。因此,Selenium可以很容易地与Python集成,实现网络测试过程的自动化。

Selenium WebDriver架构的快速概述

接下来,了解Selenium WebDriver到底是如何工作的很重要。Selenium WebDriver不是一个独立的测试工具,它包括各种组件以满足网络测试自动化的需要。下面是描述Selenium WebDriver架构的图表。

这张图向我们简要介绍了Selenium WebDriver的后台工作以及其他相关组件。让我们快速了解一下这些组件的理论概况。

  • Selenium WebDriver客户端库/语言绑定。如上所述,Selenium可以与任何首选语言如Java、Python、JavaScript、C#等集成。Selenium客户端和WebDriver语言绑定可在Selenium下载页面上找到,以便用任何首选语言创建脚本,与Selenium服务器进行交互。
  • JSON线协议。这个协议被认为是Selenium的核心。JSON线协议通过为REST API的数据传输提供媒介,促进了代码和浏览器之间的通信。这些API被用来在客户端和服务器之间传输数据。每个浏览器驱动程序使用自己的HTTP服务器进行数据传输。
  • 浏览器驱动程序。 每个浏览器都有自己的浏览器驱动程序的实现。浏览器驱动程序从我们编写的基于Selenium的脚本中接收命令,在相应的浏览器上执行,并以HTTP响应的形式返回响应。这只有在JSON Wire协议的帮助下才能实现,该协议在浏览器二进制文件和客户端库之间建立了一个连接。
  • 浏览器。每个被触发的自动化测试都会在安装在本地或远程机器上的浏览器上执行。Selenium支持多种浏览器,如Firefox, Chrome, Microsoft Edge, Safari等。

四大Python测试自动化框架

随着对Python需求的增加,Python测试自动化框架的普及也相应地增加。在管理脚本执行顺序、存储结果、呈现日志和添加断言方面,这些框架在组织自动化项目方面发挥了重要作用。起初,从现有的多个框架中选择一个框架可能会很困难,但最终会对开发一个强大的测试框架有很大的好处。在这里,我们将仔细研究Python中需要的前四个测试自动化框架。

机器人框架

机器人框架是一个开源的自动化测试框架,主要用于机器人流程自动化(RPA)和验收测试驱动的开发(ATDD)。它支持Python 2.7.14或更高的版本。

优点。

  • 它适用于所有类型的应用程序,如Web应用程序,移动应用程序,桌面应用程序。
  • 它是一个关键字驱动的方法(KDA),允许我们用人类可读的关键字创建测试案例,不需要编码经验。
  • 它支持从RF v4.0开始的本地IF/ELSE语法
  • 它提供专门的社区支持和多种资源。

缺点。

  • 报告的定制很复杂。
  • 这个框架的并行测试范围有限,但可以用Pabot(机器人框架的一个并行执行器)来实现。

Pytest

Pytest是最常用的Python自动化测试框架。它主要用于单元、功能和API测试。它支持Python 3.5或更高的版本。

优点。

  • 提供固定装置,有助于覆盖所有的参数组合,而无需重写代码。
  • 支持多种范围的插件,如 pytest-randomly, pytest-cov, pytest-django, pytest-bdd。
  • 支持pytest html插件,为自动测试套件生成html报告。只需一个命令就可以生成报告。
  • 支持使用pytest-xdist插件并行执行测试案例。

缺点。

  • 由于pytest有一个独特的编写测试用例的程序,它不容易与其他测试框架兼容。

PyUnit

它是Python软件包中默认的Python测试框架,因此被许多开发者所青睐。它是一个单元测试框架,其灵感来自于JUnit,最流行的Java测试框架。

优点。

  • 因为它是默认的Python包的一部分,所以不需要其他额外的安装来设置PyUnit。
  • 以非常快的方式生成两种测试报告,即XML报告和unittest-sml-reporting。

缺点。

  • 有时,会涉及大量的模板代码。
  • 因为它是基于JUnit的,所以使用camelCase命名方法,而不是Python的snake_case命名惯例。

Behave

Behave是最流行的Python BDD(行为驱动开发)测试自动化框架之一。它的功能与Cucumber框架非常相似。

优点是。

  • 它完全支持Gherkin语言,可以用可读的语言编写测试用例,这进一步导致了其他非技术团队的参与。
  • 它有Django和Flask的集成。

缺点。

  • 它只适用于黑盒测试。
  • 而且不支持并行测试。

用Selenium和Pytest框架设置Python

现在我们已经了解了Selenium WebDriver的结构和Python的一些测试框架,让我们开始安装在Windows机器上运行基于Selenium的自动测试所需的东西。

第1步: 下载Python for Windows并安装该程序。如果Python已经安装在你的本地机器上,你可以跳过这个步骤。

第2步: 为了在Python中安装和管理任何包,PIP必须和Python一起安装在本地机器中。PIP 是软件包管理系统,可以从Python 官方网站下载。一旦下载,你可以通过使用下面的命令来安装。

python get-pip.py

以下是确认PIP是否正确安装的命令。

pip -version

第3步: 由于我们使用Pytest框架来构建我们的自动化测试套件,所以也必须安装Pytest库。执行下面的命令来安装pytest。

pip install -U pytest 

下面是确认pytest是否正确安装的命令。

pytest -version

第4步: 为了安装带有PIP的Selenium框架,执行下面的命令。

pip install -U selenium

要验证已安装的selenium版本,请使用该命令。

python -c "import selenium; print(selenium.__version__)"

第5步: 为了调用我们的自动浏览器,我们将不专门下载任何浏览器驱动程序。相反,我们将使用WebDriver-Manager,它是一个开源的库,可以自动管理不同的浏览器驱动程序。我们可以通过运行下面的命令来安装Web Driver-Manager。

pip install webdriver-manager

你可以通过运行下面的命令来验证Selenium和Webdriver-manager是否已经安装。

pip list

这样,我们就完成了使用python运行基于Selenium的自动测试的所有先决条件的安装。现在让我们快速创建一个简短的测试场景来编写脚本。

  1. 直接到pCloudy的主页
  2. 点击登录
  3. 获取页面标题
  4. 断言登录页面的标题

为了实现上述测试场景,下面是使用pytest框架的selenium-python脚本。

import pytest
from selenium
import webdriver
from webdriver_manager.chrome
import ChromeDriverManager
import sys
from selenium.webdriver.chrome.options
import Options
from selenium.webdriver.common.keys
import Keys
from time
import sleep 
def pcloudy_sample_test():     driver = webdriver.Chrome(ChromeDriverManager().install()) 
driver.get('https://www.pcloudy.com/') driver.maximize_window() 
driver.find_element(By.XPATH, '//*[text()="Login"]').click() sleep(2) 
title = "" Remote Mobile Web & Application Testing on Real Android Devices - pCloudy ""
assert title == driver.title 
driver.close()

代码演练。

最初,我们已经导入了运行自动化测试所需的库。通过创建一个函数,我们首先使用WebDriverManager来调用我们的chrome浏览器。基本上,WebDriverManager检查最新版本的WebDriver二进制文件,如果你的系统上没有,就下载它,然后导出Selenium需要的WebDriver环境变量。在启动浏览器后,我们将pCloudy主页的URL传递给浏览器,并将浏览器最大化以获得更好的分辨率。

一旦使用XPATH定位器加载了pCloudy主页,我们将寻找登录按钮重定向到登录页面。最后,我们要断言实际的标题与预期检索到的主页标题一致。

如果断言通过,测试案例将被标记为通过,否则它将被标记为失败。在执行结束后,运行会话将被关闭。

在pCloudy浏览器云上运行Pytest框架测试,进行跨浏览器测试

pCloudy是一个持续的测试云,提供跨浏览器的测试能力,提供真实的Windows和Mac机器所支持的广泛的浏览器。这个名为 "浏览器云 "的平台允许我们访问托管在云上的远程机器,这使我们能够在Selenium自动化框架中使用RemoteWebDriver。我们利用这一点,在不同的环境中,如不同的浏览器、多个浏览器版本和不同的操作系统,在云上运行我们的自动化测试。

通过浏览器云测试自动化平台,它还提供了在这些云托管机器上对网络应用的手动测试。如果你的自动化测试在某个特定的环境中失败了,你可以在pCloudy的同一环境中手动运行该测试,只需从UI中选择相同的环境。

让我们来看看下面这个基于Pytest框架的Selenium脚本,它可以在pCloudy浏览器云上运行,进行跨浏览器测试。

import pytest
from os
import environ 
from selenium
import webdriver
from selenium.common.exceptions
import WebDriverException
from selenium.webdriver.remote.remote_connection
import RemoteConnection 
@pytest.fixture(scope = 'function')
def driver():
    desired_caps = {} 
browser = {    "pCloudy_Username": "ramit.dhamija@gmail.com",    "apiKey": "5TfF4UcNRbN3JhucQ",    "clientName": "ramit.dhamija@gmail.com",    "email": "ramit.dhamija@gmail.com",    "os": "Mac",    "osVersion": "Catalina",    "browserName": "safari",    "browserVersions": "14",    "pCloudy_EnableVideo": "true",    "pCloudy_EnablePerformanceData": "true",    "pCloudy_EnableDeviceLogs": "true"
} 
desired_caps.update(browser) 
selenium_endpoint = "https://prod-browsercloud-in.pcloudy.com/seleniumcloud/wd/hub"
 executor = RemoteConnection(selenium_endpoint, resolve_ip = False) browser = webdriver.Remote(    command_executor = executor,    desired_capabilities = desired_caps )
yield browser

sample_login_test.py

import pytest
import sys 
@pytest.mark.usefixtures('driver')
class TestLink:     def test_title(self, driver):    ""
" Verify click and title of login page: return :None "" "
driver.get('https://www.pcloudy.com/') driver.maximize_window() 
driver.find_element(By.XPATH, '//*[text()="Login"]').click() sleep(2) 
title = ""
Remote Mobile Web & Application Testing on Real Android Devices - pCloudy ""
assert title == driver.title driver.quit()
执行pytest测试脚本的命令。
pytest -n=2 tests/sample_login_test.py

**注意:**在上述命令中,-n用于指定并行测试执行的数量。

代码演练

在我们的第一个脚本中,我们使用了pytest fixtures,它基本上是在每个测试函数之前运行的函数,它被应用于此。fixtures中定义的范围--'function'是fixture范围的默认值,这意味着fixture将在每个测试环节执行一次。

为了在pCloudy浏览器云上运行我们的测试,我们已经定义了我们所需的能力,其中包括pCloudy用户名和API密钥形式的认证。在所需的功能中,我们进一步定义了我们所需的环境,我们希望我们的测试能在操作系统为Mac,操作系统版本为Catalina,浏览器为Safari,浏览器版本为14。

pCloudy有一些内置的功能,我们用它来捕捉测试视频记录、性能数据和日志。

为了在pCloudy的Selenium网格上运行我们的测试,我们将Selenium网格的URL定义为selenium_endpoint。连接到这个中心的节点机器将根据所使用的测试环境自动分配。在脚本的最后,我们会产生一个浏览器,它可以存储和更新我们的自动测试的所需能力。

在下一个脚本中,我们使用了与前面相同的selenium脚本来断言pCloudy登录页面的标题。这个自动化测试将在pCloudy浏览器云的环境上运行。Mac-Catalina, Safari-14.

pCloudy输出。

要查看当前测试的运行状态,你需要重定向到pCloudy设备页面,点击报告->我的活动会话。

要查看到目前为止执行的所有测试,请直接到pCloudy设备页面,点击报告->所有报告。

要查看特定测试的日志和快照,请直接到pCloudy设备页面,点击报告->所有报告,对需要日志和截图的特定会话名称进行操作。

主题。

selenium, 自动化, selenium webdriver, python,python框架, python框架

DZone贡献者所表达的观点属于他们自己。

DZone上的热门话题


评论

性能 伙伴资源