如何使用Ruby RSpec实现Swagger API的Token授权测试架构搭建
RSpec + HTTParty 接口测试认证架构实现方案
核心实现逻辑
你只需要在RSpec全局前置钩子中调用Swagger定义的登录接口获取认证密钥,再将密钥配置为HTTParty的全局默认请求参数/请求头,后续所有接口请求会自动携带认证信息,无需每个用例重复编写登录逻辑。
第一步:修复现有配置代码的语法问题
你当前的RSpec.configure块中自定义的HttParty类缺少结束标识,先修正该问题再添加认证逻辑。
第二步:添加全局认证逻辑
修改后的配置代码如下:
require 'httparty' RSpec.configure do |config| config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = true end config.mock_with :rspec do |mocks| mocks.verify_partial_doubles = true end config.shared_context_metadata_behavior = :apply_to_host_groups config.color_mode = true # 所有测试用例执行前运行一次,获取全局通用token config.before(:suite) do class HttParty include HTTParty base_uri 'https://testtesttestxxxxx/' # 配置默认请求格式,根据你接口要求调整,比如json/form headers 'Content-Type' => 'application/json' end # 调用登录接口获取认证密钥,替换为你实际的登录路径、请求参数 login_response = HttParty.post( '/api/auth/login', # 替换为你的Swagger中登录接口的实际路径 body: { username: ENV['TEST_USER'] || '测试账号', password: ENV['TEST_PWD'] || '测试密码' }.to_json ) # 解析返回的认证密钥,替换为你接口实际返回的token字段名 auth_token = login_response.parsed_response['token'] # 将token添加到全局默认请求头(如果你的接口要求token放在header的Authorization字段,按下面写) HttParty.default_options[:headers]['Authorization'] = "Bearer #{auth_token}" # 如果你的接口要求token作为query参数传递,用下面的写法代替上面的header配置 # HttParty.default_params[:token] = auth_token end end
第三步:测试用例无需额外修改即可自动带认证
你原来的接口用例不需要做任何调整,发送请求时会自动携带配置好的认证信息:
require 'httparty' RSpec.describe '用户接口验证' do it '企业档案接口返回状态码200' do response = HttParty.get('/index.html') # 实际替换为你的业务接口路径 expect(response.code).to eql(200) p response.code end it '接口返回内容不为空' do response = HttParty.get('/index.html') expect(response.parsed_response).not_to be_empty end end
注意事项
- 如果认证密钥有效期较短,可以将
before(:suite)改为before(:all)或者before(:each),根据实际需要调整获取token的频率 - 不要硬编码账号密码,建议通过环境变量传入,避免敏感信息提交到代码仓库
- 建议单独编写登录接口的测试用例,覆盖密码错误、账号不存在等异常场景,不要只把登录作为前置逻辑
- 如果需要测试多角色权限,可以定义多个不同权限的token变量,在对应测试组的前置钩子中切换全局配置的token值
内容的提问来源于stack exchange,提问作者Tadeu
相关产品推荐
相关产品推荐

