记一次性能测试过程

由于公司项目做了巨大改动,需要重新测试性能,下面记录本次测试的过程:

1.准备环境

测试需要公司开阿里云机器测试花钱的,所以先在本地把数据准备好

  1. 测试数据
    • 生成账户数据,使用jar包生成
    • 再使用jar 生成payment 和insert 的签名数据
  2. jmeter工具
    打包Jmeter 镜像,先在本地创建一个目录jmeter_docker ,里面放jmeter文件夹,如下图:


    jmeter_docker.png

    创建一个Dockerfile文件,Dockerfile脚本如下:

FROM java:8
# 基础java版本
MAINTAINER cctester
# 作者
ENV http_proxy ""
ENV https_proxy ""
RUN mkdir /test && \
  chmod -R 777 /test
# 创建/test目录,用于存放jmx脚本、jtl结果文件、html测试报告文件
ENV JMETER_VERSION=5.2.1
ENV JMETER_HOME=/usr/local/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}
ENV PATH=${JMETER_HOME}/bin:${PATH}
# 设置JMeter环境变量
ADD apache-jmeter-${JMETER_VERSION}.tgz /usr/local
# 添加JMeter
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  echo "Asia/Shanghai" > /etc/timezone

再制作Jmeter镜像

执行命令  docker build -t jmeter .    
注意不要忽略最后点

打完查看镜像,执行 docker images 

再将JMeter 镜像保存本地
docker save -o  jmeter.tar  jmeter:latest

把 Jmeter.tar 复制到压测机器上,执行导入镜像
docker load  -i jmeter.tar 即可

  1. 监控工具

本次性能测试采用node_exporter+promethus+granfan监控节点机器
使用jmeter+influxdb+granfan显示jmeter数据,都采用docker-compose方式来安装

docker_compose文件如下:

version: '2'
  
services:
    prometheus:
        image: prom/prometheus
        container_name: prometheus
        hostname: prometheus
        restart: always
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
            # - ./node_down.yml:/etc/prometheus/node_down.yml
        ports:
            - "9090:9090"
        networks:
            - kong_net
   grafana:
        image: grafana/grafana
        container_name: grafana
        hostname: grafana
        restart: always
        ports:
            - "3000:3000"
        networks:
            - kong_net
  influxdb:
        image: influxdb:1.8.4-alpine
        container_name: influxdb
        ports:
            - "8083:8083"
            - "8086:8086"
            - "8090:8090"

 networks:
    kong_net:

2.测试过程

  1. 先安装测试机上的Docker环境
进入机器上,先执行如下命令:

apt-get update
apt-get upgrade
apt install docker.io
安装docker后,执行docker -v可查看版本号

再安装docker-compose 一般执行
https://get.daocloud.io  
这个网址里面的命令就可以,但是测试的机器报443 不得已解决,直接将docker-compose 拷贝到节点机器的/usr/local/bin 目录下 

进入docker_compose 目录下,执行 docker_compose up -d 命令启动promethus+grafana+influxdb容器

  • 由于jmeter需要将数据写入influxdb中,需要先创建好数据库,如下步骤:
    进入influxdb 容器中,创建数据库myDB 以便于jmeter写入数据
influxdb容器.png
  • 再需要先下载一个jmeter influxdb的插件,放到jmeter目录下的lib/ext目录下


    influxdb lib.png
  • jmeter 需要添加一个后置监听器


    image.png
  • 节点所在机器上需要启动node_exporter容器,监控节点资源,docker_compose文件内容如下:
version: '2'
  
services:
    node-exporter:
        image: prom/node-exporter
        container_name: node-exporter
        hostname: node-exporter
        restart: always
        ports:
            - "9100:9100"
    mysql:
        image: mysql:5.7
        container_name: mysql
        environment:
            MYSQL_ROOT_PASSWORD: "root"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'root'
        restart: always
        volumes:
            - "./db:/var/lib/mysql"
            - "./conf/my.cnf:/etc/my.cnf"
            - "./init:/docker-entrypoint-initdb.d/"
        ports:
            - "3306:3306"
       

配置promethus.yaml 文件

global:
  scrape_interval: 15s  
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['8.130.12.208:9100']
      - targets: ['8.130.8.46:9100'] 
     

grafana 容器启动起来后,使用浏览器打开 http://127.0.0.1:3000 会显示grafana界面,默认用户名和密码是admin/admin 。

进入grafana 界面后,先配置promethus数据源


image.png

再配置influxdb的数据源


image.png

infulxdb 需要配置事先创建好的数据库


image.png

再添加显示的模块,进入https://grafana.com/grafana/dashboards 查找需要的模板
有2种方式可以导入模板

image.png

1是直接上传下载好的json文件,2是再模板详情页面有一个id复制这个id 进行导入

image.png
  • 如何在外部使用root连接这个mysql? 为了安全,首先需要设置root帐号的密码,先将当前库切到mysql
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

10. 设置root账户的密码为root


mysql> update user set authentication_string = password('root') where user = 'root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

11. 给所有root用户赋权,外部的电脑也能够通过root访问Docker中的mysql数据库
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

你可能感兴趣的:(记一次性能测试过程)