Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ gurl Public
forked from guonaihong/gurl

Gurl is a performance testing tool. The supported protocols are http, websocket, tcp. Of course, it also supports access in non-bench mode. gurl是性能测试工具,支持的协议有http, websocket,tcp。当然也支持非bench模式下的访问

License

Notifications You must be signed in to change notification settings

adrestea/gurl

Repository files navigation

gurl

Documentation

Build Status

简介

gurl 是http, websocket bench工具和curl的继承者

功能

  • 多协议支持http, websocket
  • 支持curl常用命令行选项
  • 支持压测模式,可以根据并发数和线程数,也可以根据持续时间,也可以指定每秒并发数压测http, websocket, tcp服务
  • url 支持简写
  • 支持管道模式

install

env GOPATH=`pwd` go get -u github.com/guonaihong/gurl/

gurl 主命令选项

http 子命令

guonaihong https://github.com/guonaihong/gurl
Usage of gurl:
 -A, --user-agent string
 	Send User-Agent STRING to server (default "gurl")
 -F, --form string[]
 	Specify HTTP multipart POST data (H) (default [])
 -H, --header string[]
 	Pass custom header LINE to server (H) (default [])
 -I, --input-model
 	open input mode
 -J string[]
 	Turn key:value into {"key": "value"})
 -Jfa string[]
 	Specify HTTP multipart POST json data (H)
 -Jfa-string string[]
 	Specify HTTP multipart POST json data (H)
 -O, --output-mode
 	open output mode
 -R, --input-read string
 	open input file
 -W, --output-write string
 	open output file
 -X, --request string
 	Specify request command to use
 -ac int
 	Number of multiple requests to make (default 1)
 -an int
 	Number of requests to perform (default 1)
 -bench
 	Run benchmarks test
 -c, --color
 	Color highlighting
 -connect-timeout string
 	Maximum time allowed for connection
 -conns int
 	Max open idle connections per target host (default 10000)
 -cpus int
 	Number of CPUs to use
 -d, --data string
 	HTTP POST data
 -debug
 	open debug mode
 -duration string
 	Duration of the test
 -form-string string[]
 	Specify HTTP multipart POST data (H) (default [])
 -input-fields string
 	sets the field separator (default " ")
 -l string
 	Listen mode, HTTP echo server
 -m, --merge
 	Combine the output results into the output
 -o, --output string
 	Write to FILE instead of stdout (default "stdout")
 -oflag string
 	Control the way you write(append|line|trunc)
 -q, --query string[]
 	query string
 -r, --read-stream
 	Read data from the stream
 -rate int
 	Requests per second
 -skey, --input-setkey string
 	Set a new name for the default key
 -url string
 	Specify a URL to fetch
 -v, --verbose
 	Make the operation more talkative
 -w, --write-stream
 	Write data from the stream
 -wkey, --write-key string
 	Key that can be write
-F 或 --form

设置form表单, 比如-F text=文本内容,或者-F text=@./从文件里面读取, -F 选项的语义和curl命令一样

--form-string

和-F 或--form类似,不解释@符号,原样传递到服务端

-ac

指定线程数, 开ac个线程, 发送an个请求

gurl http -an 10 -ac 2 -F text=good :1234
-an

指定次数

http 性能压测

