Devops关键工具及技术(七)—基于Pipeline的Jmeter性能测试[一](Jmeter容器化)
上三篇文章中,我们从windows下Web自动化测试工具的安装再到将Web自动化测试工具RobotFramework+Selenium+Chome容器化,最后利用容器化后的自动化工具与Jenkins Docker Cloud集成,并在Pipeline中实现Web的自动化测试。
三篇文章链接见下:
Devops关键工具及技术(六)—基于Pipeline的Web自动化测试(Windows下自动化测试工具安装)
Devops关键工具及技术(六)—基于Pipeline的Web自动化测试(Web自动化测试工具容器化)
Devops关键工具及技术(六)—基于Pipeline的Web自动化测试(Web自动化测试的流水线集成)
有了自动化测试、自然性能测试也需要成为Pipeline的一部分。性能测试的工具常见的主要有Jmeter和LoadRunner。我们将选用Jmeter作为我们的主角。因为它是免费的。由于在Windows下安装Jmeter比较简单,所以我们在Jmeter性能测试会由两种文章来介绍。分别是Jmeter性能测试容器化、Jmeter性能测试的流水线集成。
本篇我们将先介绍Jmeter性能测试的容器化。
以下所有的文件代码都可以在Github找到:
https://github.com/zbbkeepgoing/containerization
1、容器化
Jmeter容器化的目的和Web自动化测试工具的容器化一样,是为了能够将Jmeter加入到我们的Jenkins中成为一个 节点,这样Jmeter将会很容易地集成到我们pipeline流水线中。
下面是Jmeter的Dockerfile文件
FROM openjdk:8-jdk ENV http_proxy http://192.168.88.130:8118 //增加代理,如果无需代理可以删除 ENV https_proxy https://192.168.88.130:8118 //增加代理,如果无需代理可以删除 ENV JMETER_VERSION=5.0 //定义环境变量 ENV JMETER_HOME=/usr/local/apache-jmeter-${JMETER_VERSION} ENV PATH=${JMETER_HOME}/bin:${PATH} RUN apt-get -y update && \ //安装必要软件 apt-get -y install wget RUN wget http://www.eu.apache.org/dist/jmeter/binaries/apache-jmeter-${JMETER_VERSION}.tgz && \ tar -xzf apache-jmeter-${JMETER_VERSION}.tgz -C /usr/local/ //下载Jmeter的包并解压 RUN rm -rf apache-jmeter-${JMETER_VERSION}.tgz \ ${JMETER_HOME}/bin/examples \ ${JMETER_HOME}/bin/templates \ ${JMETER_HOME}/bin/*.cmd \ ${JMETER_HOME}/bin/*.bat \ ${JMETER_HOME}/docs \ ${JMETER_HOME}/printable_docs && \ apt-get -y remove wget && \ apt-get -y --purge autoremove && \ apt-get -y clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ENV http_proxy "" ENV https_proxy "" //取消代理
根据Dockerfile镜像Docker的构建。
docker build -t jmeter:latest .
构建完成后运行
docker run --name jmeter -it -d jmeter:latest
测试
- 测试Jmeter容器化是否都已成功安装
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 90404438810e jmeter:latest "bash" About a minute ago Up About a minute jmeter 11f7e107e7db sonarqube "./bin/run.sh" 14 hours ago Up 14 hours 0.0.0.0:9000->9000/tcp, 0.0.0.0:9092->9092/tcp sonarqube [root@localhost ~]# docker exec -it 90404438810e sh # jmeter.sh --help Oct 20, 2018 6:00:22 AM java.util.prefs.FileSystemPreferences$1 run INFO: Created user preferences directory. _ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____ / \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \ / _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) | / ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ < /_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 5.0 r1840935 Copyright (c) 1999-2018 The Apache Software Foundation To list all command line options, open a command prompt and type: jmeter.bat(Windows)/jmeter.sh(Linux) -? -------------------------------------------------- To run Apache JMeter in GUI mode, open a command prompt and type: jmeter.bat(Windows)/jmeter.sh(Linux) [-p property-file] -------------------------------------------------- To run Apache JMeter in NON_GUI mode: Open a command prompt (or Unix shell) and type: jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -------------------------------------------------- To run Apache JMeter in NON_GUI mode and generate a report at end : Open a command prompt (or Unix shell) and type: jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Path to output folder] -------------------------------------------------- To generate a Report from existing CSV file: Open a command prompt (or Unix shell) and type: jmeter.bat(Windows)/jmeter.sh(Linux) -g [csv results file] -o [path to output folder (empty or not existing)] -------------------------------------------------- To tell Apache JMeter to use a proxy server: Open a command prompt and type: jmeter.bat(Windows)/jmeter.sh(Linux) -H [your.proxy.server] -P [your proxy server port] --------------------------------------------------- To run Apache JMeter in server mode: Open a command prompt and type: jmeter-server.bat(Windows)/jmeter-server(Linux) --------------------------------------------------- #
- 测试Baidu的Demo性能测试脚本
脚本可以在这里找到:https://github.com/zbbkeepgoing/containerization/blob/master/Jmeter/baidu.jmx
<?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.0 r1840935"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> </TestPlan> <hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <stringProp name="LoopController.loops">10</stringProp> </elementProp> <stringProp name="ThreadGroup.num_threads">1</stringProp> <stringProp name="ThreadGroup.ramp_time">1</stringProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> </ThreadGroup> <hashTree> ............ <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> <sentBytes>true</sentBytes> <url>true</url> <threadCounts>true</threadCounts> <idleTime>true</idleTime> <connectTime>true</connectTime> </value> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> </hashTree> </hashTree> </hashTree> </jmeterTestPlan>
进入容器进行测试
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 90404438810e jmeter:latest "bash" 16 minutes ago Up 16 minutes jmeter 11f7e107e7db sonarqube "./bin/run.sh" 15 hours ago Up 15 hours 0.0.0.0:9000->9000/tcp, 0.0.0.0:9092->9092/tcp sonarqube [root@localhost ~]# 234a7 docker cp baidu.jmx 90404438810e:/opt [root@localhost ~]# docker exec -it 90404438810e sh # mkdir -p /opt/output # ls bin boot dev docker-java-home etc home jmeter.log lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # cd /opt # ls baidu.jmx output # jmeter.sh -n -t /opt/baidu.jmx -l /opt/baidu.jtl -j /opt/baidu.log -e -o /opt/output Creating summariser <summary> Created the tree successfully using /opt/baidu.jmx Starting the test @ Sat Oct 20 06:18:46 UTC 2018 (1540016326114) Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445 summary + 2 in 00:00:02 = 1.3/s Avg: 409 Min: 378 Max: 440 Err: 0 (0.00%) Active: 1 Started: 1 Finished: 0 summary + 8 in 00:00:02 = 4.2/s Avg: 235 Min: 109 Max: 496 Err: 0 (0.00%) Active: 0 Started: 1 Finished: 1 summary = 10 in 00:00:03 = 2.9/s Avg: 269 Min: 109 Max: 496 Err: 0 (0.00%) Tidying up ... @ Sat Oct 20 06:19:02 UTC 2018 (1540016342106) ... end of run # ls baidu.jmx baidu.jtl baidu.log output # cd output # ls README.TXT content index.html sbadmin2-1.0.7 #
以上即是Jmeter容器化的内容,后面将会利用容器化后的镜像与Jenkins、Pipeline结合进行性能测试的集成
阅读更多- Devops关键工具及技术(七)—基于Pipeline的Jmeter性能测试[二](Jmeter性能测试的流水线集成)
- Devops关键工具及技术(八)—基于Pipeline的Ansible自动化部署[二](Ansible自动化部署的流水线集成)
- Devops关键工具及技术(八)—基于Pipeline的Ansible自动化部署[一](Ansible容器化)
- 性能测试工具JMeter的使用
- JMeter基于http请求的web接口性能测试总结
- 性能测试分享:Jmeter的api监控工具解决方案
- 【转】性能测试工具JMeter的使用技巧
- 使用JMeter + Badboy 测试基于事务粒度的性能测试
- 基于ant的jmeter自动化性能测试
- 基于Jmeter开发性能自动化测试平台
- 开源性能测试工具--Jmeter介绍+安装说明!!!
- 介绍如何安装开源性能测试工具——JMeter
- 性能测试之工具对比-ngrinder jmeter loadunner
- 【jmeter】基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示
- 开源性能测试工具JMeter快速入门(一)
- 基于ant的jmeter自动化性能测试
- JMeter 介绍: 一个非常优秀的开源的性能测试工具。
- 压力 性能 测试 工具 ab (apache benchmark) jmeter
- 基于Ant的JMeter性能自动化测试
- 性能测试工具操作数据库(四)-Jmeter与Oracle