使用Python大规模运行自动化测试

目录

什么是Selenium?

Selenium IDE

Selenium WebDriver

Selenium Grid

如何使用Python设置Selenium?

先决条件

控制台输出

控制台输出

使用Selenium编写第一个自动化测试脚本

获取网站标题

控制台输出

代码演练

将项目添加到待办事项列表

输出

代码演练

如何使用Python测试框架设置Selenium?

控制台输出

输出

使用pytest框架执行并行测试

安装pytest-xdist插件

控制台输出

没有并行测试执行

通过并行测试执行

在本地Grid上测试的挑战

在基于云的测试Grid上运行测试用例

逐步了解代码

​编辑 运行第一个Python测试

使用并行测试执行在云网格上运行测试用例

结论


互联网无处不在。网络和移动资产对消费者的购买决策有很大的影响。因此,越来越多的企业正朝着为最终用户提供优质的数字优先体验的方向发展。简单来说,人们正在构建许多网络和移动应用程序。根据 Statista报告,互联网上有超过18.8亿个网站,而且这个数字还在增长。

由于质量是企业成功的重要方面,组织正在越来越多地投资于内部建立QA实践,而自动化测试处于这一转型的最前沿。

那么,作为开发人员或测试人员,这与您有什么关系呢?在当今的就业市场中,在简历上拥有自动化能力非常有吸引力。它也很快上手。开始自动化测试的最佳框架是 Selenium。它支持所有编程语言,在自动化测试框架中占有最大的市场份额。

在本文中,我们将看看Selenium是什么,如何设置Selenium,以及如何使用Python语言编写自动化测试脚本。

接下来,我们将看到如何使用像pytest这样的测试框架,并使用 LambdaTest 在云上执行并行测试执行。

什么是Selenium

Selenium是一种流行的Web应用程序浏览器自动化自动化测试框架。在最近一项关于测试自动化的调查中,81%的参与者表示他们使用Selenium来自动化测试。

它允许跨多种操作系统和浏览器进行网站或Web应用程序测试。它还支持许多编程语言,例如PythonC#JavaJavaScriptNode.js)、Ruby等,允许测试人员使用最熟悉的语言自动执行他们的网站测试。

Selenium框架有三个组件,如下图所示。

Selenium IDE

Selenium IDE(集成开发环境)提供了一个记录和回放工具,该工具将根据在浏览器上执行的操作生成脚本。它提供了一个用户友好的界面,允许测试人员和开发人员轻松地导出JavaPythonRubyC#等编程语言的自动化测试脚本。它是初学者的理想工具,几乎不需要任何编程知识。但是,它无法创建更复杂的测试用例。为此,可以使用Selenium WebDriverSelenium Grid

Selenium WebDriver

Selenium WebDriver提供了一种可靠且面向对象的自动化浏览器方法。使用Selenium WebDriver可以用JavaC#PythonRubyJavaScript等编程语言编写自动化脚本。通过直接与浏览器交互,它可以通过编程方式控制它。WebDriver支持许多浏览器,包括ChromeFirefoxSafariMicrosoft Edge等。

Selenium Grid

Selenium Grid也被归类为本地网格,它允许您在多个物理机或虚拟机之间拆分测试执行,从而实现并行测试执行。您可以同时在多个浏览器、操作系统和设备上运行测试,这要归功于它与Selenium WebDriver的集成。几个节点和一个中心组成了Selenium Grid。测试被分发到可用节点,以便在Hub上执行,Hub是测试注册的中心位置。

如何使用Python设置Selenium

使用Python设置Selenium相对容易。您可以按照本节中提供的步骤轻松设置它。

先决条件

  • 最新版本的Python
  • 要运行测试的Web浏览器。

使用Python包管理器pip,您可以通过在命令行或终端中输入以下命令来安装 Selenium

pip install selenium

控制台输出

要验证Selenium的安装,您可以运行以下代码:

import selenium

print(selenium.__version__)

控制台输出

使用Selenium编写第一个自动化测试脚本

我们大多数人都创建了一个示例待办事项应用程序作为我们的第一个项目,那么为什么不为它创建一个测试呢?在本节中,我们将创建两个简单而实用的困难,其中一个是获取网站的标题,另一个是将项目添加到待办事项列表中。

获取网站标题

在此测试中,我们将打印标题,我们将从网站上检索该标题。对于此测试,我们将使用Chrome浏览器来执行测试。

from selenium import webdriver

# Create a new instance of the Chrome driver
driver = webdriver.Chrome()

# Navigate to the website
driver.get("https://lambdatest.github.io/sample-todo-app/")

# Get the title of the webpage
website_title = driver.title

# Print the title to the console
print("Title:", website_title)

# Close the entire browser session
driver.quit()

控制台输出

代码演练

import语句用于从Selenium包中获取WebDriver

它用于初始化Chrome WebDriver的新实例。

