0


结合PyTest和Selenium进行网页自动化测试的例子

一个结合PyTest和Selenium进行网页自动化测试的示例。

这个测试用例模拟了一个简单的用户登录过程,并包含了对登录后页面状态的断言。我们将使用Selenium的WebDriver来控制浏览器,并使用PyTest来进行断言。

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 定义一个fixture来设置和拆卸WebDriver
@pytest.fixture(scope="module")
def driver():
    # 创建一个Chrome WebDriver实例
    driver = webdriver.Chrome()
    yield driver
    # 测试完成后关闭浏览器
    driver.quit()

# 测试用例:登录测试
def test_login(driver):
    # 打开登录页面
    driver.get("http://yourwebsite.com/login")
    
    # 找到用户名和密码输入框并输入值
    username_input = driver.find_element(By.ID, "username")
    username_input.send_keys("testuser")
    
    password_input = driver.find_element(By.ID, "password")
    password_input.send_keys("testpassword")
    
    # 找到登录按钮并点击
    login_button = driver.find_element(By.ID, "submit")
    login_button.click()
    
    # 等待直到页面标题更新为登录后的标题
    WebDriverWait(driver, 10).until(EC.title_contains("Dashboard"))
    
    # 断言登录后的页面标题
    assert "Dashboard" in driver.title
    
    # 断言用户名在页面中显示
    welcome_message = driver.find_element(By.XPATH, "//div[contains(text(), 'Welcome, testuser')]")
    assert welcome_message.is_displayed()
    
    # 断言登录后页面上不再显示登录表单
    with pytest.raises(Exception):
        driver.find_element(By.ID, "username")

    # 执行登出操作(如果存在)
    logout_button = driver.find_element(By.LINK_TEXT, "Logout")
    logout_button.click()
    
    # 断言登出后页面标题恢复为登录页面标题
    assert "Login" in driver.title
    
    # 断言登录表单再次出现
    username_input_after_logout = driver.find_element(By.ID, "username")
    assert username_input_after_logout.is_displayed()

在上面的测试用例中,我们首先使用

@pytest.fixture

装饰器创建了一个WebDriver实例,然后在

test_login

函数中使用这个实例来模拟用户登录。我们使用了显式等待来确保页面已经加载完成,并且使用了断言来验证页面的状态。

请注意,上面的URL和元素定位信息(如

By.ID

,

By.XPATH

等)需要替换为你实际要测试的网站的信息。同时,确保你的环境中已经安装了PyTest和Selenium,并且已经配置好了WebDriver的路径。


在Selenium中,如何使用assert来验证元素的文本内容

在Selenium中使用PyTest断言验证元素的文本内容,通常涉及以下几个步骤:

  1. 导入必要的库 首先,确保你已经导入了Selenium WebDriver和PyTest的断言相关库。from selenium import webdriverimport pytest
  2. 编写测试用例 在测试用例中,使用PyTest的断言方法来验证Selenium操作的结果。例如,你可以使用assert关键字来比较实际结果和预期结果。def test_example(driver): driver.get('http://example.com') # 定位到元素 element = driver.find_element_by_id('some_id') # 断言元素的文本内容 assert 'expected_text' == element.text
  3. 使用Fixture 利用PyTest的Fixture功能来自动化测试环境的设置和清理。Fixture可以在测试用例之前和之后执行,以便准备测试环境和清理资源。@pytest.fixturedef driver(): driver = webdriver.Chrome() yield driver driver.quit()
  4. 处理异常 在Selenium测试中,有时可能会遇到元素无法找到或其他意外情况。确保你的测试用例能够妥善处理这些异常,以免导致整个测试过程失败。你可以使用try-except块来捕获和解释这些异常。def test_example(driver): try: driver.get('http://example.com') element = driver.find_element_by_id('nonexistent_id') except NoSuchElementException as e: print(f'An error occurred: {e}') else: assert 'incorrect_text' == element.text
  5. 使用断言辅助函数 考虑使用PyTest的断言辅助函数来简化断言的编写。这些函数可以提供更详细的错误信息,使调试更加方便。def test_example(driver): driver.get('http://example.com') element = driver.find_element_by_id('some_id') with pytest.raises(AssertionError): assert 'incorrect_text' == element.text
  6. 运行测试 使用PyTest的命令行工具来运行测试。你可以使用-v选项来增加输出的详细程度,使用--capture=no来禁止捕获输出,以便看到完整的打印信息。pytest -v your_test_file.py
  7. 测试报告 使用PyTest的报告功能来查看测试结果。PyTest默认生成HTML报告,你还可以使用其他插件来生成不同格式的报告。

以上步骤和最佳实践可以帮助你确保PyTest的断言在Selenium测试中能够正常工作,并提高测试的可靠性和效率。


Pytest命令行参数概述

Pytest是一个流行的Python测试框架,它支持多种命令行参数来控制测试的执行方式和行为。以下是一些常用的Pytest命令行参数及其作用:

  • -v:显示更详细的测试输出信息,包括每个测试用例的名称和结果。
  • -q:显示简洁的测试输出信息,隐藏详细的测试用例名称和结果。
  • -k:通过表达式筛选测试用例,例如-k "smoke"将只运行带有smoke标记的测试用例。
  • -x:测试执行中一旦发现失败的测试用例,立即停止测试。
  • -s:显示打印语句的输出,通常用于调试目的。
  • -n:并行执行测试用例,需要配合pytest-xdist插件使用。
  • --reruns:对失败的测试用例进行重跑,需要配合pytest-rerunfailures插件使用。
  • --maxfail:设置允许失败的最大测试用例数量,超过这个数量后停止测试。
  • --capture:控制测试期间的输出捕获方式,例如--capture=no不捕获任何输出,--capture=sys捕获标准输出和错误。

如何使用Pytest命令行参数

要使用Pytest命令行参数,您可以在命令行界面中直接添加这些参数。例如,要运行所有带有

smoke

标记的测试用例,您可以使用以下命令:

pytest -k "smoke"

如果您想要并行运行测试用例,可以使用

-n

参数,并安装

pytest-xdist

插件:

pytest -n 2

此外,如果您希望对失败的测试用例进行重跑,可以使用

--reruns

参数,并安装

pytest-rerunfailures

插件:

pytest --reruns 2

高级特性

Pytest还支持更多高级特性,例如动态选择测试用例执行、忽略测试用例执行、多进程运行等。这些特性可以通过特定的命令行参数或配置文件来实现。例如,使用

-m

参数可以根据测试用例的标记来动态选择执行的测试用例:

pytest -m "mark1 and not mark2"

上述命令将执行同时具有

mark1

标记且不具有

mark2

标记的所有测试用例。

结论

Pytest提供了丰富的命令行参数来满足不同的测试需求,无论是基本的测试执行还是复杂的测试管理,都可以通过这些参数来实现。了解和正确使用这些参数可以大大提高测试的效率和准确性。

标签: selenium

本文转载自: https://blog.csdn.net/weixin_42771529/article/details/139282171
版权归原作者 PyAIGCMaster 所有, 如有侵权,请联系我们删除。

“结合PyTest和Selenium进行网页自动化测试的例子”的评论:

还没有评论