我们在做某些接口测试的时候,服务器接受客户端请求的时候要求返回客户端相应的一些cookie信息,否则不接受请求。比如客户端的接口请求要求带上客户端的jsessionid。
因为我们的测试框架是基于selenium的,为了跟同一个平台相融合。我查询了相关资料,在selenium的源码中发现Options类里就有对cookie进行相关操作的方法。
向浏览器增加cookie:
def add_cookie(opts = {})
raise ArgumentError, "name is required" unless opts[:name]
raise ArgumentError, "value is required" unless opts[:value]
opts[:path] ||= "/"
opts[:secure] ||= false
if obj = opts.delete(:expires)
opts[:expiry] = seconds_from(obj).to_i
end
@bridge.addCookie opts
end
删除cookie:
def delete_cookie(name)
@bridge.deleteCookie name
end
def delete_all_cookies
@bridge.deleteAllCookies
end
获取cookie:
def all_cookies
@bridge.getAllCookies.map do |cookie|
{
:name => cookie["name"],
:value => cookie["value"],
:path => cookie["path"],
:domain => cookie["domain"] && strip_port(cookie["domain"]),
:expires => cookie["expiry"] && datetime_at(cookie['expiry']),
:secure => cookie["secure"]
}
end
end
而all_cookies正是我想要的方法。于是写了一个方法来获取页面cookie。
def get_jsessionid_from_web
Helper::staff_side_login_for_api_testing #提前写好的为API测试用的登陆方法
icookies=$driver.manage.all_cookies # 通过all_cookies来获取页面cookie
#循环判断得到jsessionid的值
icookies.each do |cooki|
return cooki[:value] if cooki[:name] == 'JSESSIONID'
end
end
这样通过上面的方法获得jsessionid,然后通过get加上该id值发送接口请求
RestClient.get(url,{"Cookie" =>"JSESSIONID=#{id}"})
RestClient.get是ruby的Http方法。