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原文轉自:http://www.anti-gravitydesign.com