-bench 压测模式,可以对http服务端进行压测,可以和-ac, -an, -duration, -rate 选项配合使用

 gurl http -bench -ac 25 -an 1000000 :1234
 Benchmarking 127.0.0.1 (be patient)
 Completed 100000 requests [2018年08月11日 21:58:56.143]
 Completed 200000 requests [2018年08月11日 21:59:00.374]
 Completed 300000 requests [2018年08月11日 21:59:03.703]
 Completed 400000 requests [2018年08月11日 21:59:06.559]
 Completed 500000 requests [2018年08月11日 21:59:09.201]
 Completed 600000 requests [2018年08月11日 21:59:11.757]
 Completed 700000 requests [2018年08月11日 21:59:14.218]
 Completed 800000 requests [2018年08月11日 21:59:16.639]
 Completed 900000 requests [2018年08月11日 21:59:19.061]
 Completed 1000000 requests [2018年08月11日 21:59:21.451]
 Finished 1000000 requests
 Server Software: gurl-server
 Server Hostname: 
 Server Port: 1234
 Document Path: 
 Document Length: 0 bytes
 Status Codes: 200:1000000 [code:count]
 Concurrency Level: 10
 Time taken for tests: 28.807 seconds
 Complete requests: 1000000
 Failed requests: 0
 Total transferred: 137000000 bytes
 HTML transferred: 0 bytes
 Requests per second: 34713.37 [#/sec] (mean)
 Time per request: 0.288 [ms] (mean)
 Time per request: 0.029 [ms] (mean, across all concurrent requests)
 Transfer rate: 4755.73 [Kbytes/sec] received
 Percentage of the requests served within a certain time (ms)
 50% 0.21ms
 66% 0.31ms
 75% 0.38ms
 80% 0.42ms
 90% 0.57ms
 95% 0.66ms
 98% 0.79ms
 99% 0.89ms
 100% 16.45ms
-duration

和-bench选项一起使用,可以控制压测时间,支持单位符,ms(毫秒), s(秒), m(分), h(小时), d(天), w(周), M(月), y(年) 也可以混合使用 -duration 1m10s

-connect-timeout

设置http 连接超时时间。支持单位符,ms(毫秒), s(秒), m(分), h(小时), d(天), w(周), M(月), y(年)

-rate

指定每秒写多少条

gurl http -bench -ac 25 -an 3000 -rate 3000 :1234
Benchmarking 127.0.0.1 (be patient)
 Completed 300 requests [2018年08月11日 22:02:01.625]
 Completed 600 requests [2018年08月11日 22:02:01.725]
 Completed 900 requests [2018年08月11日 22:02:01.825]
 Completed 1200 requests [2018年08月11日 22:02:01.925]
 Completed 1500 requests [2018年08月11日 22:02:02.025]
 Completed 1800 requests [2018年08月11日 22:02:02.125]
 Completed 2100 requests [2018年08月11日 22:02:02.225]
 Completed 2400 requests [2018年08月11日 22:02:02.325]
 Completed 2700 requests [2018年08月11日 22:02:02.425]
 Completed 3000 requests [2018年08月11日 22:02:02.525]
 Finished 3000 requests
Server Software: gurl-server
Server Hostname: 
Server Port: 1234
Document Path: 
Document Length: 0 bytes
Status Codes: 200:3000 [code:count]
Concurrency Level: 10
Time taken for tests: 1.000 seconds
Complete requests: 3000
Failed requests: 0
Total transferred: 411000 bytes
HTML transferred: 0 bytes
Requests per second: 3000.08 [#/sec] (mean)
Time per request: 3.333 [ms] (mean)
Time per request: 0.333 [ms] (mean, across all concurrent requests)
Transfer rate: 411.01 [Kbytes/sec] received
Percentage of the requests served within a certain time (ms)
 50% 0.17ms
 66% 0.18ms
 75% 0.18ms
 80% 0.19ms
 90% 0.21ms
 95% 0.23ms
 98% 0.26ms
 99% 0.31ms
 100% 1.34ms
-d 或 --data

发送http body数据到服务端, 支持@符号打开一个文件, 如果不接@直接把-d后面字符串发送到服务端

 gurl http -d "good" :12345
 gurl http -d "@./file" :12345
RESTful API

-J 拼装json字段到body里面 -J 后面的key和value 会被组装成json字符串发送到服务端. key:value,其中value会被解释成字符串, key:=value,value会被解决成bool或者数字或者小数

  • 普通用法
 ./gurl http -J username:admin passwd:123456 bool_val:=true int_val:=3 float_val:=0.3 -url http://127.0.0.1:12345
 {
 "bool_val": true,
 "float_val": 0.3,
 "int_val": 3,
 "passwd": "123456",
 "username": "admin"
 }
  • 嵌套用法
./gurl http -J a.b.c.d:=true -J a.b.c.e:=111 http://127.0.0.1:12345
{
 "a": {
 "b": {
 "c": {
 "d:": true,
 "e:": 111
 }
 }
 }
}
查询字符串

-q 后跟查询字符串, key=val形式

gurl http -X POST -J hello:word startTime:123 endTime:456 -url :8080/test -vc -q appkey=hello world=hello
> POST /test?appkey=hello&world=hello HTTP/1.1
> Accept: */*
> Host: 127.0.0.1:8080
> User-Agent: gurl
>
< HTTP/1.1 200 OK
< Date: 2019年5月21日 12:39:13 GMT
< Content-Length: 50
< Content-Type: text/plain; charset=utf-8
{
 "endTime": "456",
 "hello": "word",
 "startTime": "123"
}
-Jfa

向multipart字段中插入json数据

./gurl http -Jfa text=DisplayText:good text=Language:cn text2=look:me -F text=good :12345
--4361c4e6ae1b083e9e0508a7b40eb215bccd265c4bed00137cc7d112e890
Content-Disposition: form-data; name="text"
{"DisplayText":"good","Language":"cn"}
--4361c4e6ae1b083e9e0508a7b40eb215bccd265c4bed00137cc7d112e890
Content-Disposition: form-data; name="text2"
{"look":"me"}
--4361c4e6ae1b083e9e0508a7b40eb215bccd265c4bed00137cc7d112e890
Content-Disposition: form-data; name="text"
good
--4361c4e6ae1b083e9e0508a7b40eb215bccd265c4bed00137cc7d112e890--
-Jfa-string

和-Jfa语法类似,不解析@符号

-H 或者 --header

设置http 头,可以指定多个

./gurl http -H "header1:value1" -H "header2:value2" http://xxx.xxx.xxx.xxx:port
-url

设置http url的地址, 可以使用简写

-oflag

-oflag 一般和-o选项配合使用(控制写文件的行为)

  • -oflag append 默认-o的行为是新建文件然后写入,如果开启-ac -an选项,可以使用append肥所有的结果保存到一个文件中
  • -oflag line 如果服务端返回的结果,想使用换行符分隔
    小提示: -oflag 后面的命令可以组合使用 "append|line"的意思是:把服务端的输出追加到某个文本中,并用'\n'分隔符

高级主题(stream功能)

-I

打开input模式

-R

打开列表文件, 可以使用-input-fields 指定分割符,默认是空格

-skey

给默认的名字取个别名,相当于取个好听的变量名,方便后面引用

-r

从流里面读取数据

-w

结果输出到流

-merge

把输入流里面的结果和识别结果组成大的结果,写到输出流

-O

打开output模式

-wkey

控制写出的json key

|

管道符主要拼接多个gurl功能块

批量访问多个url

开5个线程访问url.list里面的url列表

cat url.list
github.com
www.baidu.com
www.qq.com
www.taobao.com
gurl http -I -R url.list -skey "url=rf.col.0" "|" -ac 5 -r -w -merge "{url}" -o "/dev/null" "|" -O -wkey "status_code"

TODO

  • 集群模式
  • GUI

websocket 子命令

命令行选项

guonaihong https://github.com/guonaihong/wsurl
Usage of gurl:
 -A, --user-agent string
 	Send User-Agent STRING to server (default "gurl")
 -H, --header string[]
 	Pass custom header LINE to server (H) (default [])
 -I, --input-model
 	open input mode
 -O, --output-mode
 	open output mode
 -R, --input-read string
 	open input file
 -W, --output-write string
 	open output file
 -ac int
 	Number of multiple requests to make (default 1)
 -an int
 	Number of requests to perform (default 1)
 -bench
 	Run benchmarks test
 -binary
 	Send binary messages instead of utf-8
 -close
 	Send close message
 -duration string
 	Duration of the test
 -fsa, --first-send-after string
 	Wait for the first time before sending
 -input-fields string
 	sets the field separator (default " ")
 -l string
 	Listen mode, websocket echo server
 -ld, --last-packet string
 	The last packet is written to the connection
 -m, --merge
 	Combine the output results into the output
 -o, --output string
 	Write to FILE instead of stdout (default "stdout")
 -p, --packet string[]
 	Data packet to be send per connection
 -r, --read-stream
 	Read data from the stream
 -rate int
 	Requests per second
 -send-rate string
 	How many bytes of data in seconds
 -skey, --input-setkey string
 	Set a new name for the default key
 -url string
 	Specify a URL to fetch
 -w, --write-stream
 	Write data from the stream
 -wkey, --write-key string
 	Key that can be write
-H 或header

设置websocket 的header和http header类似

-p 或 --packet

发送websocket body数据到服务端,支持@符号打开一个文件, 如果不接@直接把-d后面字符串发送到服务端

 wsurl -p "good" :12345
 wsurl -p "@./file" :12345
-send-rate
# 指定每多少ms发多少字节
wsurl -send-rate "8000B/250ms" -url ws://127.0.0.1:24986
-binary

默认是以text格式作为websocket消息类型, 加上-binary就以text作为消息类型

-ld

发送最后一个websocket包的内容

 wsurl -ld "good" :12345
 wsurl -ld "@./file" :12345
-url

设置websocket的url

-ac

指定线程数, 开ac个线程, 发送an个请求

wsurl -an 10 -ac 2 -F text=good :1234
-an

指定次数

-duration

和-bench选项一起使用,可以控制压测时间,支持单位符,s(秒), m(分), h(小时), d(天), w(周), M(月), y(年), ms(毫秒) 也可以混合使用 -duration 1m10s

-rate

指定每秒写多少条,目前只有打开-bench选项才起作用

-close

客户端主动发起close消息给服务端

-bench

压测模式 wsurl -bench -ac 20 -an 10000 -url :33333 -close

Connecting to to ws://127.0.0.1:33333
 Opened 1000 connections: [2018年08月23日 20:50:55.987]
 Opened 2000 connections: [2018年08月23日 20:50:56.129]
 Opened 3000 connections: [2018年08月23日 20:50:56.266]
 Opened 4000 connections: [2018年08月23日 20:50:56.409]
 Opened 5000 connections: [2018年08月23日 20:50:56.552]
 Opened 6000 connections: [2018年08月23日 20:50:56.684]
 Opened 7000 connections: [2018年08月23日 20:50:56.835]
 Opened 8000 connections: [2018年08月23日 20:50:56.098]
 Opened 9000 connections: [2018年08月23日 20:50:57.125]
 Opened 10000 connections: [2018年08月23日 20:50:57.268]
 Finished 10000 connections
Concurrency Level: 20
Time taken for tests: 1.432677765s
Connected: 10000
Disconnected: 0
Failed: 0
Total transferred: 0
Total received 0
Requests per second: 6979 [#/sec] (mean)
Time per request: 716338.883 [ms] (mean)
Time per request: 71.634 [ms] (mean, across all concurrent requests)
Transfer rate: 0.000 [Kbytes/sec] received
Percentage of the requests served within a certain time (ms)
 50% 2.00ms
 66% 2.00ms
 75% 3.00ms
 80% 3.00ms
 90% 4.00ms
 95% 6.00ms
 98% 7.00ms
 99% 9.00ms
 100% 21.00ms

高级主题(stream功能)

-I

打开input模式

-R

打开列表文件, 可以使用-input-fields 指定分割符,默认是空格

-skey

给默认的名字取个别名,相当于取个好听的变量名,方便后面引用

-r

从流里面读取数据

-w

结果输出到流

-merge

把输入流里面的结果和识别结果组成大的结果,写到输出流

-O

打开output模式

-wkey

控制写出的json key

|

管道符主要拼接多个gurl功能块

tcp, udp 子命令用法

About

Gurl is a performance testing tool. The supported protocols are http, websocket, tcp. Of course, it also supports access in non-bench mode. gurl是性能测试工具,支持的协议有http, websocket,tcp。当然也支持非bench模式下的访问

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%

AltStyle によって変換されたページ (->オリジナル) /