目录
互联网无处不在。网络和移动资产对消费者的购买决策有很大的影响。因此,越来越多的企业正朝着为最终用户提供优质的数字优先体验的方向发展。简单来说,人们正在构建许多网络和移动应用程序。根据 Statista报告,互联网上有超过18.8亿个网站,而且这个数字还在增长。
由于质量是企业成功的重要方面,组织正在越来越多地投资于内部建立QA实践,而自动化测试处于这一转型的最前沿。
那么,作为开发人员或测试人员,这与您有什么关系呢?在当今的就业市场中,在简历上拥有自动化能力非常有吸引力。它也很快上手。开始自动化测试的最佳框架是 Selenium。它支持所有编程语言,在自动化测试框架中占有最大的市场份额。
在本文中,我们将看看Selenium是什么,如何设置Selenium,以及如何使用Python语言编写自动化测试脚本。
接下来,我们将看到如何使用像pytest这样的测试框架,并使用 LambdaTest 在云上执行并行测试执行。
什么是Selenium?
Selenium是一种流行的Web应用程序浏览器自动化自动化测试框架。在最近一项关于测试自动化的调查中,81%的参与者表示他们使用Selenium来自动化测试。
它允许跨多种操作系统和浏览器进行网站或Web应用程序测试。它还支持许多编程语言,例如Python、C#Java、JavaScript(Node.js)、Ruby等,允许测试人员使用最熟悉的语言自动执行他们的网站测试。
Selenium框架有三个组件,如下图所示。
Selenium IDE
Selenium IDE(集成开发环境)提供了一个记录和回放工具,该工具将根据在浏览器上执行的操作生成脚本。它提供了一个用户友好的界面,允许测试人员和开发人员轻松地导出Java、Python、Ruby、C#等编程语言的自动化测试脚本。它是初学者的理想工具,几乎不需要任何编程知识。但是,它无法创建更复杂的测试用例。为此,可以使用Selenium WebDriver和Selenium Grid。
Selenium WebDriver
Selenium WebDriver提供了一种可靠且面向对象的自动化浏览器方法。使用Selenium WebDriver可以用Java、C#、Python、Ruby和JavaScript等编程语言编写自动化脚本。通过直接与浏览器交互,它可以通过编程方式控制它。WebDriver支持许多浏览器,包括Chrome、Firefox、Safari、Microsoft 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。
title:title方法用于检索用户当前正在处理的网页的标题。
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提供了Unittest、pytest、Behave和Robot等测试框架,这些框架很容易使用。首先,我们将在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将找到测试并运行它们,为您提供完整的输出,包括通过/失败状态。您可以通过将Selenium与pytest结合使用,同时自动执行Selenium的Web测试工作,同时使用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驱动的测试编排和执行平台提供了一个云网格,您可以在其中使用Selenium和Python等自动化测试工具运行测试。它们使使用pytest和Unittest等知名测试框架编写和执行自动化脚本变得简单,因为它们支持多种Chrome浏览器版本和操作系统。
在基于云的测试Grid上运行测试用例
在本节中,我们将使用pytest作为框架在LambdaTest上运行测试。我们将在装有Chrome版本10的Windows 114.0操作系统上进行测试。
在LambdaTest上运行Python测试之前,请按照简单的步骤操作。
- 创建一个LambdaTest账户并完成所有必需的流程。
- 转到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是一套强大的技术,用于自动化在线浏览器交互。我们发现了如何结合Python和Selenium,并将我们的第一个测试付诸实践。我们还讨论了使用pytest等测试框架并同时运行测试以提高效率的好处。
我们还强调了使用本地网格进行测试的困难,以及使用基于云的自动化测试平台(如LambdaTest)的优势,该平台提供了可扩展且资源高效的选项。测试人员可以通过Selenium、基于云的网格和并行执行来加速测试执行并增加测试覆盖率,从而提高其Web应用程序的水平。
总之,Selenium提供了一种全面有效的在线自动化和测试方法,结合了Python、现代测试框架、基于云的网格和并行执行。它为测试人员提供了处理问题和生成高质量软件的工具。
https://www.codeproject.com/Articles/5368642/Running-Automation-Tests-at-Scale-Using-Python