Watir/Ruby自动化测试中,如何通过Rake设置ENV环境?
当然可行!用Rake轻松切换测试环境
完全可以通过Rake实现环境切换,不用再手动修改本地的urls文件。下面给你两种实用的实现方案,你可以根据自己的习惯选择:
方案1:创建独立的环境任务(推荐)
这种方式最直观,直接通过rake prod或rake qa就能切换环境,命令清晰好记。
步骤1:修改你的Rakefile
把原来的Cucumber任务拆成基础任务和环境专属任务:
# 定义基础的Cucumber任务(作为底层依赖,不直接执行) Cucumber::Rake::Task.new(:cucumber) do |t| t.cucumber_opts = "--format pretty" # 这里可以保留你原来的Cucumber配置 end # Production环境任务:设置TARGET为Production,然后调用Cucumber task :prod do ENV['TARGET'] = 'Production' Rake::Task[:cucumber].invoke end # QA环境任务:设置TARGET为QA,然后调用Cucumber task :qa do ENV['TARGET'] = 'QA' Rake::Task[:cucumber].invoke end # 保留你原来的:all任务,比如默认跑QA环境,或者让它依次跑所有环境 task :all => :qa do # 如果想让:all跑两个环境,可以改成: # Rake::Task[:prod].invoke # Rake::Task[:qa].invoke end
步骤2:调整测试代码中的TARGET获取逻辑
把原来硬编码的TARGET = :Prod改成从环境变量读取,这样Rake设置的环境变量就能生效:
BASE_URL = { :Production => "http://prod", :QA => "http://qa" } # 从ENV获取TARGET,默认设为:QA(防止没指定环境时出错) TARGET = ENV["TARGET"] ? ENV["TARGET"].to_sym : :QA if ENV["BASE_URL"] base_url = ENV["BASE_URL"] else base_url = BASE_URL[TARGET] end
怎么用?
在命令行直接执行:
- 跑生产环境:
rake prod - 跑QA环境:
rake qa - 跑原来的:all任务:
rake all(默认跑QA,你可以根据需求修改)
方案2:带参数的通用任务
如果不想创建多个环境任务,也可以用一个接受参数的任务,灵活指定环境:
修改Rakefile
Cucumber::Rake::Task.new(:cucumber) do |t| t.cucumber_opts = "--format pretty" end # 定义带环境参数的测试任务,默认用QA环境 task :test, [:environment] do |_, args| # 处理参数,转成符号匹配BASE_URL的键 target_env = args.environment ? args.environment.to_sym : :QA ENV['TARGET'] = target_env.to_s Rake::Task[:cucumber].invoke end
怎么用?
- 跑QA环境:
rake test(默认) - 跑生产环境:
rake test[Production]
额外小技巧:直接设置BASE_URL环境变量
如果你想跳过TARGET的逻辑,也可以在Rake任务里直接给ENV["BASE_URL"]赋值,这样测试代码会优先使用这个值:
task :prod do ENV['BASE_URL'] = 'http://prod' Rake::Task[:cucumber].invoke end
这种方式不需要修改测试代码里的TARGET逻辑,直接利用你现有的if ENV["BASE_URL"]分支即可。
内容的提问来源于stack exchange,提问作者Olajide Olaolorun
相关产品推荐
相关产品推荐

