ΠΡΠ΅ΠΌ ΠΡΠΈΠ²Π΅Ρ!
Ing artikel iki aku pengin nuduhake salah sawijining cara kanggo mbukak tes kinerja JMeter ing OpenShift nggunakake Jenkins minangka otomatisasi. Kaping pisanan, kita bakal nindakake kabeh langkah sing dibutuhake (nggawe ImageStreams
, BuildConfig
, Job
lsp) ing mode manual. Sawise iku, ayo nulis Jenkins Pipeline.
Minangka titik wiwitan kita kudu duwe:
- mbukak OpenShift (v3.11) kluster
- Server Jenkins kanthi kredensial sing dikonfigurasi supaya bisa digunakake ing OpenShift
- ngajukake
apache-jmeter-5.2.tgz
Minangka tes bakal gampang HTTP Request
ing ya.ru
ing siji stream.
Nggawe proyek ing OpenShift
Ayo miwiti nggawe lingkungan anyar. Ayo nggawe perftest
diubengi dening tim:
$ oc new-project perftest --display-name="Performance Tests" --description="Performance Tests - JMeter"
Kita bakal kanthi otomatis ditransfer menyang lingkungan sing mentas digawe perftest
, ayo priksa manawa iki:
$ oc project
Using project "perftest" on server "https://127.0.0.1:8443".
Nggawe Storage
laporan Test bakal disimpen ing umum karo server web lan jmeter-meter
'Panggonan - /jmeter/reports
.
Luwih becik nggawe Storaj saiki, amarga POD bakal diikat jmeter-web
ΠΈ jmeter-master
.
Sampeyan bakal nemokake informasi sing luwih rinci babagan panyimpenan ing dokumentasi resmi
Ayo nggawe file yaml kanggo 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
Ayo nggawe PV
ΠΈ PVC
diubengi dening OpenShift:
$ oc create -f pv.yaml -n perftest
$ oc create -f pvc.yaml -n perftest
Priksa status kanggo 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
Mangkene apa sing bakal katon ing GUI:
Nggawe Gambar Dasar JMeter
Ayo pindhah menyang nggawe ImageStream
ΠΈ BuildConfig
.
Sampeyan bisa nemokake kabeh informasi sing dibutuhake ing dokumentasi -
Strategi mbangun gambar yaiku Docker
saka sumber lokal.
Ayo nggawe gambar dhasar jmeter-base
, kang bakal dadi basis kanggo jmeter-master
.
file docker
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
yaiku.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
Ayo nggawe obyek IS
ΠΈ BC
:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Saiki ayo ngumpulake gambar dhasar jmeter-base
:
$ oc start-build jmeter-base -n perftest --from-dir=. --follow
JMeter WEB
jmeter-web
Iki minangka server web Apache. Tugase yaiku nyedhiyakake direktori kanthi asil tes kanggo dideleng.
disiapake Dockerfile
lan file konfigurasi httpd.conf
. Kanggo arahan DocumentRoot
nyetel nilai /jmeter/reports
, i.e. direktori ing ngendi asil tes disimpen.
file docker
$ 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
yaiku.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
Ayo nggawe ImageStream
ΠΈ BuildConfig
obyek:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Nglumpukake gambar saka 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
Ayo nggawe obyek Service
ΠΈ DeploymentConfig
:
$ oc create -f sc.yaml -n perftest
$ oc create -f dc.yaml -n perftest
Jmeter-master
Ayo miwiti nggunakake server web Apache.
Iki Dockerfile jmeter-master
'a, adhedhasar jmeter-base
, sing bakal mbukak tes lan nyimpen asil menyang panyimpenan.
file docker
Dockerfile
kanggo jmeter-master
, adhedhasar 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"]
mlayu.sh
run.sh
iki script sing nganggo JMeter lan nyimpen asil kanggo direktori files
.
Saben script diluncurake, bakal mbusak tes sadurunge, supaya sampeyan mung bisa nggarap data paling anyar. Nanging iki ora dadi masalah, amarga sampeyan bisa ngganti sing cocog karo kabutuhan.
#!/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
yaiku.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
Ayo nggawe IS
ΠΈ BC
obyek:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Kita ngumpulake jmeter-master
gambar:
$ oc start-build jmeter-master -n perftest --from-dir=. --follow
Job
Job
's digunakake ing OpenShift
'e kanggo mbukak siji utawa luwih POD
's lan njamin sukses rampung sawise nglakokakΓ© printah / script.
$ 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
Nggawe obyek Job
:
$ oc create -f job.yaml -n perftest
Ayo mriksa status proyek:
$ oc get jobs -n perftest
NAME DESIRED SUCCESSFUL AGE
jmeter-master 1 1 5m
Kanggo mbusak Job
ayo nggunakake perintah:
$ oc delete jobs/jmeter-master -n perftest --ignore-not-found=true
Pipa Jenkins Kab
Saiki otomatis. Ayo maneh langkah-langkah:
git clone
oc whoami -t
oc start-build ...
oc delete jobs/jmeter-master
oc create -f job.yaml -n perftest
Ing ngisor iki minangka saluran pipa ing ngendi kloning repositori, pambusakan lan nggawe OpenShift ditindakake Job
's.
#!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}"
}
}
}
}
Sawise Pipeline wis rampung operasi, kita bakal nampa kabar liwat email '[email protected]
saka [email protected]
.
Kanthi ngeklik link files
, sing nyimpen laporan tes:
Isi file 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
kesimpulan
Artikel iki nuduhake salah sawijining opsi kanggo mbukak tes JMeter ing lingkungan OpenShift. Kita ngrampungake kabeh langkah kanthi manual, lan banjur nggawe Jenkins Pipeline kanggo ngotomatisasi proses tes.
Sumber lan dokumentasi
JMeter - Pengujian Muatan Distribusi nggunakake Docker Mlaku Tes JMeter ing OpenShift saka Pipeline Jenkins openhiftSimpenan terus-terusan Mbangun lan Gambar Streams
Source: www.habr.com