
الإنجليزية | 中文
Cassowary هي أداة اختبار تحميل HTTP/S ، بديهية وعبر المنصات المضمّنة للمطورين والمختبرين والمواد. يستمد Cassowary الإلهام من مشاريع رائعة مثل K6 و AB & HTTPSTAT.
؟ 2 أوضاع اختبار التحميل : وضع انتشار واحد وواحد حيث يمكن تحديد مسارات URL من ملف (مثالي إذا كنت ترغب في الضغط على العديد من الخدمات الدقيقة الأساسية)
؟ CI Friendly : مناسبة تمامًا لتكون جزءًا من خطوة خط أنابيب CI
؟ مقاييس مرنة : مقاييس CloudWatch ، مقاييس Prometheus (دفع المقاييس إلى Prometheus Pushgateway) ، ملف JSON
؟ قابلة للتكوين : قادر على المرور في رؤوس HTTP التعسفية ، قادرة على تكوين عميل HTTP
؟ يمكن تحديد بيانات GET ، POST ، PUT & PISH - POST ، PUT و PITTH في ملف
؟ Cross Platform : واحد ثنائي واحد مصمم مسبقًا لـ Linux و Mac OSX و Windows
؟ يمكن استيراد
؟ التصورات - يمكن لـ Cassowary تصدير البيانات كرسوم بيانية و boxplot في تنسيق PNG
احصل على ثنائي تم بناءه مسبقًا من صفحة إصدارات Github. يمكنك اختياريًا وضع ثنائي الكاسووير في PATH حتى تتمكن من تشغيل الكاسواري من أي مكان. بديل يمكنك:
يمكنك تثبيت Cassowary باستخدام Homebrew Package Manager على Mac:
$ brew update && brew install cassowaryيمكنك تشغيل Cassowary مباشرة باستخدام صورة 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 Package Manager.
nix-env -iA cassowary
إذا كنت ترغب في طرح دورة في الدقيقة الخاصة بك ، فيمكنك استخدام ملف 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 ، بدون العلم المحدد ، تقديم طلب واحد لكل مسار محدد في الملف. ومع ذلك ، يمكنك أيضًا تحديد عدد الطلبات التي تريد أن تنشئها 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مثال على تصدير مقاييس json cassowary إلى ملف:
$ ./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
مثال على تصدير مقاييس الكاسواري إلى بروميثيوس من خلال توفير عنوان 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 دون قيمة. لاحظ أنك ستحتاج إلى إخبار Cassoway عن منطقة AWS التي تريد استخدامها. أسهل طريقة هي استخدام متغير البيئة كما هو موضح أدناه:
$ 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 دون قيمة للسماح بحساب الكاسواري وإخراج رسم بياني بتنسيق PNG (Hist.png في DIR الحالي) للمدة الإجمالية للطلبات في MS. مثال:
قم بتزويد علامة -boxplot بدون قيمة لإخبار الكاسواري بإنشاء تصور boxplot بتنسيق png (boxplot.png في dir الحالي) للمدة الإجمالية للطلبات في MS
مثال على الضغط على نقطة نهاية حيث يتم تعريف بيانات Post 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 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 ]
مثال على تحديد مصادقة العميل لـ 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 ، يمكنك تحديد عدد حالات 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.yamlيمكن استيراد Cassowary واستخدامه كوحدة في تطبيق GO الخاص بك. ابدأ بجلب التبعية باستخدام 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/Client) التوافق الخلفي حتى تصل إلى إصدار مستقر V1.0.0.
المساهمات مرحب بها! لطلب ميزة قم بإنشاء مشكلة جديدة مع feature-request التسمية. تجد خطأ؟ الرجاء إضافة مشكلة مع bugs الملصقات. يتم الترحيب بطلبات السحب أيضًا ولكن يرجى إضافة مشكلة على الميزة المطلوبة أولاً (ما لم تكن إصلاحًا بسيطًا أو تغييرًا في الأخطاء)