Skip to content

Latest commit

 

History

History
212 lines (135 loc) · 6.52 KB

README-ZH.md

File metadata and controls

212 lines (135 loc) · 6.52 KB

cassowary

Go Report Card Build status License Go version Current Release godoc Coverage

Cassowary 是一个最新的跨平台HTTP/S负载测试工。我使用了Go编辑Cassowary,希望Developer, tester 以及sysadmins都可以便捷的进行负载测试。Cassowary受到了很多经典的开源项目的启发,比如k6, ab和httestat。


目录

功能

  • 两种测试模式:标准和自定义。在自定义模式下可以选择URL路径
  • CI友好
  • 灵活的算法: 可以向Prometheus PushGateway直接发送算法,也可以以JSON文件的形式发送算法
  • 灵活调节:可以自由选择使用哪种HTTP头字段
  • 跨平台: 一个二进制文件可同时支持Linux,Mac OSX和Windows

安装

从GitHub Releases page下载二进制文件。可以选择把Cassowary二进制文件放在PATH里,这样在任何页面写都可以运行Cassowary。

Nix/NixOS

Cassowary可以安装在Nix OS上。

使用

示例:10个用户同时向www.example.com 发送100个访问

$ ./cassowary run -u http://www.example.com -c 10 -n 100

Starting Load Test with 100 requests using 10 concurrent users

 100% |████████████████████████████████████████| [1s:0s]            1.256773616s


 TCP Connect.....................: Avg/mean=101.90ms 	Median=102.00ms	p(95)=105ms
 Server Processing...............: Avg/mean=100.18ms 	Median=100.50ms	p(95)=103ms
 Content Transfer................: Avg/mean=0.01ms 	Median=0.00ms	p(95)=0ms

Summary:
 Total Req.......................: 100
 Failed Req......................: 0
 DNS Lookup......................: 115.00ms
 Req/s...........................: 79.57

示例:访问外部文件指定的URL路径(外部文件也可以是http路径的)

$ ./cassowary run -u http://localhost:8000 -c 10 -f urlpath.txt

Starting Load Test with 3925 requests using 10 concurrent users

 100% |████████████████████████████████████████| [0s:0s]            599.467161ms


 TCP Connect.....................: Avg/mean=1.80ms 	Median=2.00ms	p(95)=3ms
 Server Processing...............: Avg/mean=0.90ms 	Median=0.00ms	p(95)=3ms
 Content Transfer................: Avg/mean=0.00ms 	Median=0.00ms	p(95)=0ms

Summary:
 Total Req.......................: 3925
 Failed Req......................: 0
 DNS Lookup......................: 2.00ms
 Req/s...........................: 6547.48

示例:导出Cassowary的Json算法

$ ./cassowary run --json-metrics --json-metrics-file=metrics.json -u http://localhost:8000 -c 125 -n 100000

Starting Load Test with 100000 requests using 125 concurrent users

[ omitted for brevity ]

如果没有指定Json算法的导出文件名,系统会使用默认文件名out.json.

示例:指定一个Prometheus Pushgateway URL,把Cassowary的Json算法导出到Prometheus

$ ./cassowary run -u http://localhost:8000 -c 125 -n 100000 -p http://pushgatway:9091

Starting Load Test with 100000 requests using 125 concurrent users

[ omitted for brevity ]

示例:添加HTTP头字段

$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 -H 'Host: www.example.com'

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

示例:关闭http-keep-alive(http-keep-alive在默认下是激活的)

$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --disable-keep-alive

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

示例:指定自定义 ca 证书

$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --ca /path/to/ca.pem

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

示例:指定客户端证书信息

$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --cert /path/to/client.pem --key /path/to/client-key.pem

Starting Load Test with 1000 requests using 10 concurrent users

[ omitted for brevity ]

以模块或者library导入Cassowary

Cassowary可以以模块的形式倒入/使用在你的Go程序。我们从使用go mod下载依赖关系开始

$ go mod init test && go get github.com/rogerwelin/cassowary/pkg/client

以下是一个简单示例:如何激活一个load test并且显示结果

package main

import (
        "encoding/json"
	"fmt"

	"github.com/rogerwelin/cassowary/pkg/client"
)

func main() {
	cass := &client.Cassowary{
		BaseURL:               "http://www.example.com",
		ConcurrencyLevel:      1,
		Requests:              10,
		DisableTerminalOutput: true,
	}
	metrics, err := cass.Coordinate()
	if err != nil {
		panic(err)
	}

        // print results
	fmt.Printf("%+v\n", metrics)

        // or print as json
	jsonMetrics, err := json.Marshal(metrics)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(jsonMetrics))
}

反馈

非常欢迎收到各种意见和建议!如果你觉得有某项功能可以更加完善,可以在Issue下发帖,最好能使用feature-request标签。如果你找到一个bug,一定要在issue下发帖告诉我,使用bugs标签。也非常欢迎Pull requests,一样的在issue下发帖,使用feature-request标签就好。