新闻中心
M*en与Cucumber测试:高级标签过滤与并行执行策略

本文旨在解决m*en surefire插件在运行cucumber测试时,`cucumber.filter.tags`参数未正确生效以及如何实现"and"逻辑过滤的问题。文章将详细阐述cucumber标签表达式的用法,提供正确的m*en surefire插件配置示例,并指导如何通过命令行精确控制测试执行,同时探讨并行测试的配置方法,以优化测试效率和管理。
引言:Cucumber标签过滤与测试管理
在行为驱动开发(BDD)实践中,Cucumber框架通过标签(Tags)机制提供了灵活的测试用例组织和执行控制能力。开发者可以为不同的Feature或Scenario添加标签,例如@smoke、@regression、@WIP(Work In Progress)或特定功能模块如@Account、@OCR。这种机制使得测试团队能够根据需要选择性地运行测试,例如只运行冒烟测试、只运行特定功能模块的测试,或排除仍在开发中的测试。
然而,在使用M*en管理Cucumber项目时,经常会遇到通过命令行参数(如-Dcucumber.filter.tags)进行标签过滤不生效,或者无法实现复杂的标签逻辑(如"AND"、"OR")的问题。同时,为了提高测试执行效率,配置并行测试也是一个常见的需求。本教程将深入探讨这些问题,并提供一套行之有效的解决方案。
理解Cucumber标签表达式
现代Cucumber版本(例如7.x及以上)支持强大的标签表达式,允许用户组合使用and (&&)、or (||) 和 not (!) 逻辑操作符来构建复杂的过滤条件。
- @tag1: 匹配包含@tag1的Scenario。
- @tag1 or @tag2 / @tag1, @tag2: 匹配包含@tag1或@tag2的Scenario。逗号通常被解析为OR。
- @tag1 and @tag2: 匹配同时包含@tag1和@tag2的Scenario。
- not @tag1: 匹配不包含@tag1的Scenario。
- (@tag1 or @tag2) and not @tag3: 匹配包含@tag1或@tag2,但不包含@tag3的Scenario。
正确理解这些表达式是实现精确过滤的基础。
神笔马良
神笔马良 - AI让剧本一键成片。
320
查看详情
M*en Surefire插件配置:正确传递Cucumber参数
m*en-surefire-plugin是M*en中用于运行单元和集成测试的核心插件。要使Cucumber的标签过滤功能生效,关键在于正确配置Surefire插件,确保cucumber.filter.tags系统属性能够被Cucumber运行时正确读取。
问题分析:cucumber.filter.tags未生效的常见原因
- Surefire插件版本过旧:旧版本的Surefire可能对系统属性的传递方式或与最新Cucumber版本的兼容性存在问题。
- 系统属性传递方式不当:直接在mvn命令中使用-Dtags或-D"cucumber.filter.tags"有时可能无法被Surefire正确解析并传递给测试JVM。
- TestRunner中的@CucumberOptions冲突:如果在TestRunner类中的@CucumberOptions注解中也设置了tags属性,它可能会覆盖或与命令行参数产生冲突。
推荐的Surefire插件配置
为了解决上述问题,建议采取以下配置策略:
- 升级Surefire插件版本:推荐使用Surefire 3.0.0-M5或更高版本,以获得更好的兼容性和功能支持。
-
通过
传递参数 :这是最推荐的方式,它允许Surefire将M*en命令行中定义的属性(如-Dcucumber.filter.tags)作为系统属性传递给测试JVM。 - 配置并行执行:Surefire插件提供了灵活的并行执行选项,可以显著缩短测试运行时间。
以下是基于原始pom.xml进行优化的示例配置:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m*en.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m*en.apache.org/POM/4.0.0 http://m*en.apache.org/xsd/m*en-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>LifeboxAutomation</groupId> <artifactId>LifeboxAutomation</artifactId> <version>1.0-SNAPSHOT</version> <properties> <m*en.compiler.source>8</m*en.compiler.source> <m*en.compiler.target>8</m*en.compiler.target> <aspectj.version>1.8.10</aspectj.version> <!-- project.build.directory 通常指向 target 目录,此处保持原样但需注意其含义 --> <project.build.directory>${project.basedir}/target</project.build.directory> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 定义Surefire插件版本 --> <m*en-surefire-plugin.version>3.0.0-M7</m*en-surefire-plugin.version> <!-- 定义Cucumber版本 --> <cucumber.version>7.5.0</cucumber.version> <!-- 定义JUnit 4版本,与Cucumber-JUnit 兼容 --> <junit.version>4.13.2</junit.version> </properties> <dependencies> <!-- REST Assured --> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>4.4.0</version> </dependency> <!-- JUnit 4 - 与 Cucumber-JUnit 兼容 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- Cucumber J*a --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-j*a</artifactId> <version>${cucumber.version}</version> <scope>test</scope> </dependency> <!-- Cucumber JUnit Runner --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit</artifactId> <version>${cucumber.version}</version> <scope>test</scope> </dependency> <!-- 其他依赖保持不变,但需注意JUnit Jupiter与JUnit 4的混用 --> <!-- 原pom中包含JUnit Jupiter依赖,如果TestRunner使用@RunWith(Cucumber.class)则应移除JUnit Jupiter相关依赖, 或切换为Cucumber JUnit Platform Engine来支持JUnit 5。 此处为保持与TestRunner一致性,假定使用JUnit 4。 --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.17.0.0</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>4.3.0</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-j*a</artifactId> <version>4.0.0-rc-2</version> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest</artifactId> <version>2.2</version> </dependency> <dependency>
以上就是M*en与Cucumber测试:高级标签过滤与并行执行策略的详细内容,更多请关注其它相关文章!
# 并做
# 设备关键词排名报价
# 营口seo服务是什么平台
# 微博营销推广有什么用
# 广州自助建设网站平台
# 亳州网站推广哪家质量好
# 西秀网络营销推广
# 内部卷网站制作推广
# 绵阳seo推广报价
# 海口互联网营销推广策略
# 网站建设挣钱 知乎
# 需注意
# oracle
# 从零开始
# 时需
# 开发工具
# 如何处理
# 或与
# 数据库中
# 命令行
# 关键词
# red
# apache
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
抓大鹅无需下载版 抓大鹅秒玩版入口
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
如何在 Windows 11 中启动游戏手柄设置
生成rdflib自定义SPARQL函数:参数匹配与实践指南
小红书网页版入口链接分享 小红书官网直接进
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
CSS Box Model与弹性按钮:维持布局稳定的动画实践
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
优化HTML表单样式:解决输入框焦点跳动与元素间距问题
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
fishbowl官网免费版 fishbowl养鱼网站入口
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践
零跑汽车11月交付量达70327台 实现连续9个月正增长
押井守高度称赞《辐射4》:玩了八年都停不下来!
在Socket.IO连接中实现Access Token自动更新与动态重连
抖音怎么赚钱_抖音创作者变现方法与途径指南
Eclipse怎么运行工程_Eclipse工程运行配置说明
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
Pandas DataFrame:高效添加条件计算列
zookeeper 都有哪些功能?
知音漫客正版漫画平台_知音漫客官网账号登录
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
如何将HTML表格多行数据保存到Google Sheets
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
Go语言中的*string:深入理解字符串指针
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
优化大型XML文件解析:基于Python流式处理的内存高效方案
解决Django多数据库/多Schema环境下外键迁移问题
一加 14R 快充无反应_一加 14R 充电优化
从J*aScript对象中精确提取指定属性的教程
sublime怎么设置启动时打开的窗口_sublime会话管理与热退出
如何在Promise链中有效终止错误处理后的执行
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法