get():这是WebDriver对象提供的方法,用于导航到特定URL。它指示Web浏览器打开指定的URL

titletitle方法用于检索用户当前正在处理的网页的标题。

quit():此方法退出整个浏览器会话及其所有选项卡和窗口。

在自动化中,与输入字段和按钮进行交互是一项常规任务。右键单击网页上的任意位置,然后选择检查元素以查看元素的详细信息。将鼠标悬停在要访问的元素上。

使用该find_element()方法来识别输入元素,您可以使用该send_keys()方法模仿键盘输入。您可以通过将所选文本或值作为参数,用所需数据填充输入字段来模拟用户输入。要使用按钮,您需要使用找到按钮的find_element()方法和按下它的click()方法。在下面测试的帮助下,我们将看到如何使用这些方法。

将项目添加到待办事项列表

在此测试中,我们将饮用水添加到待办事项列表中。对于此测试,我们将使用Firefox浏览器来执行我们的测试。

from selenium import webdriver
from selenium.webdriver.common.by import By

# Create a new instance of the Firefox driver
driver = webdriver.Firefox()

# Navigate to website
driver.get("https://lambdatest.github.io/sample-todo-app/")

# This code finds the input field.
search_for_key = driver.find_element(By.ID, "sampletodotext")

# This code adds text to the input field.
search_for_key.send_keys("Drinking Water")

# This code gets the button
search_btn = driver.find_element(By.ID, "addbutton")

# This method press the button
search_btn.click()

# Close the browser window
driver.quit()

输出

代码演练

要使用By,需要导入以下import语句:

初始化Firefox浏览器。

获取使用find_element()方法。

send_keys():用于将文本发送到任何字段,例如表单的输入字段。

click():此方法将单击按钮。

如何使用Python测试框架设置Selenium

测试框架提供了一种有组织且有效的测试方法,使其成为软件开发必不可少的方法。它提供了一种有条不紊的技术来安排、自动化和管理测试,使查找和解决编码错误变得更加简单。

测试框架允许测试自动化,使组织测试用例变得更加容易,生成有见地的报告,并保证测试的一致性和可靠性。它们是保持代码质量、确认功能和为用户提供可信赖软件的重要资源。

Python提供了UnittestpytestBehaveRobot等测试框架,这些框架很容易使用。首先,我们将在pytest中重写我们之前的测试。

首先,我们需要使用以下命令安装pytest

pip install pytest

控制台输出

我们需要将测试转换为如下所示的函数。

from selenium import webdriver
from selenium.webdriver.common.by import By
import pytest

# Test 1: Get Title of the Website
def test_get_website_title():
    driver = webdriver.Chrome()
    driver.get("https://lambdatest.github.io/sample-todo-app/")
    website_title = driver.title
    driver.quit()
    assert "Sample page - lambdatest.com" in website_title

# Test 2: Adding an Item to a To-Do List
def test_add_todo_item():
    driver = webdriver.Firefox()
    driver.get("https://lambdatest.github.io/sample-todo-app/")
    search_for_key = driver.find_element(By.ID, "sampletodotext")
    search_for_key.send_keys("Drinking Water")
    search_btn = driver.find_element(By.ID, "addbutton")
    search_btn.click()
    driver.quit()

if __name__ == "__main__":
    pytest.main()

此脚本有两个测试函数test_get_website_title()test_add_todo_item(),每个函数表示一个测试用例。PyTest将自动发现并执行这些测试。

输出

Pytest将找到测试并运行它们,为您提供完整的输出,包括通过/失败状态。您可以通过将Seleniumpytest结合使用,同时自动执行SeleniumWeb测试工作,同时使用pytest的测试功能。

使用pytest框架执行并行测试

当您有一大堆测试时,并行测试可以大大缩短运行每个测试所需的时间。您可以利用pytest内置的并行测试执行功能来并行运行指定的代码。

考虑一个示例,我们需要执行2个测试用例,这将需要7-8秒。与此形成鲜明对比的是,如果我们使用并行测试执行,则时间为3-4秒。这是如何做到的:

安装pytest-xdist插件

要允许并行测试运行,您必须安装插件。使用pytest-xdistpip,您可以:

pip install pytest-xdist

控制台输出

现在,使用以下命令运行脚本。

pytest main.py -n 2

pytest-xdist插件提供了用于并行测试运行的选项-n 2。它指出您希望使用两个并行进程来执行测试。这表明pytest将划分测试并在两个CPU内核上并发运行它们,这可以加快测试套件的执行速度。

没有并行测试执行

通过并行测试执行

如您所见,整个测试脚本的执行时间为3.73,与上面执行的测试(7.88)相比几乎减少了一半。

在本地Grid上测试的挑战

在本地Grid上进行测试时,可能会出现许多挑战。更容易获得的物理设备和浏览器是重大问题之一。本地Grid使得跨各种设备和浏览器配置进行测试变得具有挑战性,这可能会对整个测试覆盖率产生负面影响。

