如何在behave中实现多Cucumber标签适配不同用户角色的Selenium测试
Behave框架多角色标签配置与使用解决方案
标签无需预先定义,不生效的排查与补充配置
Behave 1.2.6 无需提前注册标签即可直接使用,你在feature文件添加标签后未生效,可优先排查以下问题,同时需要补充钩子逻辑实现凭据自动切换:
- 标签拼写/位置错误:检查标签名是否和命令行调用的名称完全一致,比如你当前执行命令写的是
@expert.user,和你设计的@admin.user/@nonadmin.user拼写不匹配会直接过滤掉所有用例;另外feature文件开头的标签仅作用于整个Feature下的所有场景,如果你需要给单个场景单独打标签,需要将标签写在对应Scenario/Scenario Outline关键字上方。 - 缺失标签对应逻辑:标签本身只是标记,不会自动切换登录凭据,你需要在项目根目录的
environment.py文件中添加钩子函数,读取当前用例的标签并加载对应配置,示例代码如下:
def before_scenario(context, scenario): # 匹配用户角色标签,加载对应登录凭据 if "admin.user" in scenario.tags: context.account = { "username": "你的管理员账号", "password": "你的管理员密码" } elif "nonadmin.user" in scenario.tags: context.account = { "username": "你的非管理员账号", "password": "你的非管理员密码" } # 匹配浏览器标签,指定启动的浏览器类型 if "browser.firefox" in scenario.tags: context.browser = "firefox" else: context.browser = "chrome" # 可自定义默认浏览器
后续你在编写登录步骤的代码时,直接调用context.account里的账号密码即可自动匹配对应角色的凭据。
多标签组合使用方法
你已经安装了cucumber-tag-expressions依赖,直接通过命令行参数即可实现多标签组合匹配:
- 同时匹配多个标签(交集,即同时带有所有指定标签的用例才会执行):多个标签用逗号分隔,比如执行同时带有
@admin.user和@browser.firefox的用例,命令为:behave --tags=@admin.user,@browser.firefox - 匹配任意标签(并集,即带有任意一个指定标签的用例都会执行):多次使用
--tags参数,比如执行带有@admin.user或者@nonadmin.user的用例,命令为:behave --tags=@admin.user --tags=@nonadmin.user - 排除指定标签:在标签前加
~符号,比如执行所有@admin.user标签的用例,排除带有@browser.firefox的用例,命令为:behave --tags=@admin.user --tags=~@browser.firefox
按照你的业务需求,所有30个feature文件都加上@admin.user标签,其中需要对非管理员执行的20个额外加上@nonadmin.user标签,即可满足:执行behave --tags=@admin.user跑全量管理员用例,执行behave --tags=@nonadmin.user跑20个非管理员用例的需求。
内容的提问来源于stack exchange,提问作者AutomationUser
相关产品推荐
相关产品推荐

