首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
聊聊Web自动化测试:黑盒、白盒、α测试、β测试、冒烟测试、回归测试
Selenium三剑客:WebDriver、IDE、Grid一网打尽
Selenium开发环境搭建
下载安装浏览器驱动:教你解决最麻烦的版本匹配问题
第一个Selenium测试:Selenium测试流程、源码分析
实现元素定位:掌握Selenium八大定位方法
通过打车生活案例,深入剖析WebDriver运行原理
掌握WebDriver核心方法和属性的使用
掌握WebElement核心方法和属性的使用
form表单:熟练掌握form表单操作步骤
掌握checkbox和radiobutton的定位技巧
下拉列表:熟练使用Select类,来实现下拉列表定位
弹框处理:掌握alert、confirm、prompt三种弹出的用法
Selenium三种等待方式:剖析原理、用法和应用场景
Selenium等待条件:掌握17种元素等待条件
掌握鼠标单击、双击、右击,键盘输入、键盘组合键的应用
熟练执行JavaScript的方法和技巧,掌握JavaScript操作滚动条
Selenium屏幕截图:实现屏幕截屏、按照日期时间格式保存图片
掌握frame、iframe定位,熟练frame的切入和切出
下载安装Selenium IDE:下载安装Chrome、Firefox插件IDE
熟练Selenium IDE菜单栏、工具类、命令窗口的使用
Selenium IDE实现录制和回放及脚本导出
项目环境搭建:安装JDK、MySQL、Tomcat和测试系统
需求分析和用例设计:深度挖掘需求,掌握测试用例设计范式
项目架构设计:掌握分层设计思想,合理设计目录和包结构
解决验证码问题-方案一:使用pytesseract和Pillow实现验证码识别
解决验证码问题-方案二:通过第三方AI库识别验证码
实现工具类:设计获得验证码、随机字符串生成、cookie操作工具类
完成用户注册测试用例:解决验证码、等待弹框等复杂内容
完成用户登录测试用例:实现登录成功和失败测试
完成管理员登录测试用例:完成验证码正确和错误测试用例
完成文章分类测试用例:解决测试用例依赖问题
完成添加、删除文章测试用例
unittest简介:测试用例、测试套件、测试运行器、测试加载器
unittest中的方法:掌握各种setup、teardown和断言方法
测试用例、测试套件和测试加载器:掌握加载测试用例的四种方法
使用unittest重构测试用例:掌握使用unittest模块的方法和技巧
为项目添加测试报告:使用第三方模块实现测试报告
pytest框架简介:pytest安装、用例编写规则、执行用例
pytest标记:查找测试策略、标记测试函数
pytest参数化处理:使用参数化装饰器、解析列表、元组、字典等数据
pytest Fixture:使用fixture实现用例之间的调用
pytest setup 和 teardown
pytest allure生成测试报告
使用pytest重构项目:实现用例依赖、测试报告、数据参数化
logging模块简介:日志的作用、等级和常用函数
logging日志格式输出:日志发生的时间、文件、模块、行号等信息格式输出
logging模块四大组件:Logger、Handler、Formatter、Filter的用法
为项目添加日志:将日志应用到项目
使用csv模块读取CSV文件,使用pytest参数化实现DDT
使用json模块读取json文件,使用pytest参数化实现DDT
使用xlrd模块读取excel文件,使用pytest参数化实现DDT
Selenium读取数据库数据:将数据保存到数据库,实现数据驱动的测试
Selenium DDT:使用DDT模块实现数据驱动的测试
使用DDT思想重构项目:使用数据库保存数据,将数据驱动思想应用到项目
POM设计模式简介:理解页面-对象-模型设计模式,实现代码的松耦合
设计BasePage类:设计基类,提高项目的代码重用性
设计项目页面对应的PO类:使用POM设计模式设计PO类
设计项目测试用例:将POM设计模式应用到项目
Selenium Grid下载安装:配置Java运行环境,下载安装Selenium Grid
Selenium注册node节点
使用Selenium执行远程测试
Jenkins环境搭建:下载安装Jenkins
在Jenkins中运行项目
邮件通知:实现邮件通知功能
定时运行项目,实现真正的自动化测试
当前位置:
首页>>
技术小册>>
Selenium自动化测试实战
小册名称:Selenium自动化测试实战
### 章节:使用xlrd模块读取Excel文件,使用pytest参数化实现DDT 在自动化测试领域,数据驱动测试(Data-Driven Testing, DDT)是一种强大的测试策略,它允许测试脚本从外部数据源(如Excel文件、CSV文件或数据库)读取测试数据和预期结果,从而减少了代码的重复性,提高了测试的灵活性和可维护性。本章节将详细介绍如何结合Python的`xlrd`库来读取Excel文件中的数据,并利用`pytest`框架的参数化功能实现数据驱动测试。 #### 一、引言 在Selenium自动化测试中,经常需要对不同的输入数据进行测试以验证应用的功能性。手动为每个测试场景编写测试脚本既耗时又容易出错。采用DDT策略,可以显著提升测试效率,使测试更加系统化和可管理。Excel文件因其格式直观、编辑方便,成为存储测试数据的常见选择。 #### 二、环境准备 在开始之前,请确保你的测试环境中已经安装了以下必要的库: - `pytest`:Python的第三方测试框架,支持简单的单元测试和复杂的集成测试。 - `xlrd`:用于读取Excel文件的Python库(注意:`xlrd`从2.0版本开始不再支持`.xlsx`格式,仅支持旧的`.xls`格式。若需处理`.xlsx`文件,可考虑使用`openpyxl`库)。 可以使用pip命令安装这些库(以`openpyxl`为例,用于处理`.xlsx`文件): ```bash pip install pytest openpyxl ``` #### 三、使用`openpyxl`读取Excel文件 由于`xlrd`的限制,这里我们将使用`openpyxl`来演示如何读取`.xlsx`格式的Excel文件。假设我们有一个名为`testdata.xlsx`的Excel文件,其中包含多个测试用例的数据。 ```python from openpyxl import load_workbook def read_excel_data(file_path, sheet_name='Sheet1'): """ 读取Excel文件中的数据 :param file_path: Excel文件的路径 :param sheet_name: 工作表名称 :return: 数据列表,每个元素是一个包含测试用例数据的元组 """ workbook = load_workbook(filename=file_path) sheet = workbook[sheet_name] data = [] for row in sheet.iter_rows(min_row=2, max_col=sheet.max_column, values_only=True): # 假设第一行是表头,从第二行开始读取数据 data.append(row) return data ``` #### 四、使用`pytest`参数化 `pytest`提供了强大的参数化功能,允许我们为测试函数提供多组参数,并自动运行测试函数多次,每次使用不同的参数组合。 假设`testdata.xlsx`中的数据结构如下: | TestID | URL | ExpectedTitle | |--------|---------------|---------------| | 1 | http://example.com | Example Domain | | 2 | http://google.com | Google | 我们可以编写一个参数化的测试用例来验证网页的标题是否正确。 ```python 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 # 假设这是从Excel读取的函数(这里用静态数据模拟) testdata = [ (1, 'http://example.com', 'Example Domain'), (2, 'http://google.com', 'Google') ] @pytest.mark.parametrize("test_id, url, expected_title", testdata) def test_webpage_title(test_id, url, expected_title): """ 测试网页标题是否正确 """ driver = webdriver.Chrome() # 假设使用Chrome浏览器 try: driver.get(url) WebDriverWait(driver, 10).until( EC.title_contains(expected_title) ) assert driver.title == expected_title, f"Expected title '{expected_title}' but got '{driver.title}'" finally: driver.quit() ``` #### 五、整合Excel读取与pytest参数化 将读取Excel文件的功能与pytest的参数化功能结合起来,我们可以编写一个更完整的测试脚本。 ```python 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 from openpyxl import load_workbook def read_test_data(file_path): """ 读取Excel文件中的测试数据 """ workbook = load_workbook(filename=file_path) sheet = workbook.active data = [] for row in sheet.iter_rows(min_row=2, values_only=True): data.append(row) return data # 假设Excel文件路径 file_path = 'testdata.xlsx' testdata = read_test_data(file_path) @pytest.mark.parametrize("test_id, url, expected_title", testdata) def test_webpage_titles(test_id, url, expected_title): """ 测试多个网页的标题是否正确 """ driver = webdriver.Chrome() try: driver.get(url) WebDriverWait(driver, 10).until( EC.title_contains(expected_title) ) assert driver.title == expected_title, f"Test ID {test_id}: Expected title '{expected_title}' but got '{driver.title}'" finally: driver.quit() ``` #### 六、总结 通过结合`openpyxl`读取Excel文件和`pytest`的参数化功能,我们成功地实现了一个基于数据驱动的Selenium自动化测试脚本。这种方法不仅提高了测试的效率,还使得测试数据的维护和管理变得更加容易。未来,随着测试需求的增加,只需在Excel文件中添加新的测试用例数据,而无需修改测试脚本代码,即可实现对新功能的测试覆盖。
上一篇:
使用json模块读取json文件,使用pytest参数化实现DDT
下一篇:
Selenium读取数据库数据:将数据保存到数据库,实现数据驱动的测试
该分类下的相关小册推荐:
Python数据分析与挖掘实战(上)
Python爬虫入门与实战开发(下)
Python数据分析与挖掘实战(下)
Python3网络爬虫开发实战(下)
Python合辑5-格式化字符串
Python编程轻松进阶(一)
Python机器学习基础教程(上)
Python合辑13-面向对象编程案例(上)
Python神经网络入门与实践
机器学习算法原理与实战
Python编程轻松进阶(四)
Python合辑6-字典专题