ہر کسی کو خوش!
اس آرٹیکل میں میں جینکنز کو آٹومیشن کے طور پر استعمال کرتے ہوئے OpenShift میں JMeter پرفارمنس ٹیسٹ چلانے کا ایک طریقہ بتانا چاہتا ہوں۔ پہلے ہم تمام ضروری اقدامات کریں گے (creating ImageStreams
, BuildConfig
, Job
وغیرہ) دستی موڈ میں۔ اس کے بعد جینکنز پائپ لائن لکھتے ہیں۔
نقطہ آغاز کے طور پر ہمارے پاس ہونا چاہئے:
- OpenShift (v3.11) کلسٹر چلا رہا ہے۔
- OpenShift میں کام کرنے کے لیے کنفیگر کردہ اسناد کے ساتھ جینکنز سرور
- файл
apache-jmeter-5.2.tgz
ٹیسٹ کے طور پر یہ آسان ہو جائے گا HTTP Request
پر ya.ru
ایک ندی میں
OpenShift میں ایک پروجیکٹ بنانا
آئیے ایک نیا ماحول بنا کر شروعات کریں۔ آئیے تخلیق کرتے ہیں۔ perftest
ایک ٹیم سے گھرا ہوا:
$ oc new-project perftest --display-name="Performance Tests" --description="Performance Tests - JMeter"
ہم خود بخود نئے بنائے گئے ماحول میں منتقل ہو جائیں گے۔ perftest
آئیے چیک کریں کہ یہ ایسا ہے:
$ oc project
Using project "perftest" on server "https://127.0.0.1:8443".
سٹوریج کی تخلیق
ٹیسٹ رپورٹس کو ویب سرور کے ساتھ مشترکہ طور پر ذخیرہ کیا جائے گا اور jmeter-meter
'ایک جگہ - /jmeter/reports
.
ابھی سٹوراج بنانا بہتر ہے، کیونکہ پی او ڈی ان سے منسلک ہو جائیں گے۔ jmeter-web
и jmeter-master
.
آپ کو سرکاری دستاویزات میں اسٹوریج کے بارے میں مزید تفصیلی معلومات ملیں گی۔
آئیے کے لیے yaml فائلیں بنائیں PV
и PVC
.
pv.yaml
$ tee pv.yaml<<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: jmeter-reports
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
glusterfs:
endpoints: glusterfs-cluster
path: /jmeter/reports
readOnly: false
persistentVolumeReclaimPolicy: Retain
EOF
pvc.yaml
$ tee pvc.yaml<<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jmeter-reports
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
EOF
آئیے تخلیق کرتے ہیں۔ PV
и PVC
OpenShift سے گھرا ہوا:
$ oc create -f pv.yaml -n perftest
$ oc create -f pvc.yaml -n perftest
کی حیثیت کی جانچ کر رہا ہے۔ PVC
:
$ oc get pvc -n perftest
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jmeter-reports Bound pvc-b0e5f152-db4b-11ea-a497-566f75280024 10Gi RWX glusterfs-storage 8m
یہ جی یو آئی میں کیسا نظر آئے گا:
جے میٹر بیس امیج بنانا
آئیے تخلیق کی طرف بڑھتے ہیں۔ ImageStream
и BuildConfig
.
آپ دستاویزات میں تمام ضروری معلومات حاصل کر سکتے ہیں۔
تصویر بنانے کی حکمت عملی ہے۔ Docker
ایک مقامی ذریعہ سے
آئیے ایک بنیادی تصویر بنائیں jmeter-base
، جس کی بنیاد ہوگی۔ jmeter-master
.
ڈاکر فائل
FROM openjdk:8u212-jdk
ARG JMETER_VER="5.2"
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VER
ENV PATH $JMETER_HOME/bin:$PATH
RUN mkdir -p /jmeter/results
&& mkdir /jmeter/tests
WORKDIR /jmeter
COPY apache-jmeter-$JMETER_VER.tgz .
RUN tar -xzf $JMETER_HOME.tgz
&& rm $JMETER_HOME.tgz
&& ls -la
RUN sed -i s/#server.rmi.ssl.disable=false/server.rmi.ssl.disable=true/ $JMETER_HOME/bin/jmeter.properties
EXPOSE 60000
is.yaml
$ tee is.yaml<<EOF
apiVersion: v1
kind: ImageStream
metadata:
labels:
build: jmeter-base
name: jmeter-base
EOF
bc.yaml
$ tee bc.yaml<<EOF
apiVersion: v1
kind: BuildConfig
metadata:
name: jmeter-base
spec:
failedBuildsHistoryLimit: 5
nodeSelector: null
output:
to:
kind: ImageStreamTag
name: 'jmeter-base:latest'
postCommit: {}
resources: {}
runPolicy: Serial
source:
binary: {}
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: 'openjdk:8u212-jdk'
type: Docker
successfulBuildsHistoryLimit: 5
EOF
آئیے اشیاء بنائیں IS
и BC
:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
اب بیس امیج کو اسمبل کرتے ہیں۔ jmeter-base
:
$ oc start-build jmeter-base -n perftest --from-dir=. --follow
جے میٹر ویب
jmeter-web
یہ ایک اپاچی ویب سرور ہے۔ اس کا کام دیکھنے کے لیے ٹیسٹ کے نتائج کے ساتھ ڈائریکٹری فراہم کرنا ہے۔
تیار Dockerfile
اور کنفیگریشن فائل httpd.conf
. ہدایت کے لیے DocumentRoot
قدر سیٹ /jmeter/reports
، یعنی ڈائریکٹری جس میں ٹیسٹ کے نتائج محفوظ کیے جاتے ہیں۔
ڈاکر فائل
$ tee Dockerfile<<EOF
FROM httpd:2.4
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
RUN chmod -R 777 /usr/local/apache2/logs
EXPOSE 8080
CMD ["httpd", "-D", "FOREGROUND"]
EOF
is.yaml
$ tee is.yaml<<EOF
apiVersion: v1
kind: ImageStream
metadata:
generation: 1
labels:
build: jmeter-web
name: jmeter-web
EOF
bc.yaml
$ tee bc.yaml<<EOF
apiVersion: v1
kind: BuildConfig
metadata:
name: jmeter-web
spec:
failedBuildsHistoryLimit: 5
nodeSelector: null
output:
to:
kind: ImageStreamTag
name: 'jmeter-web:latest'
runPolicy: Serial
source:
binary: {}
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: 'httpd:2.4'
type: Docker
successfulBuildsHistoryLimit: 5
EOF
آئیے تخلیق کرتے ہیں۔ ImageStream
и BuildConfig
اشیاء:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
سے ایک تصویر جمع کرنا Dockerfile
:
$ oc start-build jmeter-web -n perftest --from-dir=. --follow
dc.yaml
$ tee dc.yaml<<EOF
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: jmeter-web
spec:
replicas: 1
template:
metadata:
labels:
name: jmeter-web
spec:
containers:
- image: 172.30.1.1:5000/perftest/jmeter-web
name: jmeter-web
volumeMounts:
- mountPath: /jmeter/reports
name: jmeter-reports
ports:
- containerPort: 80
protocol: TCP
- containerPort: 8080
protocol: TCP
volumes:
- name: jmeter-reports
persistentVolumeClaim:
claimName: jmeter-reports
EOF
sc.yaml
$ tee sc.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: jmeter-web
name: jmeter-web
spec:
ports:
- name: 8080-tcp
port: 8080
protocol: TCP
targetPort: 8080
selector:
deploymentconfig: jmeter-web
sessionAffinity: None
type: ClusterIP
EOF
آئیے اشیاء بنائیں Service
и DeploymentConfig
:
$ oc create -f sc.yaml -n perftest
$ oc create -f dc.yaml -n perftest
Jmeter-master
آئیے اپاچی ویب سرور کی تعیناتی شروع کریں۔
یہ ڈاکر فائل ہے۔ jmeter-master
'a، کی بنیاد پر jmeter-base
، جو ٹیسٹ چلائے گا اور نتائج کو اسٹوریج میں محفوظ کرے گا۔
ڈاکر فائل
Dockerfile
لیے jmeter-master
، کی بنیاد پر jmeter-base
.
FROM jmeter-base
ARG JMETER_VER="5.2"
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VER
ENV PATH $JMETER_HOME/bin:$PATH
WORKDIR /jmeter
COPY run.sh /jmeter/
COPY tests/*.jmx /jmeter/tests/
RUN chmod +x /jmeter/run.sh
ENTRYPOINT ["/bin/bash"]
CMD ["/jmeter/run.sh"]
run.sh
run.sh
یہ ایک اسکرپٹ ہے جو JMeter چلاتا ہے اور نتائج کو ڈائریکٹری میں محفوظ کرتا ہے۔ files
.
ہر بار جب اسکرپٹ لانچ کیا جاتا ہے، یہ پچھلے ٹیسٹ کو حذف کر دیتا ہے، لہذا آپ صرف تازہ ترین ڈیٹا کے ساتھ کام کر سکتے ہیں۔ لیکن یہ کوئی مسئلہ نہیں ہے، کیونکہ آپ اسے اپنی ضروریات کے مطابق تبدیل کر سکتے ہیں۔
#!/bin/bash
set -e
if [ -d "/jmeter/reports/files" ]
then
echo "Directory /jmeter/reports/files exist - OK"
else
echo "Creating /jmeter/reports/files directory"
mkdir /jmeter/reports/files
fi
if [ -d "/jmeter/reports/dashboards" ]
then
echo "Directory /jmeter/reports/dashboards exist"
else
echo "Creating /jmeter/reports/dashboards directory"
mkdir /jmeter/reports/dashboards
fi
echo "*** JMeter START Tests ***"
for item in $(ls -1 /jmeter/tests | grep jmx)
do
echo "*** Removing dashboard directory for $item"
rm -rdf /jmeter/reports/dashboards/${item}*
echo "*** Removing tests directory for $item"
rm -rdf /jmeter/reports/files/${item}*
echo "*** Testing a $item file ***"
jmeter -n -t /jmeter/tests/${item} -l /jmeter/reports/files/${item}-report.jtl -e -o /jmeter/reports/dashboards/${item}-dash
done
is.yaml
$ tee is.yaml<<EOF
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
generation: 1
labels:
build: jmeter-master
name: jmeter-master
EOF
bc.yaml
$ tee bc.yaml<<EOF
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
name: jmeter-master
spec:
failedBuildsHistoryLimit: 5
nodeSelector: null
output:
to:
kind: ImageStreamTag
name: 'jmeter-master:latest'
runPolicy: Serial
source:
binary: {}
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: 'jmeter-base:latest'
type: Docker
successfulBuildsHistoryLimit: 5
EOF
آئیے تخلیق کرتے ہیں۔ IS
и BC
اشیاء:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
ہم جمع کرتے ہیں jmeter-master
تصویر:
$ oc start-build jmeter-master -n perftest --from-dir=. --follow
ایوب
Job
میں استعمال ہوتے ہیں۔ OpenShift
ایک یا زیادہ چلانے کے لیے POD
کی اور کمانڈ/اسکرپٹ پر عمل کرنے کے بعد ان کی کامیاب تکمیل کی ضمانت دیں۔
$ tee job.yaml<<EOF
apiVersion: batch/v1
kind: Job
metadata:
name: jmeter-master
labels:
jobName: jmeter-master
spec:
completions: 1
parallelism: 1
template:
metadata:
name: jmeter-master
labels:
jobName: jmeter-master
spec:
containers:
- name: jmeter-master
image: 172.30.1.1:5000/perftest/jmeter-master:latest
volumeMounts:
- mountPath: /jmeter/reports
name: jmeter-reports
imagePullPolicy: Always
volumes:
- name: jmeter-reports
persistentVolumeClaim:
claimName: jmeter-reports
restartPolicy: Never
terminationGracePeriodSeconds: 30
EOF
ایک آبجیکٹ بنائیں Job
:
$ oc create -f job.yaml -n perftest
آئیے کام کی حیثیت چیک کرتے ہیں:
$ oc get jobs -n perftest
NAME DESIRED SUCCESSFUL AGE
jmeter-master 1 1 5m
حذف کرنے کی Job
آئیے کمانڈ استعمال کریں:
$ oc delete jobs/jmeter-master -n perftest --ignore-not-found=true
جینکنز پائپ لائن
اب آٹومیشن۔ آئیے ایک بار پھر مراحل پر چلتے ہیں:
git clone
oc whoami -t
oc start-build ...
oc delete jobs/jmeter-master
oc create -f job.yaml -n perftest
ذیل میں ایک پائپ لائن ہے جس میں ریپوزٹری کلوننگ، ڈیلیٹ اور اوپن شفٹ کی تخلیق کی جاتی ہے۔ Job
کی
#!groovy
pipeline {
agent any
stages {
stage('Start Notifications') {
steps {
echo "Sending Email Notification"
}
post {
always {
echo "STARTED - Performance Tests"
mail(to: '[email protected]', from: "[email protected]", subject: "START - Performance Tests",mimeType: "text/html", body: "<strong>START - Performance Tests</strong><br /><br />Project: Name of Project<br />Environment: PerfTest<br />Build number: ${env.BUILD_NUMBER}<br />Build URL: ${env.BUILD_URL}"
}
}
}
stage('Git checkout') {
steps {
...
}
}
stage('Perf Tests') {
steps {
script {
sh '''
OC_CMD1="oc login -u=username -p=PASS -n=perftest
--server=https://...:8443"
$OC_CMD1
OC_TOKEN=`oc whoami -t`
OC_CMD2="oc --token=$OC_TOKEN --server=https://...:8443
start-build jmeter-master -n=perftest --from-dir=./master
--follow=true"
OC_CMD3="oc --token=$OC_TOKEN --server=https://...:8443
delete jobs/jmeter-master -n=perftest --ignore-not-found=true"
OC_CMD4="oc--token=$OC_TOKEN --server=https://...:8443
create -f ./master/job.yaml -n=perftest"
$OC_CMD2
$OC_CMD3
$OC_CMD4
'''
}
}
}
post {
failure {
echo "FAILED - Performance Tests"
mail(to: '[email protected]', from: "[email protected]", subject: "FAILED - Performance Tests",mimeType: "text/html", body: "<strong>FAILED - Performance Tests</strong><br /><br />Project: Name of Project<br />Environment: PerfTest<br />Build number: ${env.BUILD_NUMBER}<br />Build URL: ${env.BUILD_URL}"
}
success {
echo "SUCCESSED - Performance Tests"
mail(to: '[email protected]', from: "[email protected]", subject: "SUCCESSED - Performance Tests",mimeType: "text/html", body: "<strong>SUCCESSED - Performance Tests</strong><br /><br />Project: Name of Project<br />Environment: PerfTest<br />Build number: ${env.BUILD_NUMBER}<br />Build URL: ${env.BUILD_URL}"
}
}
}
}
پائپ لائن اپنا کام مکمل کرنے کے بعد، ہمیں ای میل کے ذریعے ایک اطلاع موصول ہوگی۔ '[email protected]
سے [email protected]
.
لنک کے بعد files
، جو ٹیسٹ رپورٹس کو اسٹور کرتا ہے:
فائل کے مواد ya.HTTP.Request.jmx-report.jtk
:
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1597311456443,569,Yandex - HTTP Request,200,Ok,Thread Group 1-1,text,true,,59449,220,1,1,https://ya.ru/,145,0,57
1597311456443,147,Yandex - HTTP Request-0,302,Found,Thread Group 1-1,,true,,478,110,1,1,http://ya.ru/,145,0,57
1597311456592,420,Yandex - HTTP Request-1,200,Ok,Thread Group 1-1,text,true,,58971,110,1,1,https://ya.ru/,370,0,259
حاصل يہ ہوا
اس مضمون نے OpenShift ماحول میں JMeter ٹیسٹ چلانے کے اختیارات میں سے ایک کا مظاہرہ کیا ہے۔ ہم نے تمام مراحل کو دستی طور پر مکمل کیا، جس کے بعد ہم نے ٹیسٹ چلانے کے عمل کو خودکار کرنے کے لیے جینکنز پائپ لائن بنائی۔
ذرائع اور دستاویزات
JMeter - ڈوکر کا استعمال کرتے ہوئے تقسیم شدہ لوڈ ٹیسٹنگ جینکنز پائپ لائن سے اوپن شفٹ میں JMeter ٹیسٹ چلانا اوپن شپٹمستقل اسٹوریج بناتا ہے اور تصویری سلسلے
ماخذ: www.habr.com