* Initial impl * Update framework versions testing from jm to wrk * Add hyperfoil * Add hyperfoil read me
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local require = require
 | |
| local json = require "json"
 | |
| 
 | |
| math.randomseed(os.clock()*100000000000)
 | |
| 
 | |
| function ParseCSVLine(line,sep)
 | |
| 	local res = {}
 | |
| 	local pos = 1
 | |
| 	sep = sep or ','
 | |
| 	while true do 
 | |
| 		local c = string.sub(line,pos,pos)
 | |
| 		if (c == "") then break end
 | |
| 		if (c == '"') then
 | |
| 			local txt = ""
 | |
| 			repeat
 | |
| 				local startp,endp = string.find(line,'^%b""',pos)
 | |
| 				txt = txt..string.sub(line,startp+1,endp-1)
 | |
| 				pos = endp + 1
 | |
| 				c = string.sub(line,pos,pos) 
 | |
| 				if (c == '"') then txt = txt..'"' end
 | |
| 			until (c ~= '"')
 | |
| 			table.insert(res,txt)
 | |
| 			assert(c == sep or c == "")
 | |
| 			pos = pos + 1
 | |
| 		else	
 | |
| 			local startp,endp = string.find(line,sep,pos)
 | |
| 			if (startp) then 
 | |
| 				table.insert(res,string.sub(line,pos,startp-1))
 | |
| 				pos = endp + 1
 | |
| 			else
 | |
| 				table.insert(res,string.sub(line,pos))
 | |
| 				break
 | |
| 			end 
 | |
| 		end
 | |
| 	end
 | |
| 	return res
 | |
| end
 | |
| 
 | |
| loadFile = function() 
 | |
|     local filename = "cities.csv"
 | |
| 
 | |
|     local data = {}
 | |
|     local count = 0
 | |
|     local sep = ","
 | |
| 
 | |
|     for line in io.lines(filename) do
 | |
|         local values = ParseCSVLine(line,sep)
 | |
|         data[count + 1] = values[1]
 | |
|         count = count + 1
 | |
|     end
 | |
| 
 | |
|     return data
 | |
| end 
 | |
| 
 | |
| local data = loadFile()
 | |
| 
 | |
| local urlencode = function (str)
 | |
| 	str = string.gsub (str, "([^0-9a-zA-Z !'()*._~-])", -- locale independent
 | |
| 			function (c) return string.format ("%%%02X", string.byte(c)) end)
 | |
| 	str = string.gsub (str, " ", "+")
 | |
| 	return str
 | |
| end
 | |
| 
 | |
| request = function()    
 | |
|     url_path = "/zipcode/by_city?city=" .. urlencode(data[math.random(1, 136)])
 | |
| 
 | |
|     local headers = { ["Content-Type"] = "application/json;charset=UTF-8" }
 | |
| 
 | |
|    return wrk.format("GET", url_path, headers, nil)
 | |
| end
 | |
| 
 | |
| done = function(summary, latency, requests)
 | |
|     io.write("--------------GET CITY ZIPCODES----------------\n")
 | |
|     for _, p in pairs({ 50, 90, 99, 99.999 }) do
 | |
|         n = latency:percentile(p)
 | |
|         io.write(string.format("%g%%,%d\n", p, n))
 | |
|     end
 | |
| 	io.write("-----------------------------------------------\n\n")
 | |
| end |