结合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 webdriver
    import 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.fixture
    def driver():driver = webdriver.Chrome()yield driverdriver.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提供了丰富的命令行参数来满足不同的测试需求,无论是基本的测试执行还是复杂的测试管理,都可以通过这些参数来实现。了解和正确使用这些参数可以大大提高测试的效率和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2+echarts地图下钻+地图遮盖物散点

一、下载工具 npm i echarts echarts-gl axios -S -S是生产依赖默认是-S不写也可以 -D是开发依赖 二、引入工具 import * as echarts from "echarts"; import "echarts-gl"; import axios from "axios"; 三、HTML部分代码 <div class&…

微信小程序路由跳转

1. wx.navigateTo 作用&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面。特点&#xff1a;跳转后目标页面的生命周期函数 onLoad 和 onShow 会被触发。使用场景&#xff1a;一般用于跳转到应用内的其他页面&#xff0c;保留当前页面的状态&#xff0c;例如从文章…

Java数据类型

一、每种数据都定义了 明确的数据类型&#xff0c;在内存中分配了不同大小的 内存空间(字节)。 二、Java数据类型分为两种&#xff1a; 基本数据类型&#xff1a; 数值型&#xff1a; 整数类型&#xff0c;存放整数(byte[1] , short[2] , int[4] , long[8]) 浮点类型&#xff0…

UE5 读取本地图片并转换为base64字符串

调试网址&#xff1a;在线图像转Base64 - 码工具 (matools.com) 注意要加&#xff08;data:image/png;base64,&#xff09; FString UBasicFuncLib::LoadImageToBase64(const FString& ImagePath) {TArray<uint8> ImageData;// Step 1: 读取图片文件到字节数组if (!…

【蓝桥杯】第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组

答题结果页 - 蓝桥云课 (lanqiao.cn) 0子2023 - 蓝桥云课 (lanqiao.cn)&#xff08;暴力枚举 #include<bits/stdc.h> using lllong long; using ullunsigned long long; #define fir first #define sec second //#define int llconst int N1e510; const int mod1e97;int…

C++标准模板(STL)- C 内存管理库 - 分配内存 (std::malloc)

C 内存管理库 分配内存 std::malloc 定义于头文件 <cstdlib> void* malloc( std::size_t size ); 分配 size 字节的未初始化存储。 若分配成功&#xff0c;则返回指向分配的适合对任何标量类型对齐的内存块中&#xff0c;最低&#xff08;首&#xff09;字节的指针…

HT46R002 贴片 SOP8 经济型AD型OTP MCU单片机芯片

HT46R002在智能家居中的具体应用案例可以包括以下几个方面&#xff1a; 1. 智能照明控制&#xff1a;可以用于控制LED灯的亮度和色温&#xff0c;甚至可以通过手机APP远程控制开关和调节灯光效果。 2. 环境监测&#xff1a;用于监测室内温度、湿度、空气质量等&#xff0c;当检…

PostgreSQL和GaussDB对比

PostgreSQL和GaussDB对比 GaussDB 是华为推出的一款基于 PostgreSQL 的企业级数据库产品&#xff0c;通过对 PostgreSQL 进行一系列优化和扩展&#xff0c;使其更加适应企业应用的需求。以下是 PostgreSQL 和 GaussDB 两者之间的对比&#xff0c;从多个方面进行分析&#xff0…

httpJVM

目录 HTTPS如何保证安全 1&#xff09;引入非对称加密 2&#xff09;引入非对称加密 3.中间人攻击 4.解决中间人攻击 JVM 1.JVM内存划分 2.JVM类加载过程 八股内容 3.JVM中的垃圾回收机制 释放垃圾的策略 1.标记-清除 2.复制算法 3.标记-整理 分代回收 HTTPS如何…

GB-T 43696-2024 网络安全技术 零信任参考体系架构

GB-T 43696-2024 网络安全技术 零信任参考体系架构 编写背景 随着网络环境的日益复杂&#xff0c;传统的网络安全策略已经难以满足现代企业的需求。为了应对不断变化的安全威胁&#xff0c;零信任安全模型应运而生。GB-T 43696-2024《网络安全技术 零信任参考体系架构》是中国…

Android Graphics图形栈SurfaceFlinger之间各种Layer以及对应Buffer之间的关系

Android Graphics图形栈SurfaceFlinger之间各种Layer以及对应Buffer之间的关系 SurfaceFlinger layer之间的对应关系

MyBatis学习笔记(周五前学完)

MyBatis-Plus是一个MyBatis的增强工具。在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 通过MyBatis-Plus来进行数据插入时&#xff0c;它默认会 使用雪花算法来生成id&#xff0c;长度比较长 增删改的返回值都是统一的&#xff0c;影响的只有行数。…

给pdf加水印,python实现

from PyPDF2 import PdfReader, PdfWriterdef add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):"""把水印添加到pdf中"""pdf_output PdfWriter()input_stream open(pdf_file_in, rb)pdf_input PdfReader(input_stream, strictFalse…

基于魔搭开源推理引擎 DashInfer实现CPU服务器大模型推理--理论篇

前言 在人工智能技术飞速发展的今天&#xff0c;如何高效地在CPU上运行大规模的预训练语言模型&#xff08;LLM&#xff09;成为了加速生成式AI应用广泛落地的核心问题。阿里巴巴达摩院模型开源社区ModelScope近期推出了一款名为DashInfer的推理引擎&#xff0c;旨在解决这一挑…

机器学习补充学习

1、Adaboost算法 Adaboost算法是一种集成学习方法&#xff0c;通过结合多个弱学习器来构建一个强大的预测模型。核心思想&#xff1a;如果一个简单的分类器在训练数据上犯错误&#xff0c;那么它在测试数据上也可能犯错误。 Adaboost通过迭代地训练一系列的分类器&#xff0c…

QT-demo:0轴分布图表

版本&#xff1a;5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库&#xff1a; pip install PyQt5 matplotlib创建和显示图表&#xff1a; import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…

【busybox记录】【shell指令】ln

目录 内容来源&#xff1a; 【GUN】【ln】指令介绍 【busybox】【ln】指令介绍 【linux】【ln】指令介绍 使用示例&#xff1a; 创建链接文件 - 链接文件&#xff08;默认 - 硬链接&#xff09; 创建链接文件 - 链接文件&#xff08;软链接&#xff09; 创建链接文件 -…

MongoDB CRUD操作:空值和缺失字段的查询

MongoDB CRUD操作&#xff1a;空值和缺失字段的查询 文章目录 MongoDB CRUD操作&#xff1a;空值和缺失字段的查询等式过滤器不等式过滤器类型检查检查是否存在使用 MongoDB Atlas 查询空或缺失字段导航至集合插入一个空文档 MongoDB中不同的查询运算符会以不同的方式处理空值&…

JeeSite 4.x and 5.x快速开发平台前端技术探索与实践

一、引言 随着企业信息化建设的不断推进&#xff0c;对于快速、高效、安全的企业级应用需求日益增长。JeeSite作为一款企业级快速开发平台&#xff0c;以其强大的后端功能和灵活的前端架构&#xff0c;为开发者提供了强大的支持。本文旨在探讨JeeSite快速开发平台在前端技术方…

新零售收银解决方案:传统门店超市的数字化-亿发

在数字化浪潮的推动下&#xff0c;零售行业正经历着前所未有的变革。阿里巴巴提出的“新零售”概念&#xff0c;不仅仅是一个商业口号&#xff0c;它代表了一种全新的商业模式和运营理念。随着时代的进步和消费需求的不断升级&#xff0c;新零售的兴起已成为行业发展的必然趋势…