首页
技术小册
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自动化测试实战
### pytest标记:查找测试策略、标记测试函数 在软件测试领域,尤其是在使用Selenium进行自动化测试时,合理地组织和管理测试用例是至关重要的。随着测试套件的不断增长,如何高效地执行特定的测试集合、跳过某些测试或针对特定环境运行测试成为了必须解决的问题。`pytest`,作为一个强大的Python测试框架,通过其灵活的标记(markers)系统,为这些需求提供了优雅的解决方案。本章将深入探讨`pytest`的标记功能,包括如何查找测试策略、如何标记测试函数以及这些功能在Selenium自动化测试中的实际应用。 #### 一、pytest标记基础 在`pytest`中,标记(markers)是用于对测试函数或测试类进行标记的装饰器,它们不改变测试的执行逻辑,但允许测试框架和测试作者以编程方式识别和管理这些测试。使用标记,你可以轻松地对测试进行分组、选择性地执行测试集,甚至根据条件跳过测试。 ##### 1.1 标记的注册与使用 在`pytest`中,你可以使用内置的标记,如`@pytest.mark.skip`、`@pytest.mark.xfail`等,也可以自定义标记。自定义标记需要先注册,然后在测试函数或测试类上应用。 ```python # 自定义标记注册 import pytest # 注册一个名为'slow'的标记 pytest.mark.slow = pytest.mark.slow # 使用自定义标记 @pytest.mark.slow def test_example(): pass ``` 注意:在`pytest`的较新版本中,自定义标记的注册通常不需要显式调用`pytest.mark.slow = pytest.mark.slow`这样的语句,直接在测试函数上使用`@pytest.mark.slow`即可,因为`pytest`会自动识别并处理未知的标记作为自定义标记。 ##### 1.2 查找与筛选标记的测试 `pytest`提供了多种方式来查找和筛选具有特定标记的测试。通过命令行选项,你可以轻松选择性地运行或跳过特定标记的测试。 - 运行带有特定标记的所有测试: ```bash pytest -m slow ``` 这条命令会运行所有被标记为`slow`的测试。 - 跳过带有特定标记的测试: 虽然`pytest`没有直接的命令行选项来“跳过”带有特定标记的测试,但你可以通过结合使用`pytest.mark.skipif`和其他条件来实现类似的效果。 - 列出所有标记: ```bash pytest --markers ``` 此命令将列出所有可用的标记(包括内置的和自定义的),帮助你了解可用的选项。 #### 二、查找测试策略与标记的应用 在Selenium自动化测试中,测试策略的选择和测试的组织方式直接影响到测试的有效性和效率。通过使用`pytest`的标记系统,你可以更加灵活地实现这些策略。 ##### 2.1 按环境分类测试 在自动化测试中,经常需要根据不同的运行环境(如开发环境、测试环境、生产环境)来执行不同的测试集。通过为测试函数添加相应的环境标记,可以很容易地实现这一点。 ```python @pytest.mark.env('dev') def test_dev_only(): # 仅在开发环境中运行的测试 pass @pytest.mark.env('prod') def test_prod_only(): # 仅在生产环境中需要运行的测试 pass # 运行开发环境的测试 pytest -m env=dev ``` 注意:在上面的例子中,我们尝试使用`pytest`的标记系统来直接实现环境过滤,但`pytest`的标记系统并不直接支持带参数的标记(如`@pytest.mark.env('dev')`)。一种解决方案是使用`pytest.mark.parametrize`结合自定义标记函数,或者简单地通过字符串匹配(如`pytest -k 'env_dev'`,假设你在测试函数名或文档字符串中包含了`env_dev`这样的标识)来实现。 ##### 2.2 优先级标记 在大型测试套件中,有时需要优先运行某些关键测试。通过为这些测试添加优先级标记,可以在需要时快速执行它们。 ```python @pytest.mark.priority(1) def test_high_priority(): # 高优先级的测试 pass # 注意:这里的`priority`不是`pytest`内置的标记,需要自定义 # 自定义priority标记可能需要通过插件或装饰器函数来实现 ``` 由于`pytest`不直接支持带参数的标记,实现优先级标记的一种方法是编写一个自定义的装饰器函数,该函数内部使用`pytest.mark`来标记测试,并可能通过某种方式(如测试收集阶段的钩子)来识别和执行这些测试。 #### 三、高级应用与最佳实践 ##### 3.1 结合Selenium的标记使用 在Selenium自动化测试中,标记的应用可以更加广泛。例如,你可以为测试函数添加浏览器类型的标记,以便在不同的浏览器上运行相同的测试集。 ```python @pytest.mark.browser('chrome') def test_in_chrome(): # 在Chrome浏览器中运行的测试 pass @pytest.mark.browser('firefox') def test_in_firefox(): # 在Firefox浏览器中运行的测试 pass # 运行所有Chrome浏览器测试 pytest -m browser=chrome ``` 同样,这里的`@pytest.mark.browser`也需要自定义实现,因为`pytest`的标记系统不支持直接带参数的标记。 ##### 3.2 标记与测试参数化 `pytest`的`parametrize`功能允许你对测试函数进行参数化,而标记可以与参数化结合使用,以提供更加强大和灵活的测试策略。 ```python import pytest @pytest.mark.parametrize("input,expected", [ (1, 2), (2, 3), pytest.param(3, 4, marks=pytest.mark.slow), # 慢测试 ]) def test_increment(input, expected): assert input + 1 == expected # 单独运行慢测试 pytest -m slow ``` 在Selenium测试中,你可以将不同的测试数据、浏览器配置或测试场景作为参数传递给测试函数,并结合标记来管理这些测试的执行。 ##### 3.3 最佳实践 - **明确标记目的**:在添加标记时,确保每个标记都有清晰的目的和用途,避免过度使用或滥用标记。 - **文档化标记**:在项目的文档或代码注释中记录每个标记的含义和用途,以便团队成员理解和使用。 - **合理使用参数化**:当测试逻辑相同但输入数据或配置不同时,优先考虑使用`parametrize`而不是为每个变体创建单独的测试函数。 - **考虑测试套件的可维护性**:随着测试套件的增长,合理组织和管理测试变得尤为重要。利用`pytest`的目录结构、命名约定和标记系统来保持测试的可维护性。 #### 结语 `pytest`的标记系统为Selenium自动化测试提供了强大的组织和管理能力。通过合理使用标记,你可以更加灵活地定义测试策略、选择性地执行测试集,并轻松地应对不同环境和场景下的测试需求。在实际应用中,建议结合项目的具体需求和团队的工作流程来制定合适的测试策略,并充分利用`pytest`提供的各种功能和工具来优化测试过程。
上一篇:
pytest框架简介:pytest安装、用例编写规则、执行用例
下一篇:
pytest参数化处理:使用参数化装饰器、解析列表、元组、字典等数据
该分类下的相关小册推荐:
Python数据分析与挖掘实战(下)
Python合辑10-函数
Python机器学习实战
Python高并发编程与实战
Python合辑3-字符串用法深度总结
剑指Python(磨刀不误砍柴工)
剑指Python(万变不离其宗)
Python合辑14-面向对象编程案例(下)
Python编程轻松进阶(五)
Python神经网络入门与实践
Python合辑7-集合、列表与元组
Python合辑13-面向对象编程案例(上)