2025-12-03
浏览次数:次
返回列表
.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://m*en.apache.org/POM/4.0.0 http://m*en.apache.org/xsd/m*en-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>LifeboxAutomation</groupId>
<artifactId>LifeboxAutomation</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<m*en.compiler.source>8</m*en.compiler.source>
<m*en.compiler.target>8</m*en.compiler.target>
<aspectj.version>1.8.10</aspectj.version>
<!-- project.build.directory 通常指向 target 目录,此处保持原样但需注意其含义 -->
<project.build.directory>${project.basedir}/target</project.build.directory>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 定义Surefire插件版本 -->
<m*en-surefire-plugin.version>3.0.0-M7</m*en-surefire-plugin.version>
<!-- 定义Cucumber版本 -->
<cucumber.version>7.5.0</cucumber.version>
<!-- 定义JUnit 4版本,与Cucumber-JUnit 兼容 -->
<junit.version>4.13.2</junit.version>
</properties>
<dependencies>
<!-- REST Assured -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.4.0</version>
</dependency>
<!-- JUnit 4 - 与 Cucumber-JUnit 兼容 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Cucumber J*a -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-j*a</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<!-- Cucumber JUnit Runner -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<!-- 其他依赖保持不变,但需注意JUnit Jupiter与JUnit 4的混用 -->
<!-- 原pom中包含JUnit Jupiter依赖,如果TestRunner使用@RunWith(Cucumber.class)则应移除JUnit Jupiter相关依赖,
或切换为Cucumber JUnit Platform Engine来支持JUnit 5。
此处为保持与TestRunner一致性,假定使用JUnit 4。 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.17.0.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-j*a</artifactId>
<version>4.0.0-rc-2</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
</dependency>
<dependency>