سلام هر!
هن آرٽيڪل ۾ مان هڪ شيئر ڪرڻ چاهيان ٿو JMeter ڪارڪردگي ٽيسٽ هلائڻ جا طريقا OpenShift ۾ Jenkins استعمال ڪندي آٽوميشن. پهرين اسان سڀ ضروري قدم ڪنداسين (ٺاهي ImageStreams
, BuildConfig
, Job
وغيره) دستي موڊ ۾. ان کان پوء، اچو ته Jenkins Pipeline لکون.
شروعاتي نقطي جي طور تي اسان کي گهرجي:
- 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
.
اھو بھتر آھي ته ھاڻي اسٽوريج ٺاھيو وڃي، ڇو ته PODs انھن سان ڳنڍجي ويندا 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
ھتي اھو آھي جيڪو GUI ۾ نظر ايندو:
JMeter بنيادي تصوير ٺاهڻ
اچو ته ٺاھڻ ڏانھن وڃو ImageStream
и BuildConfig
.
توھان حاصل ڪري سگھوٿا سڀ ضروري معلومات دستاويز ۾ -
تصوير ٺاهڻ واري حڪمت عملي آهي Docker
مقامي ذريعن کان.
اچو ته هڪ بنيادي تصوير ٺاهي jmeter-base
، جنهن جو بنياد هوندو jmeter-master
.
Dockerfile
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
هي هڪ Apache ويب سرور آهي. ان جو ڪم ڏسڻ لاء ٽيسٽ نتيجن سان گڏ ڊائريڪٽري مهيا ڪرڻ آهي.
تيار ڪيل Dockerfile
۽ ترتيب ڏيڻ واري فائل httpd.conf
. هدايت لاء DocumentRoot
قدر مقرر /jmeter/reports
، i.e. ڊاريڪٽري جنهن ۾ امتحان جا نتيجا محفوظ ڪيا ويا آهن.
Dockerfile
$ 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
جيمٽر- ماسٽر
اچو ته اپاپي ويب سرور کي ترتيب ڏيڻ شروع ڪريون.
هي آهي Dockerfile jmeter-master
a، جي بنياد تي jmeter-base
، جيڪو ٽيسٽ هلائيندو ۽ نتيجن کي اسٽوريج ۾ محفوظ ڪندو.
Dockerfile
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
هي هڪ اسڪرپٽ آهي جيڪو 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
هيٺ هڪ پائپ لائن آهي جنهن ۾ مخزن جي ڪلوننگ، حذف ڪرڻ ۽ OpenShift جي تخليق ڪئي ويندي آهي 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
ٿڪل
هن آرٽيڪل کي اوپن شيفٽ ماحول ۾ JMeter ٽيسٽ هلائڻ لاءِ اختيارن مان هڪ جو مظاهرو ڪيو. اسان سڀني مرحلن کي دستي طور تي مڪمل ڪيو، جنهن کان پوء اسان جينڪنز پائپ لائن ٺاهي وئي ته هلندڙ ٽيسٽ جي عمل کي خودڪار ڪرڻ لاء.
ذريعن ۽ دستاويز
JMeter - Docker استعمال ڪندي ورهايل لوڊ ٽيسٽ جينڪنز پائپ لائن مان اوپن شفٽ ۾ جي ايم ميٽر ٽيسٽ هلائڻ اوپن شفٽمسلسل اسٽوريج تعمير ۽ تصويري اسٽريم
جو ذريعو: www.habr.com