它还需要大量资源(包括基础架构设置、软件和硬件)来维护和管理。扩展Grid以应对不断增长的测试需求可能需要时间和金钱。

基于云的测试Grid解决了本地Grid的问题。它们提供各种设备和浏览器,可实现可扩展和灵活的测试。测试人员可以使用不同的配置,同时运行测试以加快执行速度,并扩大覆盖率。基于云的Grid不需要管理本地基础结构。

LambdaTest AI驱动的测试编排和执行平台提供了一个云网格,您可以在其中使用SeleniumPython自动化测试工具运行测试。它们使使用pytestUnittest等知名测试框架编写和执行自动化脚本变得简单,因为它们支持多种Chrome浏览器版本和操作系统。

在基于云的测试Grid上运行测试用例

在本节中,我们将使用pytest作为框架在LambdaTest上运行测试。我们将在装有Chrome版本10Windows 114.0操作系统上进行测试。

LambdaTest上运行Python测试之前,请按照简单的步骤操作。

  1. 创建一个LambdaTest账户并完成所有必需的流程。
  2. 转到LambdaTest控制面板。要获取您的凭据,请导航到右上角的个人资料头像

3.然后转到帐户设置”>密码和安全。您可以找到您的用户名和访问密钥并保存以备将来使用。

逐步了解代码

下面显示的是示例待办事项应用程序的测试脚本。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.common.by import By
import pytest

# LambdaTest Selenium Grid configuration
username = "YOUR USERNAME"
access_key = "YOUR ACCESS KEY"


# Test 1: Get Title of the Website on LambdaTest
def test_get_website_title_on_lambdatest():
    # Desired capabilities for the LambdaTest test
    lt_options = {
        "browserName": "Chrome",
        "platformName": "macOS Ventura",
        "project": "First Test",
        "build": "Testing to-do list",
        "name": "Get Website Title Test",
    }

    remote_url = "http://{}:{}@hub.lambdatest.com/wd/hub".format(username, access_key)
    browser_options = ChromeOptions()

    # adding the capability to the chrome
    browser_options.set_capability("LT:Options", lt_options)

    # initializing remote server
    driver = webdriver.Remote(command_executor=remote_url, options=browser_options)

    driver.get("https://lambdatest.github.io/sample-todo-app/")

    website_title = driver.title

    driver.quit()

    assert "Sample page - lambdatest.com" in website_title


# Test 2: Adding an Item to a To-Do List on LambdaTest
def test_add_todo_item_on_lambdatest():
    lt_options = {
        "browserName": "Firefox",
        "platformName": "macOS Ventura",
        "project": "First Test",
        "build": "Testing to-do list",
        "name": "Add Todo Item Test",
    }

    remote_url = "http://{}:{}@hub.lambdatest.com/wd/hub".format(username, access_key)
    browser_options = FirefoxOptions()

    browser_options.set_capability("LT:Options", lt_options)

    # initializing remote server
    driver = webdriver.Remote(command_executor=remote_url, options=browser_options)

    driver.get("https://lambdatest.github.io/sample-todo-app/")

    search_for_key = driver.find_element(By.ID, "sampletodotext")
    search_for_key.send_keys("Drinking Water")

    search_btn = driver.find_element(By.ID, "addbutton")
    search_btn.click()

    driver.quit()

if __name__ == "__main__":
    pytest.main()

在上面的脚本中,在上面的测试脚本中添加您的LambdaTest凭证(用户名和访问密钥)或在您的环境变量中设置它们,因为这将有助于LambdaTest在您的账户上运行测试。

LambdaTest功能生成器获取所需的功能。

运行第一个Python测试

自动化> Web自动化下查找测试用例的详细信息。

您还可以探索其他可用选项,以更好地了解LambdaTest平台。

使用并行测试执行在云网格上运行测试用例

若要并行执行测试,必须运行我们对本地Grid执行的相同命令。

pytest main.py -n 2

如您所见,这两个测试在LambdaTest上同时运行。

结论

Selenium是一套强大的技术,用于自动化在线浏览器交互。我们发现了如何结合PythonSelenium,并将我们的第一个测试付诸实践。我们还讨论了使用pytest等测试框架并同时运行测试以提高效率的好处。

我们还强调了使用本地网格进行测试的困难,以及使用基于云的自动化测试平台(如LambdaTest)的优势,该平台提供了可扩展且资源高效的选项。测试人员可以通过Selenium、基于云的网格和并行执行来加速测试执行并增加测试覆盖率,从而提高其Web应用程序的水平。

总之,Selenium提供了一种全面有效的在线自动化和测试方法,结合了Python、现代测试框架、基于云的网格和并行执行。它为测试人员提供了处理问题和生成高质量软件的工具。

https://www.codeproject.com/Articles/5368642/Running-Automation-Tests-at-Scale-Using-Python

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值