Jason在做web service自动化测试平台的时候遇到ajax传回的数据,rails中无法利用 Ruby Net::HTTP post正确传值,这里将解决方案做下memory。
Problem:
params1["a"] = ['int','int']
params1["b"] = ['string','string']
uri = URI.parse(“http://XX.XX.XX.XX/invoke.json”)
res = Net::HTTP.post_form(uri, params1)
传值出现 b=stringstring&a=intint的情况。
Reason:
察看NET::HTTP发现 post_form最终调用的 set_form_data 的问题。
Solution:
修改代码增加对子value的判断
def set_form_data(request, params, sep = ‘&’)
request.body = params.map {|k,v|
if v.instance_of?(Array)
v.map {|e| “#{urlencode(k.to_s)}=#{urlencode(e.to_s)}”}.join(sep)
else
“#{urlencode(k.to_s)}=#{urlencode(v.to_s)}”
end
}.join(sep)
request.content_type = ‘application/x-www-form-urlencoded’
end
def urlencode(str)
str.gsub(/[^a-zA-Z0-9_\.\-]/n) {|s| sprintf(‘%%%02x’, s[0]) }
end
自动化测试优化的路还很长,walking on