RESTler复现demon测试 - mac版

目前有很多关于RESTler的使用教程,但是都是基于windows系统。我用mac复现一下demon测试,结果发现整体操作对于新手来讲相当不友善。所以出个小白教程。

RESTler github:https://github.com/microsoft/restler-fuzzer

在配置环境时,有两个选项,一个是docker,一个是local。我用的是docker,local的环境安装更不友善。

Docker安装

简单些,直接运行下述命令即可(貌似需要科学上网)。详情可以参考:https://get.docker.com/

curl -fsSL https://get.docker.com | sh

Build Docker镜像

测试的时候分别需要两个容器,一个是restler,还一个是demon需要的服务器。后者为了提供测试用的API接口,运行在localhost:8888上。所以,为此要先build两者的镜像。

对于restler image,在项目的根目录下,运行下述命令:

docker build –t restler .

但是吧,我运行后,build到一半的时候报错了(错误忘记截图了)。查了一下,好像是说ARM架构上会有些问题,要在Dockerfile里做一些修改。在倒数第二行code上,applicationinsights后面,加上 --break-system-packages。最终,Dockerfile文件的内容如下:

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as builder

RUN apk add --no-cache python3 py3-pip

COPY src ./src
COPY restler ./restler
COPY build-restler.py .

RUN python3 build-restler.py --dest_dir /build

RUN python3 -m compileall -b /build/engine

FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as target

RUN apk add --no-cache python3 py3-pip
RUN pip3 install requests applicationinsights --break-system-packages

COPY --from=builder /build /RESTler

修改之后,在运行上面的build命令,即可。

对于测试的服务器,我们在项目的根目录下,先进入到demon_server目录,即cd demon_server。在build测试服务器的镜像,命令如下:

docker build –t restler_example_server . 

成功build以后可以用 docker image ls -a 命令查看结果

Run Container

首先,先把demon服务器的容器运行起来。我们对应的image为restler_example_server,所以,运行下述命令:

docker run --network host -d --rm restler_example_server

然后再把restler的容器运行起来,我们对应的image为rester,所以运行下述命令:

 docker run --network host -it -v /Users/alex/Desktop/restler-fuzzer-main:/main --rm restler /bin/sh

其中,在 -v 后面的 /Users/alex/Desktop/restler-fuzzer-main:/main前面的路径,是我项目文件夹的路径,所以大家要替换成自己的路径,在项目根目录下输入 pwd,显示的地址替换掉即可

测试命令

在上述restler的容器运行起来后,我们继续在其下面输入对应的测试命令,如:

1. Compile

RESTler/restler/Restler compile --api_spec /main/demo_server/swagger.json

2. Test

RESTler/restler/Restler test --grammar_file /Compile/grammar.py  --dictionary_file /Compile/dict.json  --settings /Compile/engine_settings.json  --no_ssl

3. Fuzz-lean

RESTler/restler/Restler fuzz-lean --grammar_file /Compile/grammar.py  --dictionary_file /Compile/dict.json  --settings /Compile/engine_settings.json  --no_ssl

4. Fuzz

RESTler/restler/Restler fuzz --grammar_file /Compile/grammar.py  --dictionary_file /Compile/dict.json  --settings /Compile/engine_settings.json  --no_ssl --time_budget 1

 注释:The new time_budget parameter is the length, in hours。

查看log文件

继续上述的容器中,运行完四条测试命令,可以看到在容器的根目录自动生成了四个对应的文件夹,分别对应Compile,Test,FuzzLean以及Fuzz。依次输入以下命令,即可把文件夹子拷贝到项目的根目录:

cp -r Compile/ main
cp -r Test/ main
cp -r FuzzLean/ main
cp -r Fuzz/ main

Done!

遇到的相关问题

Q1: 为什么两个容器要 --network host

restler会对API进行测试,但是两个容器是独立的,最开始的时候服务器的容器运行方式为:

docker run -p 8888:8888 --rm restler_example_server

因为服务器用的localhost:8888,所以起初加上 -p 8888:8888来指定端口。但是两个容器是分离的,导致restler容器不知道服务器的 localhost:8888 是什么。所以,最后在两个容器启动时,都加入 --network host 来解决这个问题。

Q2:restler容器启动时,-v后面的路径是为什么?

因为这第一步Compile的时候,加入swagger.json这个文件。所以在启动容器的时候,把整个项目的文件传入到容器中,存到容器根目录的main下,即后面的/main。

Q3:Linux系统如何操作?

我自己用上述的命令在Ubuntu上同样可以执行。但是docker安装的时候好像需要科学上网解决,因为我的服务器在欧洲,所以我当时没遇到这个问题。

如果还有任何疑问,随时提问 ~ 共勉~ !

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值