You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:15:04