ngnix配置打印请求入参和出参消息

上一篇 / 下一篇  2019-07-12 17:44:28 / 个人分类:自动化测试

背景:由于自动化接口测试过程,频繁面临着接口发生变更,目前测试人力根本无法投入去及时处理,因为需要考虑一种便捷的方式,能快速的自动更新报文,甚至能自动的生成自动化测试用例,这个过程中的关键是要把手工触发的请求报文和响应报文抓取下来分析,这是核心。因此考虑通过nginx来拦截消息,通过解析日志吧信息存入数据库,再进行二次分析。

ngnix默认是不支持打印响应报文的,因此需要安装依赖组件,步骤如下:


备注:ngnix的版本必须要大于nginx-1.11.8,低于这个版本打印出来日志的中文是16进制信息,无法处理。

#下载安装包
cd /data/webusr01/nginx/hyh-package
wget https://codeload.github.com/openresty/lua-nginx-module/tar.gz/v0.10.15
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
wget https://nginx.org/download/nginx-1.11.13.tar.gz
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
#解压安装包
tar zxf lua-nginx-module-0.10.15.tar.gz 
tar zxf LuaJIT-2.0.5.tar.gz 
tar zxf nginx-1.11.13.tar.gz 
tar zxf ngx_devel_kit.v0.3.0.tar.gz

#编译部署  --这里要用root权限,所以先切换root用户
cd LuaJIT-2.0.5/
make && make install
chmod -R 777 /usr/local/share/luajit-2.0.5

#打开文件
vi /etc/profile 增加如下配置
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH


说明:原来的nginx已经安装,本次主要是要升级nginx的编译包,因此直接在下载下来包编译make,不make install

cd /data/webusr01/nginx/hyh-package/nginx-1.11.13
 ./configure  --prefix=/data/webusr01/nginx --add-module=/data/webusr01/nginx/hyh-package/ngx_devel_kit-0.3.0 --add-module=/data/webusr01/nginx/hyh-package/lua-nginx-module-0.10.15
make

#执行完后,把编译出来的nginx替换到原来的nginx
cd /data/webusr01/nginx/sbin
mv nginx nginx.bak
cp /data/webusr01/nginx/hyh-package/nginx-1.11.13/objs/nginx ./


###到这里依赖的包算是完成了,接下里修改配置
cd /data/webusr01/nginx/conf
cp nginx.conf  nginx.conf.bak #先备份下,避免改坏了
vi nginx.conf  
--1、修改日志打印格式
    log_format  main escape=json '[REMOTE_ADDR]:$remote_addr--[REMOTE_USER]:$remote_user--[TIME_LOCAL]:$time_local--[REQUEST]:$request--[HTTP_HOST]:
 $http_host'
                      '--[STATUS]:$status--[BODY_TYPES_SENT]:$body_bytes_sent--[HTTP_REFERER]:$http_referer'
                      '--[HTTP_USER_AGENT]:$http_user_agent--[BODY_BYTES_SENT]:$body_bytes_sent--[HTTP_X_FORWARDED_FOR]:$http_x_forwarded_for'
                      '--[UPSTREAM_ADDR]:$upstream_addr--[REQUEST_TIME]:$request_time--[UPSTREAM_STATUS]:$upstream_status--[REQUEST_BODY]:$request_b
ody'
                      '--[RESP_BODY]:$resp_body--[RESP_HEADER]:$resp_header'
                      '--[UPSTREAM_CACHE_STATUS]:$upstream_cache_status--[UPSTREAM_RESPONSE_TIME]:$upstream_response_time';
 
2、在server配置下添加:

        set $resp_header "";
        header_filter_by_lua '
            local h = ngx.resp.get_headers()
            for k, v in pairs(h) do
            ngx.var.resp_header=ngx.var.resp_header..k..": "..v
            end
        ';

        lua_need_request_body on;

        set $resp_body "";
        body_filter_by_lua '
            local resp_body = string.sub(ngx.arg[1], 1, 1000)
            ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
            if ngx.arg[2] then
                ngx.var.resp_body = ngx.ctx.buffered
            end
        ';         

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar