HTTP 파이프 및 HTTPS를 지원하는 WRK 및 WRK2에서 영감을 얻은 노드로 작성된 HTTP/1.1 벤치마킹 도구. 내 상자에서 Autocannon은 wrk
및 wrk2
보다 더 많은 부하를 생성 할 수 있습니다. 자세한 내용은 제한 사항을 참조하십시오.
설치
용법
API
감사의 말
특허
npm i autocannon -g
또는 API를 사용하려는 경우 또는 종속성으로
npm i autocannon --save
Usage: autocannon [opts] URL URL is any valid HTTP or HTTPS URL. If the PORT environment variable is set, the URL can be a path. In that case 'http://localhost:$PORT/path' will be used as the URL. Available options: -c/--connections NUM The number of concurrent connections to use. default: 10. -p/--pipelining NUM The number of pipelined requests to use. default: 1. -d/--duration SEC The number of seconds to run the autocannon. default: 10. -a/--amount NUM The number of requests to make before exiting the benchmark. If set, duration is ignored. -L NUM The number of milliseconds to elapse between taking samples. This controls the sample interval, & therefore the total number of samples, which affects statistical analyses. default: 1. -S/--socketPath A path to a Unix Domain Socket or a Windows Named Pipe. A URL is still required to send the correct Host header and path. -w/--workers Number of worker threads to use to fire requests. -W/--warmup Use a warm up interval before starting sampling. This enables startup processes to finish and traffic to normalize before sampling begins use -c and -d sub args e.g. `--warmup [ -c 1 -d 3 ]` --on-port Start the command listed after -- on the command line. When it starts listening on a port, start sending requests to that port. A URL is still required to send requests to the correct path. The hostname can be omitted, `localhost` will be used by default. If the command after -- is `node <script>`, this flag is optional and assumed to be `true`. -m/--method METHOD The HTTP method to use. default: 'GET'. -t/--timeout NUM The number of seconds before timing out and resetting a connection. default: 10 -T/--title TITLE The title to place in the results for identification. -b/--body BODY The body of the request. NOTE: This option needs to be used with the '-H/--headers' option in some frameworks -F/--form FORM Upload a form (multipart/form-data). The form options can be a JSON string like '{ "field 1": { "type": "text", "value": "a text value"}, "field 2": { "type": "file", "path": "path to the file" } }' or a path to a JSON file containing the form options. When uploading a file the default filename value can be overridden by using the corresponding option: '{ "field name": { "type": "file", "path": "path to the file", "options": { "filename": "myfilename" } } }' Passing the filepath to the form can be done by using the corresponding option: '{ "field name": { "type": "file", "path": "path to the file", "options": { "filepath": "/some/path/myfilename" } } }' -i/--input FILE The body of the request. See '-b/body' for more details. -H/--headers K=V The request headers. --har FILE When provided, Autocannon will use requests from the HAR file. CAUTION: you have to specify one or more domains using URL option: only the HAR requests to the same domains will be considered. NOTE: you can still add extra headers with -H/--headers but -m/--method, -F/--form, -i/--input -b/--body will be ignored. -B/--bailout NUM The number of failures before initiating a bailout. -M/--maxConnectionRequests NUM The max number of requests to make per connection to the server. -O/--maxOverallRequests NUM The max number of requests to make overall to the server. -r/--connectionRate NUM The max number of requests to make per second from an individual connection. -R/--overallRate NUM The max number of requests to make per second from all connections. connection rate will take precedence if both are set. NOTE: if using rate limiting and a very large rate is entered which cannot be met, Autocannon will do as many requests as possible per second. Also, latency data will be corrected to compensate for the effects of the coordinated omission issue. If you are not familiar with the coordinated omission issue, you should probably read [this article](http://highscalability.com/blog/2015/10/5/your-load-generator-is-probably-lying-to-you-take-the-red-pi.html) or watch this [Gil Tene's talk](https://www.youtube.com/watch?v=lJ8ydIuPFeU) on the topic. -C/--ignoreCoordinatedOmission Ignore the coordinated omission issue when requests should be sent at a fixed rate using 'connectionRate' or 'overallRate'. NOTE: it is not recommended to enable this option. When the request rate cannot be met because the server is too slow, many request latencies might be missing and Autocannon might report a misleading latency distribution. -D/--reconnectRate NUM The number of requests to make before resetting a connections connection to the server. -n/--no-progress Don't render the progress bar. default: false. -l/--latency Print all the latency data. default: false. -I/--idReplacement Enable replacement of `[<id>]` with a randomly generated ID within the request body. e.g. `/items/[<id>]`. default: false. -j/--json Print the output as newline delimited JSON. This will cause the progress bar and results not to be rendered. default: false. -f/--forever Run the benchmark forever. Efficiently restarts the benchmark on completion. default: false. -s/--servername Server name for the SNI (Server Name Indication) TLS extension. Defaults to the hostname of the URL when it is not an IP address. -x/--excludeErrorStats Exclude error statistics (non-2xx HTTP responses) from the final latency and bytes per second averages. default: false. -E/--expectBody EXPECTED Ensure the body matches this value. If enabled, mismatches count towards bailout. Enabling this option will slow down the load testing. --renderStatusCodes Print status codes and their respective statistics. --cert Path to cert chain in pem format --key Path to private key for specified cert in pem format --ca Path to trusted ca certificates for the test. This argument accepts both a single file as well as a list of files --debug Print connection errors to stderr. -v/--version Print the version number. -V/--verbose Print the table with results. default: true. -h/--help Print this menu.
Autocannon은 다음과 같은 테이블에서 데이터를 출력합니다.
Running 10s test @ http://localhost:3000 10 connections ┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬──────────┐ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │ ├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼──────────┤ │ Latency │ 0 ms │ 0 ms │ 0 ms │ 1 ms │ 0.02 ms │ 0.16 ms │ 16.45 ms │ └─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴──────────┘ ┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ Req/Sec │ 20623 │ 20623 │ 25583 │ 26271 │ 25131.2 │ 1540.94 │ 20615 │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ Bytes/Sec │ 2.29 MB │ 2.29 MB │ 2.84 MB │ 2.92 MB │ 2.79 MB │ 171 kB │ 2.29 MB │ └───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ Req/Bytes counts sampled once per second. 251k requests in 10.05s, 27.9 MB read
두 개의 테이블이 있습니다. 하나는 요청 대기 시간에, 하나는 요청 볼륨입니다.
대기 시간 표는 요청 시간을 2.5% 백분위 수, 빠른 특이 치에서 나열합니다. 50%, 중앙값; 97.5%에서 느린 특이 치; 99%에서 가장 느린 이상치. 여기서 낮은 것은 더 빠른 것을 의미합니다.
요청 볼륨 테이블에는 전송 된 요청 수와 다운로드 된 바이트 수가 나열됩니다. 이 값은 초당 1 회 샘플링됩니다. 값이 높을수록 더 많은 요청이 처리되었음을 의미합니다. 위의 예에서는 최악의 경우 1 초 안에 2.29MB를 다운로드했습니다 (가장 느린 1%). 우리는 10 초 동안 만 실행되었으므로 10 개의 샘플 만 있으며 최소값과 1% 및 2.5% 백분위 수가 모두 동일한 샘플입니다. 기간이 길면이 숫자는 더 다릅니다.
-l
플래그를 전달할 때 세 번째 테이블에는 AutoCannon이 녹음 한 모든 대기 시간 백분위 수가 나와 있습니다.
┌────────────┬──────────────┐ │ Percentile │ Latency (ms) │ ├────────────┼──────────────┤ │ 0.001 │ 0 │ ├────────────┼──────────────┤ │ 0.01 │ 0 │ ├────────────┼──────────────┤ │ 0.1 │ 0 │ ├────────────┼──────────────┤ │ 1 │ 0 │ ├────────────┼──────────────┤ │ 2.5 │ 0 │ ├────────────┼──────────────┤ │ 10 │ 0 │ ├────────────┼──────────────┤ │ 25 │ 0 │ ├────────────┼──────────────┤ │ 50 │ 0 │ ├────────────┼──────────────┤ │ 75 │ 0 │ ├────────────┼──────────────┤ │ 90 │ 0 │ ├────────────┼──────────────┤ │ 97.5 │ 0 │ ├────────────┼──────────────┤ │ 99 │ 1 │ ├────────────┼──────────────┤ │ 99.9 │ 1 │ ├────────────┼──────────────┤ │ 99.99 │ 3 │ ├────────────┼──────────────┤ │ 99.999 │ 15 │ └────────────┴──────────────┘
많은 요청이 전송되면 더 많은 통찰력을 줄 수 있습니다.
'strict'Const Autocannon autocannon = require ('autocannon ') autocannon ({{ URL : 'http : // localhost : 3000', 연결 : 10, // 기본값 파이프 라인 : 1, // 기본값 시간 : 10 // default}, console.log) // async/awaitasync function foo () { const result = autocannon ({url : 'http : // localhost : 3000', connections : 10, // defaultpipelining : 1, // defaultduration : 10 // default }) Console.log (결과)}
작업자 모드에서 autocannon
노드 작업자 클래스 인스턴스를 사용하여 여러 스레드에서로드 테스트를 실행합니다.
amount
및 connections
매개 변수는 근로자로 나뉩니다. 중 하나의 매개 변수가 workers
수에 의해 정수를 나눌 수없는 경우, 직원 당 값은 가장 낮은 정수로 반올림되거나 1
로 설정됩니다. 다른 모든 매개 변수는 테스트가 단일 스레드 인 것처럼 노동자 당사자에게 적용됩니다.
참고 : amount
및 connections
과 달리, "전체"매개 변수, maxOverallRequests
및 overallRate
작업자마다 적용됩니다. 예를 들어, connections
4
로, workers
2
로, maxOverallRequests
10
으로 설정하면 각 작업자는 2
연결과 maxOverallRequests
10
이면 20
요청이 전송됩니다.
'strict'Const Autocannon autocannon = require ('autocannon ') autocannon ({{ URL : 'http : // localhost : 3000', 연결 : 10, // 기본값 파이프 라인 : 1, // 기본값 지속 시간 : 10, // 기본값 작업자 : 4}, console.log)
참고 : 작업자 모드에서는 function
수락하는 모든 옵션으로 절대 파일 경로를 전달해야합니다. 이는 주요 프로세스로 전달 된 함수를 복제하여 작업자에게 전달할 수 없기 때문입니다. 대신, require
파일이 필요합니다. 이 동작의 옵션은 아래 예제에 표시됩니다.
'strict'Const Autocannon autocannon = require ('autocannon ') autocannon ({{ // ... 노동자 : 4, setupclient : '/full/path/to/setup-client.js', Bubody : '/full/path/to/verify-body.js' 요청 : [{// ... onresponse : '/full/path/to/on-response.js'}, {// ... setupRequest : '/full/path/to/setup-request.js'}} ]}, console.log)
주어진 대상에 대해 AutoCannon을 시작하십시오.
opts
: AutoCannon 인스턴스의 구성 옵션. 이것은 다음 속성을 가질 수 있습니다. 필수의 .
body
: 존재하면 opts.body
무시합니다. 선택 과목
headers
: 참석하면 opts.headers
무시합니다. 선택 과목
method
: 존재하면 opts.method
무시합니다. 선택 과목
path
: 존재하면 opts.path
무시합니다. 선택 과목
setupRequest
: 원시 request
객체 (예 : request.method = 'GET'
를 돌연변이하기 위해 제공 할 수있는 Function
. request
(객체) 및 context
(개체) 매개 변수가 필요하며 수정 된 요청을 반환해야합니다. False 값을 반환하면 Autocannon은 첫 번째 요청에서 다시 시작합니다. workers
사용하는 경우 기본값을 대신 내보내는 파일 경로를 제공해야합니다 (자세한 내용은 작업자 섹션 확인) 선택 사항
onResponse
: 수신 된 응답을 처리하기 위해 제공 할 수있는 Function
. status
(번호), body
(String) context
(개체) 매개 변수 및 headers
(키-값 객체)를 취합니다. workers
사용하는 경우 기본값을 대신 내보내는 파일 경로를 제공해야합니다 (자세한 내용은 작업자 섹션 확인) 선택 사항
url
: 주어진 대상. HTTP 또는 HTTPS 일 수 있습니다. 둘 이상의 URL이 허용되지만 연결 수는 URL의 정수 배수 인 것이 좋습니다. 필수의 .
socketPath
: Unix 도메인 소켓 또는 파이프라는 창문으로가는 경로. 올바른 호스트 헤더와 경로를 보내려면 여전히 url
필요합니다. 선택 사항 .
workers
: 요청을 해고하는 데 사용할 작업자 스레드 수.
connections
: 동시 연결 수. 선택적 기본값 : 10
.
duration
: Autocannon을 실행하는 데 몇 초입니다. 시간이 걸릴 수 있습니다. 선택적 기본값 : 10
.
amount
: 테스트를 종료하기 전에 요청한 수를 명시한 Number
. 이렇게하면 지속 시간을 재정의하고 우선 순위가 예정되어 있으므로 완료해야 할 요청 수가 완료 될 때까지 테스트가 종료되지 않습니다. 선택 사항 .
sampleInt
: 샘플을 복용하는 사이에 밀리 초의 밀리 초 수. 이는 샘플 간격을 제어하므로 통계 분석에 영향을 미치는 총 샘플 수를 제어합니다. 기본값 : 1.
timeout
: 이전 응답을 기다리는 몇 초입니다. 선택적 기본값 : 10
.
pipelining
: 각 연결에 대한 파이프 라인 요청 수. 1보다 클 때 Client
API가 던지게됩니다. 선택 사항 기본값 : 1
.
bailout
:이 인스턴스가 보석이 나오기 전에 서버에 요청을 할 때 오류 수의 임계 값. 이 인스턴스는 지금까지 모든 결과를 가져와 결과로 집계합니다. 여기에 전달되지 않은 경우 인스턴스는 오류를 무시하고 절대 구제하지 않습니다. 선택적 기본값 : undefined
.
method
: 사용할 HTTP 방법. 선택적 default: 'GET'
.
title
: 식별 결과에 추가 할 String
. 선택적 기본값 : undefined
.
body
: 요청 본문을 포함하는 String
또는 Buffer
. 무작위로 생성 된 ID를 삽입 해야하는 [<id>]
포함하여 하나 이상의 무작위로 생성 된 ID를 본문에 삽입하십시오 (또한 IDREPARESION을 true로 설정해야 함). 이것은 하나 이상의 필드가 고유 해야하는 포스트 엔드 포인트 테스트에 유용 할 수 있습니다. 빈 몸을 위해 정의되지 않은 채로 두십시오. 선택적 기본값 : undefined
.
form
: 멀티 파트/양식 데이터 옵션이 포함 된 String
또는 Object
또는 이들이 포함 된 JSON 파일의 경로
headers
: 요청의 헤더가 포함 된 Object
. 선택적 기본값 : {}
.
initialContext
: 컨텍스트를 초기화하려는 객체. 컨텍스트 초기화의 예를 확인하십시오. 선택 과목
setupClient
: 각 연결이 이루어질 수있는 Client
객체를 전달하는 Function
. 아래에 표시된 API를 사용하여 각 개별 연결 헤더 및 본문을 사용자 정의하는 데 사용할 수 있습니다. 이 기능에서 클라이언트에 대한 변경 사항은 기본 body
와 여기에 전달되는 headers
보다 우선합니다. 샘플 폴더에는 이것의 예가 있습니다. 선택적 기본값 : function noop () {}
. workers
사용하는 경우 기본값을 대신 내보내는 파일 경로를 제공해야합니다 (자세한 내용은 작업자 섹션을 확인하십시오).
verifyBody
: 완료된 각 요청에 대해 응답 본문이 전달되는 Function
. verifyBody
기능이 진실한 값을 반환하지 않는 각 요청은 mismatches
로 계산됩니다. 이 기능은 expectBody
보다 우선합니다. 샘플 폴더에는 이것의 예가 있습니다. workers
사용하는 경우 기본값을 내보내는 파일 경로를 제공해야합니다 (자세한 내용은 작업자 섹션을 확인하십시오).
maxConnectionRequests
: 연결 당 최대 요청을하는 Number
. 둘 다 설정되면 amount
우선합니다. 선택 과목
maxOverallRequests
: MAX 요청을 전반적으로 요구하는 Number
. connections
보다 적을 수 없습니다. maxConnectionRequests
둘 다 설정되면 우선합니다. 선택 과목
connectionRate
: 각 개별 연결에서 초당 요청 속도를 나타내는 Number
. 기본적으로 요금 제한이 없습니다. 선택 과목
overallRate
: 모든 연결에서 초당 요청 속도를 나타내는 Number
. 둘 다 설정되면 connectionRate
우선합니다. 기본적으로 요금 제한이 없습니다. 선택 과목
ignoreCoordinatedOmission
성거 문제를 보상하기 위해 대기 시간의 수정을 비활성화하는 Boolean
. 요청 비율이 지정되지 않은 경우 ( connectionRate
또는 overallRate
) 의미가 없습니다. 선택적 기본값 : false
.
reconnectRate
: 개별 연결이 해당 요청 수를 보낼 때마다 서버에 연결을 끊고 다시 연결하는 Number
. 선택 과목
requests
: 벤치마킹 중에 작성해야 할 요청 시퀀스를 나타내는 Object
Array
. 위의 body
, headers
및 method
매개 변수와 함께 사용할 수 있습니다. 이것이 어떻게 사용되는지에 대한 예를 들어 샘플 폴더를 확인하십시오. 선택 사항 . 포함 된 객체는 이러한 속성을 가질 수 있습니다.
har
: 구문 분석 된 HAR 컨텐츠의 Object
. Autocannon은 추가 및 사용 entries.request
사용합니다. 요청 : requests
, method
, form
및 body
옵션은 무시됩니다. 참고 : 항목이 url
옵션과 동일한 도메인을 대상으로해야합니다. 선택 과목
idReplacement
: 요청 본문 내에서 [<id>]
태그를 무작위로 생성 된 ID로 교체 할 수있는 Boolean
. 요청과 함께 고유 필드를 전송할 수 있습니다. 샘플에서 찾을 수있는 프로그래밍 방식 사용의 예를 확인하십시오. 선택적 기본값 : false
forever
: done
이벤트로 결과를 방출 한 후 무기한 재시작을 다시 시작하는 Autocannon 인스턴스를 설정할 수있는 Boolean
. 인스턴스를 효율적으로 다시 시작하는 데 유용합니다. 영원히 실행을 중단하려면 SIGINT
일으키거나 인스턴스에서 .stop()
함수를 호출해야합니다. 선택적 기본값 : false
servername
: SNI의 서버 이름을 식별하는 String
(서버 이름 표시) TLS 확장자. 선택적 기본값 : IP 주소가 아닌 경우 URL의 호스트 이름으로 기본값입니다.
excludeErrorStats
: 초당 비 2xX 코드 응답 추적을 비활성화 할 수있는 Boolean
. 선택적 기본값 : false
.
expectBody
: 예상 응답 본문을 나타내는 String
. 응답 기관이 expectBody
와 같지 않은 각 요청은 mismatches
로 계산됩니다. 활성화되면 불일치가 구제 금융에 포함됩니다. 선택 과목
tlsOptions
: tls.connect
호출로 전달되는 Object
(전체 옵션 목록). 참고 : URL이 안전한 경우에만 적용됩니다.
skipAggregateResult
: 인스턴스 실행의 집계 결과 단계를 비활성화 할 수있는 Boolean
. autocannon.aggregateresult를 참조하십시오
cb
: 벤치 마크를 완료하면 호출되는 콜백. 다음 매개 변수를 취합니다. 선택 사항 .
err
: 실행 중에 오류가 발생한 경우.
results
: 실행 결과.
진행 상황을 추적하기 위해 인스턴스/이벤트 이미 터를 반환합니다 . cb
생략되면 반환 값도 약속으로 사용할 수 있습니다.
실행할 때 AutoCannon은 원하는 연결만큼 많은 Client
객체를 생성합니다. 벤치 마크가 끝날 때까지 (지속 시간 또는 총 요청 수) 병렬로 실행됩니다. 각 클라이언트는 requests
배열을 통해 루프를 제공합니다. 하나 또는 여러 요청이 포함됩니다.
사용 가능한 요청을 거치는 동안 클라이언트는 context
유지합니다. onResponse
및 setupRequest
함수에서 사용할 수있는 객체는 일부 상황 데이터를 저장하고 읽습니다. 샘플에서 request-context.js
파일을 확인하십시오.
context
객체는 첫 번째 사용 가능한 요청으로 다시 시작할 때 initialContext
(또는 {}
제공되지 않음)로 재설정됩니다. 비슷한 실행을 보장합니다.
고정 된 amount
의 요청을 동시 connections
및 overallRate
한도와 결합 할 때 AutoCannon은 모든 연결에 대한 요청과 의도 된 속도를 배포합니다. overallRate
정수 분할이 아닌 경우 AutoCannon은 일부 연결 클라이언트를 더 높고 일부는 요청/두 번째 요금 수가 적습니다. 지금 amount
이 정수 분할이라면 모든 연결 클라이언트는 동일한 수의 요청을 얻습니다. 이는 요청 속도가 높은 클라이언트가 다른 것보다 일찍 완료되므로 인식 된 요청 속도가 감소 함을 의미합니다.
예 : connections = 10, overallRate = 17, amount = 5000
프로그래밍 방식으로 Autocannon의 진행 상황을 추적하십시오.
instance
: Autocannon의 인스턴스. 필수의 .
opts
: 추적을위한 구성 옵션. 이것은 다음 속성을 가질 수 있습니다. 선택 사항 .
outputStream
: 출력 스트림. 기본값 : process.stderr
.
renderProgressBar
: 진행률 표시 줄을 렌더링 할 수있는 진실한 값. 기본값 : true
.
renderResultsTable
: 결과 테이블의 렌더링을 가능하게하는 진실한 값. 기본값 : true
.
renderLatencyTable
: 고급 대기 시간 테이블의 렌더링을 가능하게하는 진실한 값. 기본값 : false
.
progressBarString
: 진행 상황 표시 출력의 형식을 정의하는 string
. 진행률 막대 모듈에 대한 유효한 입력이어야합니다. 기본값 : 'running [:bar] :percent'
.
완료시 결과 테이블을 인쇄하는 예 :
'strict'Const Autocannon autocannon = require ('autocannon ') const instance = autocannon ({{{ URL : 'http : // localhost : 3000'}, console.log) // 이것은 ctrl-cprocess.once ( 'sigint', () => {인스턴스를 죽이는 데 사용됩니다. instance.stop ()}) // render render render renderautocannon.track (instance, {renderprogressbar : false})
이 예제를 확인하여 사용중인 상태에서도 확인하십시오.
결과 테이블이 포함 된 텍스트 문자열을 반환합니다.
resultObject
: autocannon의 결과 객체. 필수의 .
opts
: 테이블을 생성하기위한 구성 옵션. 여기에는 다음 속성이 포함될 수 있습니다. 선택 사항 .
outputStream
: 출력이 지시되는 스트림. 주로 터미널이 색상을 지원하는지 확인하는 데 사용됩니다. 기본값 : process.stderr
.
renderResultsTable
: 결과 테이블의 생성을 가능하게하는 진실한 값. 기본값 : true
.
renderLatencyTable
: 대기 시간 테이블의 생성을 가능하게하는 진실한 값. 기본값 : false
.
예:
"strict use"; const {stdout} = require ( "node : process"); const autocannon = require ( "autocannon"); function print (result) { stdout.write (autocannon.printresult (result));} autocannon ({url : "http : // localhost : 3000"}, (err, result) => print (result));
Autocannon 인스턴스가 skipAggregateResult
옵션으로 실행되는 하나 이상의 AutoCannon 인스턴스의 결과를 집계하십시오.
이것은 고급 사용 사례로 여러 시스템에서 Autocannon을 사용하여로드 테스트를 실행할 수 있으므로 결과를 나중에 집계하는 것을 연기해야합니다.
results
: skipAggregateResult
옵션이 true로 설정된 인스턴스가 실행되는 Autocannon 인스턴스 결과 배열. 필수의 .
opts
: 이것은 메인 autocannon API로 전달할 옵션의 하위 집합이므로 인스턴스를 실행하는 데 사용되는 것과 동일한 옵션 객체를 사용할 수 있습니다. 옵션에 대한 전체 설명은 Autocannon을 참조하십시오. 필수의 .
url
: 필수
title
: 선택적 기본값 : undefined
socketPath
: 선택 사항
connections
: 선택적 기본값 : 10
.
sampleInt
: 선택적 기본값 : 1
pipelining
: 선택적 기본값 : 1
workers
: 선택적 기본값 : undefined
Autocannon 인스턴스는 EventEmitter
이므로 여러 이벤트가 발생합니다. 아래는 다음과 같습니다.
start
: Autocannon 인스턴스에서 모든 것이 설정되어 시작되면 방출됩니다. 인스턴스를 영원히 실행하는 경우에 유용합니다.
tick
: 매 초마다 방출 된이 오토 캐논은 벤치 마크를 실행하고 있습니다. track
함수에서 사용되는 통계 등을 표시하는 데 유용합니다. tick
이벤트는 counter
및 bytes
값을 포함하는 객체를 전파하며, 이는 확장 보고서에 사용할 수 있습니다.
done
: Autocannon이 벤치 마크를 완료 할 때 방출됩니다. 콜백에 대한 인수로 results
전달합니다.
response
: Autocannons HTTP-Client가 서버로부터 HTTP 응답을받을 때 방출됩니다. 이것은 다음과 같은 주장을 콜백에 전달합니다.
client
: http-client
자체. 클라이언트가 서버로 보내는 헤더와 본문을 수정하는 데 사용할 수 있습니다. 아래 API.
statusCode
: 응답의 HTTP 상태 코드.
resBytes
: 응답 바이트 길이.
responseTime
: 요청을 시작한 후 응답을받는 데 걸리는 시간.
reqError
: 요청 오류의 경우 방출됩니다. 예를 들어 타임 아웃.
error
: Autocannon의 설정 단계에서 오류가있는 경우 방출됩니다.
결과 객체가 done
되어 autocannon()
콜백에 전달 된 결과 객체에는 이러한 속성이 있습니다.
title
: title
옵션의 값은 autocannon()
로 전달됩니다.
url
: 타겟팅 된 URL.
socketPath
: 대상이거나 undefined
파이프라는 유닉스 도메인 소켓 또는 창문.
requests
: 초당 전송 된 요청 수에 대한 통계가 포함 된 히스토그램 객체.
latency
: 응답 대기 시간에 대한 통계가 포함 된 히스토그램 객체.
throughput
: 초당 응답 데이터 처리량에 대한 통계가 포함 된 히스토그램 객체.
duration
: 테스트가 몇 초 만에 걸리는 시간.
errors
: 발생한 연결 오류 수 (시간 초과 포함).
timeouts
: 발생한 연결 시간 초과 수.
mismatches
: 신체가 불일치 한 요청 수.
start
: 테스트가 시작될 때를 나타내는 날짜 개체.
finish
: 테스트가 끝났을 때를 나타내는 날짜 개체.
connections
: 사용 된 연결 양 ( opts.connections
의 값).
pipelining
: 연결 당 사용되는 파이프 라인 요청 수 ( opts.pipelining
의 값).
non2xx
: 수신 된 비 2xx 응답 상태 코드 수.
resets
: setupRequest
Falsey 값을 반환하여 요청 파이프 라인이 재설정되었는지 몇 번이나 재설정되었습니다.
statusCodeStats
: 상태 코드 당 요청 카운터 (예 { "200": { "count": "500" } }
)
requests
, latency
및 throughput
에 대한 히스토그램 객체는 HDR-Histogram-Percentiles-OBJ 객체 이며이 모양을 갖습니다.
min
:이 통계의 가장 낮은 값.
max
:이 통계의 가장 높은 값입니다.
average
: 평균 (평균) 값.
stddev
: 표준 편차.
p*
:이 통계의 xxth 백분위 수 값. 백분위 수 특성은 p2_5
, p50
, p75
, p90
, p97_5
, p99
, p99_9
, p99_99
, p99_999
입니다.
Client
API 이 객체는 autocannon 인스턴스의 setupClient
함수와 response
이벤트의 첫 번째 매개 변수로 전달됩니다. 이를 사용하여 벤치마킹 중에 보내는 요청을 수정할 수 있습니다. 이것은 또한 이벤트와 그 매개 변수가 아래에 나열된 EventEmitter
입니다.
client.setHeaders(headers)
: 요청의 헤더를 수정하는 데 사용됩니다.이 클라이언트 반복자는 현재 켜져 있습니다. headers
헤더를 제거하려는 경우 Object
이거나 정의되지 undefined
합니다.
client.setBody(body)
: 요청 본문을 수정하는 데 사용됩니다.이 클라이언트 반복자는 현재 켜져 있습니다. body
String
이나 Buffer
이거나 신체를 제거하려면 정의되지 undefined
.
client.setHeadersAndBody(headers, body)
:이 클라이언트 반복자가 현재 켜져있는 헤더와 본문을 수정하는 데 사용됩니다. headers
와 body
위와 같은 형태를 취해야합니다.
client.setRequest(request)
:이 클라이언트 반복기가 현재 켜져있는 전체 요청을 수정하는 데 사용됩니다. 속성으로 headers
, body
, method
또는 path
가질 수 있습니다. 값이 생성 될 때 Autocannon 인스턴스로 전달 된 값에 대한 기본값. Note: call this when modifying multiple request values for faster encoding
client.setRequests(newRequests)
: 시작시 인스턴스로 전달 된 전체 요청 배열을 덮어 쓰는 데 사용됩니다. Note: call this when modifying multiple requests for faster encoding
Client
이벤트 Client
방출 할 수있는 이벤트는 여기에 나와 있습니다.
headers
:이 클라이언트로부터 보낸 요청이 답장의 헤더를 받았을 때 방출됩니다. 이것은 매개 변수로 Object
받았습니다.
body
:이 클라이언트로부터 보낸 요청이 답장의 본문을 받았을 때 방출됩니다. 이것은 매개 변수로 Buffer
수신합니다.
response
: 클라이언트가 요청에 대한 완료된 응답을 받았을 때 방출됩니다. 이것은 다음과 같은 주장을 전달합니다.
statusCode
: 응답의 HTTP 상태 코드.
resBytes
: 응답 바이트 길이.
responseTime
: 요청을 시작한 후 응답을받는 데 걸리는 시간.
reset
: setupRequest
로 인해 요청 파이프 라인이 재설정 될 때 배출됩니다.
Autocannon 이벤트 및 클라이언트 API 및 이벤트 사용 예 :
'strict'Const AutoCannon 사용 필요 ('AutoCannon ') const instance = autocannon ({{ URL : 'http : // localhost : 3000', setupclient : setupclient}, (err, result) => handleresults (result)) // 콜백으로 전달 된 결과는 done eventsInstance.on ( 'done', handleresults.on ( 'tick'에서 방출 된 결과와 동일합니다. , () => console.log ( 'ticking')) instance.on ( '응답', handlerPonse) 함수 setupclient (client) { client.on ( 'body', console.log) // console.log 수신시 응답 본문} function handleresponse (client, statuscode, resbytes, responsetime) { console.log (`$ {respinseTime} milliseconds`의 코드 $ {statusCode}가있는 응답이 있습니다. console.log (`응답 : $ {resbytes.toString ()}`) // 본체 또는 헤더를 업데이트합니다 Client.SetHeaders ({New : 'Header'}) client.setbody ( 'new body') client.setheadersandbody ({new : 'header'}, 'new body')} 함수 처리율 (결과) { // ...}
Autocannon은 node.js 런타임을 위해 JavaScript로 작성되었으며 CPU에 묶여 있습니다. http
모듈을 사용하여 Node.js 응용 프로그램을 벤치마킹 할 때 wrk
와 비슷한 결과를 얻는 것으로 확인했습니다. 그럼에도 불구하고, 그것은 wrk
와 같은 이진에 컴파일하는 다른 도구보다 훨씬 더 많은 CPU를 사용합니다. Autocannon은 CPU를 포화시킬 수 있습니다. 예를 들어 Autocannon 프로세스는 100%에 도달합니다.이 경우 wrk2
사용하는 것이 좋습니다.
예를 들어, 하이퍼 스레딩이있는 4 개의 코어가있는 서버에서 1000 개의 연결로 실행하는 것을 고려해 봅시다.
wrk
2 개의 스레드 (기본적으로)와 보조 스레드를 사용하여 CPU의 총 하중이 20% + 20% + 40% 인 메트릭을 수집합니다.
autocannon
80% CPU로드에서 단일 스레드를 사용합니다.
두 가지 모두 Node.js 프로세스를 약 41K REQ/SEC에서 포화하지만 autocannon
단일 스레드이기 때문에 더 빨리 포화 될 수 있습니다.
wrk
는 HTTP/1.1 파이프 라인을 지원하지 않습니다. 결과적으로 autocannon
각 열린 연결에 대해 WRK보다 서버에서 더 많은로드를 생성 할 수 있습니다.
이 프로젝트는 NearForm이 친절하게 후원했습니다.
Cosmic Fox Design이 디자인 한 로고 및 ID : https://www.behance.net/cosmicfox.
WRK와 WRK2는 큰 영감을주었습니다.
AutoCannon을 사용하거나 궁금한 점이 있으면 Giter에게 알려주십시오. Gitter
Glen Keane | github
살만 미타 | github | NPM
MIT에 따라 라이센스가 부여 된 저작권 Matteo Collina 및 기타 기고자.