【问题标题】:testing REST API . session issue测试 REST API。会话问题
【发布时间】:2014-11-03 16:04:06
【问题描述】:

我在测试 REST API 时遇到问题。我尝试像下面这样进行身份验证。

 response = RestClient::Request.new(
    :method => :get,
    :url => @my_url,
    :user => @my_user,
    :password => @my_pass,
    :headers => { :accept => :json,
    :content_type => :json
    }
  ).execute

我也试过https://username:password@www.xyz.com/api/1/contacts/list

服务器端代码:

def self.list(usr, id = false)
        data = { list: [], breadcrums: [] }
        current = usr.documents.find(id) if id
        query = if !id;
            usr.documents.where(node_tree: []).only(:file_name, :mime_type, :updated_at, :id, :oauth_provider_id, :tags)
        else
            folder_id = Document.get_oauth_id(folder)
            usr.documents.where(parent_id: folder_id).only(:file_name, :mime_type, :updated_at, :id, :oauth_provider_id, :tags)
        end
        result = query.sort_by{|doc| doc.file_name.downcase}.to_a
        result.each { |v| data[:list] << v.attributes.merge({ provider: v.oauth_provider.oauth_key, id: v.id.to_s}) }
        data[:breadcrumbs] = Document.breadcrumbs(current, usr) if id
        data
    end

但问题是,当我尝试从代码进行身份验证时。引发内部服务器错误 (500) 问题可能在于,他们从会话中获取信息进行处理。我能怎么做 ?如果您不明白,请告诉我。我将尝试详细说明。如何解决?

【问题讨论】:

    标签: ruby rest testing automation


    【解决方案1】:

    使用模拟库(例如 webmock)在测试时抽象出外部服务:

    stub_request(:get, "user:pass@www.example.com")
    
    Net::HTTP.start('www.example.com') {|http|
      req = Net::HTTP::Get.new('/')
      req.basic_auth 'user', 'pass'
      http.request(req)
    }    # ===> Success
    

    【讨论】:

    • 我也是这样做的。如何从请求中获取内容?例如:当我点击 www.example.com/getdocuments/ 时,它将以 json 格式返回响应。如何从上面的代码中得到它。?
    • 也许我不够清楚,当您编写测试时,我以为您指的是实际的单元测试。在那里,您将抽象出调用实际的 api,并确保您发送正确的消息。如果您收到来自外部服务的 500 响应,那么它很可能已损坏,您应该联系提供商或使用其他服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2014-02-24
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多