
ภาษาอังกฤษ | 中文
Cassowary เป็นเครื่องมือทดสอบโหลด HTTP/S ที่ทันสมัยและใช้งานง่าย Cassowary ดึงแรงบันดาลใจจากโครงการที่ยอดเยี่ยมเช่น K6, AB & HTTPSTAT
- 2 โหมดการทดสอบโหลด : หนึ่งมาตรฐานและโหมดสเปรดหนึ่งโหมดที่สามารถระบุเส้นทาง URL ได้จากไฟล์ (เหมาะหากคุณต้องการกดไมโครเซิร์ดพื้นฐานหลายตัว)
- CI Friendly : เหมาะอย่างยิ่งที่จะเป็นส่วนหนึ่งของขั้นตอน CI Pipeline
- ตัวชี้วัดที่ยืดหยุ่น : ตัวชี้วัด CloudWatch, Prometheus Metrics (ผลักดันตัวชี้วัดไปยัง Prometheus Pushgateway), ไฟล์ JSON
- สามารถกำหนดค่าได้ : สามารถผ่านส่วนหัว HTTP โดยพลการสามารถกำหนดค่าไคลเอนต์ HTTP
- รองรับการรับ, โพสต์, put & patch - โพสต์, ใส่และแพทช์ข้อมูลสามารถกำหนดได้ในไฟล์
- แพลตฟอร์มข้าม : ไบนารีที่สร้างไว้ล่วงหน้าหนึ่งรายการสำหรับ Linux, Mac OSX และ Windows
- นำเข้าได้ - นอกเหนือจากเครื่องมือ CLI Cassowary สามารถนำเข้าเป็นโมดูลในแอพ GO ของคุณ
- การสร้างภาพ - Cassowary สามารถส่งออกข้อมูลคำขอเป็นฮิสโตแกรมและ boxplot ในรูปแบบ PNG
คว้าไบนารีที่สร้างไว้ล่วงหน้าจากหน้า GitHub คุณสามารถเลือก Cassowary Binary ใน PATH ของคุณเพื่อให้คุณสามารถเรียกใช้ Cassowary ได้จากทุกที่ ทางเลือกที่คุณสามารถ:
คุณสามารถติดตั้ง Cassowary ได้โดยใช้ HomeBrew Package Manager บน Mac:
$ brew update && brew install cassowaryคุณสามารถเรียกใช้ Cassowary ได้โดยตรงโดยใช้ Image Docker อย่างเป็นทางการ:
$ docker run rogerw/cassowary:v0.14.1 -u http://www.example.com -c 1 -n 10เพื่อการพัฒนาในท้องถิ่น:
$ GOOS=linux go build -o dist/docker/cassowary cmd/cassowary/ * .go
$ docker build -f dist/docker/Dockerfile -t test_cassowary dist/docker
$ docker run test_cassowary -u http://www.example.com -c 1 -n 10โดยไม่มีการโต้แย้งเมื่อทำ "Docker Run" มันพิมพ์ช่วยการใช้งาน
สามารถติดตั้ง Cassowary ผ่านตัวจัดการแพ็คเกจ Nix
nix-env -iA cassowary
หากคุณต้องการเปิดตัว RPM ของคุณเองคุณสามารถใช้ไฟล์ Spec Cassowary.spec เพื่อสร้างแพ็คเกจ RPM
ตัวอย่างการรัน cassowary กับ www.example.com โดยมีการร้องขอ 100 ครั้งกระจายออกไปมากกว่า 10 คนผู้ใช้พร้อมกัน:
$ ./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ตัวอย่างการรัน cassowary ในโหมดไฟล์ slurp โดยระบุเส้นทาง URL ทั้งหมดจากไฟล์ภายนอก (ซึ่งสามารถดึงข้อมูลได้จาก HTTP หากระบุ) โดยค่าเริ่มต้น Cassowary Will โดยไม่ระบุ -N Flag ให้ทำคำขอหนึ่งครั้งต่อเส้นทางที่ระบุในไฟล์ อย่างไรก็ตามด้วยธง -n คุณสามารถระบุจำนวนคำขอที่คุณต้องการให้ Cassowary สร้างกับเส้นทาง URL เหล่านั้น ตัวอย่าง:
$ ./cassowary run -u http://localhost:8000 -c 1 -f urlpath.txt
# NOTE: from v0.10.0 and below file slurp mode had it's own command
# $ ./cassowary run-file -u http://localhost:8000 -c 1 -f urlpath.txt
Starting Load Test with 5 requests using 1 concurrent users
[ omitted ]
$ ./cassowary run -u http://localhost:8000 -c 10 -n 100 -f urlpath.txt
Starting Load Test with 100 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 Metrics ไปยังไฟล์:
$ ./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
100% | ████████████████████████████████████████ | [0s:0s] 984.9862ms
TCP Connect.....................: Avg/mean=-0.18ms Median=0.00ms p(95)=1ms
Server Processing...............: Avg/mean=0.16ms Median=0.00ms p(95)=1ms
Content Transfer................: Avg/mean=0.01ms Median=0.00ms p(95)=0ms
Summary:
Total Req.......................: 100000
Failed Req......................: 0
DNS Lookup......................: 2.00ms
Req/s...........................: 101524.27หากการตั้งค่าสถานะ
json-metrics-fileหายไปชื่อไฟล์เริ่มต้นจะout.json
หากคุณต้องการข้อมูลดิบของคำขอทั้งหมด (ในรูปแบบ CSV) คุณสามารถส่งออกได้โดยใช้ค่าสถานะ --raw-output
ชื่อไฟล์ที่ส่งออกคือ
raw.csv
ตัวอย่างการส่งออก Cassowary Metrics ไปยัง Prometheus โดยการจัดหา URL Prometheus Pushgatway:
$ ./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 ]
Cassowary สามารถส่งออกการวัดไปยัง AWS CloudWatch ได้เพียงแค่เพิ่ม -CloudWatch Flag โดยไม่มีค่า โปรดทราบว่าคุณจะต้องบอก Cassoway ว่าคุณต้องการใช้ภูมิภาคใด วิธีที่ง่ายที่สุดคือการใช้ตัวแปรสภาพแวดล้อมดังที่แสดงด้านล่าง:
$ export AWS_REGION=eu-north-1 && ./cassowary run -u http://localhost:8000 -c 125 -n 100000 --cloudwatch
Starting Load Test with 100000 requests using 125 concurrent users
[ omitted for brevity ]
จัดหาธง -histogram โดยไม่มีค่าเพื่อให้ cassowary คำนวณและส่งออกฮิสโตแกรมในรูปแบบ PNG (hist.png ใน DIR ปัจจุบัน) ตลอดระยะเวลาทั้งหมดของคำขอใน MS ตัวอย่าง:
จัดหาธง -BoxPlot โดยไม่มีค่าที่จะบอก Cassowary เพื่อสร้างการสร้างภาพข้อมูล boxplot ในรูปแบบ PNG (boxplot.png ใน DIR ปัจจุบัน) ตลอดระยะเวลาทั้งหมดของคำขอใน MS
ตัวอย่างการกดปุ่มปลายทางโพสต์ที่ข้อมูลโพสต์ JSON ถูกกำหนดไว้ในไฟล์:
$ ./cassowary run -u http://localhost:8000/add-user -c 10 -n 1000 --postfile user.json
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
ตัวอย่างการกดปุ่มปลายทางแพทช์ที่ข้อมูลแพทช์ JSON ถูกกำหนดไว้ในไฟล์:
$ ./cassowary run -u http://localhost:8000/add-user -c 5 -n 200 --patchfile user.json
Starting Load Test with 200 requests using 5 concurrent users
[ omitted for brevity ]
ตัวอย่างการระบุ ระยะเวลา สำหรับการทดสอบโหลดของคุณในคำสั่งด้านล่างเราระบุว่าเราต้องการส่งคำขอ 100 ครั้งตลอดระยะเวลา 30 วินาที:
$ ./cassowary run -u http://localhost:8000 -n 100 -d 30
Starting Load Test with 100 requests using 1 concurrent users
[ omitted for brevity ]
ตัวอย่างการเพิ่มส่วนหัว HTTP เมื่อเรียกใช้ cassowary
$ ./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 KEEPT-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 ]
ตัวอย่างการระบุการรับรองความถูกต้องของไคลเอนต์สำหรับ MTLS
$ ./cassowary run -u https://localhost:8443 -c 10 -n 1000 --cert /path/to/client.pem --key /path/to/client-key.pem --ca /path/to/ca.pem
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
คุณสามารถเรียกใช้ Cassowary ในแบบกระจายหากคุณต้องการขยายการทดสอบโหลดบนเครื่องมากกว่าหนึ่งเครื่อง วิธีที่ง่ายที่สุดในการทำเช่นนั้นคือการเข้าถึงคลัสเตอร์ Kubernetes ใช้ประเภทแบทช์ใน Kubernetes และใน Spec.paralellism Key คุณสามารถระบุจำนวนอินสแตนซ์ของ cassowary ที่คุณต้องการทำงานพร้อมกัน:
apiVersion : batch/v1
kind : Job
metadata :
name : cassowary
spec :
parallelism : 10
template :
spec :
containers :
- command : ["-u", "http://my-microservice.com:8000", "-c", "1", "-n", "10"]
image : rogerw/cassowary:v0.14.1
name : cassowary
restartPolicy : Neverเพียงแค่ใช้ yaml นี้เช่นนั้น:
$ kubectl apply -f cassowary.yamlCassowary สามารถนำเข้าและใช้เป็นโมดูลในแอพ GO ของคุณ เริ่มต้นด้วยการดึงการพึ่งพาโดยใช้ GO mod:
$ go mod init test && go get github.com/rogerwelin/cassowary/pkg/clientและด้านล่างแสดงตัวอย่างง่ายๆเกี่ยวกับวิธีทริกเกอร์การทดสอบโหลดจากรหัสของคุณและการพิมพ์ผลลัพธ์:
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 ))
}ตัวอย่างห้องสมุดเพิ่มเติมสามารถพบได้ที่นี่
Cassowary ติดตามเวอร์ชันความหมาย ห้องสมุดสาธารณะ (PKG/ไคลเอนต์) อาจทำลายความเข้ากันได้ย้อนหลังจนกว่าจะถึงการเปิดตัว V1.0.0 ที่เสถียร
ยินดีต้อนรับ! หากต้องการขอคุณสมบัติสร้างปัญหาใหม่ด้วย feature-request ฉลาก ค้นหาข้อผิดพลาด? โปรดเพิ่มปัญหากับ bugs ของฉลาก คำขอดึงยังได้รับการต้อนรับ แต่โปรดเพิ่มปัญหาในคุณสมบัติที่ร้องขอก่อน (เว้นแต่จะเป็นการแก้ไขข้อผิดพลาดอย่างง่ายหรือการเปลี่ยนแปลง readme)