本文记录了借助Nginx高并发能力,实现接口mock并发压测。Nginx conf压测配置如下:
worker_processes 4;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr|$remote_user|[$time_local]|"$request"'
'|$status|$request_time|$body_bytes_sent|"$http_referer"'
'|"$http_user_agent"|"$http_x_forwarded_for"|$upstream_response_time|$upstream_status';
access_log logs/access.log main;
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
proxy_buffering off;
client_max_body_size 1024m;
client_header_buffer_size 500m;
large_client_header_buffers 4 4m;
underscores_in_headers on;
gzip on;
server {
listen 80;
server_name localhost;
lua_need_request_body on;
error_page 500 502 503 504 /50x.html;
location = /stats {
stub_status on;
access_log off;
allow 100.0.0.0/8;
allow 10.0.0.0/8;
deny all;
}
location = /nstats {
check_status;
access_log off;
allow 100.0.0.0/8;
allow 10.0.0.0/8;
deny all;
}
location = /50x.html {
root /app/openresty/nginx/html;
}
location / {
root /app/openresty/nginx/html;
index index.html index.htm;
}
location /outbound/sendback {
default_type text/xml;
content_by_lua_block {
local body_data = ngx.req.get_post_args();
local logistics_interface = body_data["logistics_interface"]
if string.find(logistics_interface,"UPLOAD") then
local TransactionId = {}
local SaleOrdersTemp = '';
for match in logistics_interface:gmatch('<TransactionId>[^<]+</TransactionId>') do
--ngx.log(ngx.INFO, " match :",match)
SaleOrdersTemp = SaleOrdersTemp..'<SaleOrder>'..match..'<Result>1</Result><Note></Note></SaleOrder>'
table.insert(TransactionId,match)
end
local response = '<Response service="UPLOAD" lang="zh-CN"><Head>OK</Head><Body><UploadSaleOrderResponse><AcceptedTransactions>'..#TransactionId..'</AcceptedTransactions><RejectedTransactions>0</RejectedTransactions><Message></Message><SaleOrders>'..SaleOrdersTemp..'</SaleOrders></UploadSaleOrderResponse></Body></Response>';
--ngx.log(ngx.INFO, " responsez :",response)
ngx.say(response)
--ngx.log(ngx.INFO, " responsez :",response)
end
}
}
location /msc/waybillNo/genwaybills {
default_type application/json;
content_by_lua_block {
local cjson = require("cjson")
local body_data = ngx.req.get_body_data();
local json_body_data = cjson.decode(body_data);
for key, value in pairs(json_body_data) do
if key == "waybillNo" then
local postBodyWaybillNo = value;
local response = '{\"ret\":\"0\",\"msg\":\"SUCCESS\",\"data\":{\"waybillNo\":\"postBodyWaybillNo\"}}';
local responsez = string.gsub(response,"postBodyWaybillNo",postBodyWaybillNo)
ngx.say(responsez)
end
end
}
}
}
}