性能工具之Taurus快速入门

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 【5月更文挑战第8天】性能工具之Taurus快速入门

一、前言

相信大家对这个工具都很陌生,国内能搜索到的资料很少,那么为什么突然推荐想起来这个工具呢?第一,我觉得它很好用;第二,为后面介绍的服务端性能自动化框架铺成。

二、Taurus简介

Taurus是 BlazeMeter 的核心组件,其是一个开源自动化框架,用于运行各种开源负载测试工具和功能测试工具,支持的最流行开源压测工具有 JMeter、Selenum、Gatling、The Grnder、Locust 等

官网:https://gettaurus.org/

其的关键特性有:

  • 我们可以使用 YAML 或 JSON 来描述性能测试,这就是我们想要的 test as code
    • 测试方案定义和设计
    • 测试场景参数化和执行
    • 测试场景结果分析
    • 将上述所有流程集成到持续交付流程中
    • 以上所有的自动化
  • 它可以根据我们选择的性能测试类型自动下载对应的工具。比如我们使用JMeter 压测引擎,那么 Taurus 会自动化下载并安装
  • 扩展并抽象了压测引擎,如JMeter,提供了一种创建,运行和分析性能测试的简单方法
  • 支持主流的操作系统 MAC/Linux/window 等

三、为什么推荐?

  • 较为简单使用和升级
  • 脚本易于阅读,易于版本控制,友好的统一DSL(特定领域的语言)以定义测试方案
  • 能够支持现有 JMeter(或 Grinder 或 Gatling 或 Selenium)测试引擎的能力
  • 能够支持直接解析原生脚本,如 JMeter JMX文件
  • 能够将多个测试脚本或 DSL驱动的测试合并场景
  • 支持实时报告(不推荐 BlazeMeter 收费 Dashboard)
  • 多种测试输出格式,包括但不限于:
    • 基础测试工具的本机结果格式
    • 测试执行期间的控制台统计信息和伪图形图表
  • 可以定义灵活的通过/失败标准。如果结果超过阈值,则可以自动将测试标记为失败
  • 平台无关性:在可以运行 Python 和 Java 的地方运行

四、环境准备

Taurus的环境要求:

  • Python 2.7 or higher,推荐 3.x

本文演示在 Centos 7.x 下安装

1、安装 python3.x

安装 shell 脚本如下:

#!/bin/bash
# author: zuozewei

# 先安装安装几个必须的包,以方便后续的操作 
yum -y install wget gcc make  zlib-devel readline-devel  bzip2-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel openssl-devel

# 上Python的官网 下载源码包 
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
# 解包,解压缩 
xz -d Python-3.6.1.tar.xz
tar -xvf Python-3.6.1.tar
# 编译 
cd Python-3.6.1
./configure --prefix=/usr/local/python3.6 --enable-optimizations
make
make install
# 为了避免每次都输入一大串路径,加个链接 
ln -s /usr/local/python3.6/bin/python3 /usr/bin/python3

测试下版本:

python3 --version

2、安装pip3.x

安装 shell 脚本如下:

#!/bin/bash
# author: zuozewei

# 下载源代码
wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz
tar -zvxf 9.0.1.tar.gz
cd pip-9.0.1

# 使用 Python 3 安装
python3 setup.py install

# 创建链接
ln -s /usr/local/python3.6/bin/pip /usr/bin/pip3

3、安装Taurus

3.1、常规安装

安装 shell 脚本如下:

#!/bin/bash
# author: zuozewei

# 下载安装
sudo pip3 install bzt

# 创建链接
sudo ln -s /usr/local/python3.6/bin/bzt /usr/bin/bzt

验证命令:

[root@VM_0_10_centos ~]# bzt -h
Usage: bzt [options] [configs] [-aliases]

BlazeMeter Taurus Tool v1.13.9, the configuration-driven test running engine

Options:
  -h, --help            show this help message and exit
  -l LOG, --log=LOG     Log file location
  -o OPTION, --option=OPTION
                        Override option in config
  -q, --quiet           Only errors and warnings printed to console
  -v, --verbose         Prints all logging messages to console
  -n, --no-system-configs
                        Skip system and user config files

3.2、Docker Image

CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:

sudo yum install docker

安装之后启动 Docker 服务,并让它随系统启动自动加载。

sudo service docker start
sudo chkconfig docker on

拉取镜像:

$ docker pull blazemeter/taurus

注意:
如果是默认的Docker 官方镜像源会慢的抓狂,此处最好对你的 Docker 镜像源做加速设置,参考以下链接:

查看已完整镜像:

[root@VM_0_10_centos ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/blazemeter/taurus   latest              3ab3eb131ed8        9 days ago          3.08 GB

五、运行现有 JMeter 脚本

在面详细介绍了 Taurus 的常规和 docker 安装,这篇我们一起来看下如何入门使用 Taurus 结合 JMeter做压测。

Taurus 能够支持现有 JMeter(或 Grinder 或 Gatling 或 Selenium)测试引擎的能力,
同时也能够支持直接解析原生脚本,如 JMeter JMX文件。其默认执行引擎是 JMeter,因此,如果已经使用 JMeter创建了 JMX 文件,那么使用 Taurus 可以很容易地运行,只需使用 bzt 命令以及 JMX 路径即可。

我在这里简单使用示例脚本:build-web-test-plan.jmx

image.png

执行命令:

bzt example.jmxbzt build-web-test-plan.jmx -o modules.jmeter.version=5.2.1

将能够看到包含所有 Taurus 报告的全屏仪表板。该仪表板具有 ASCII 图,可显示有关测试的关键统计数据和各种指标。
image.png

测试后摘要报告如下所示:

image.png

注意:
这里我使用可以使用 -o 参数从命令行覆盖配置选项,因为默认配置的 JMeter 版本为 5.1 会报 404 无法下载的错误,因为镜像网站已经不存在了。

报错信息如下:

image.png

镜像地址:https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/
image.png

上面我们演示了直接运行 JMX 文件,但对于 YAML,将 JMX 文件 传入 Taurus 也是一个相当简单的过程:

编写 exist_jmx_conifg.yml

settings:
  env:
    BASE_DIR: /home/taurus/taurus_container_scripts   # 脚本目录
  artifacts-dir: /home/taurus/taurus_container_artifacts/simple1/%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f

execution:
- scenario: simple1   # 场景名称

scenarios:
   simple1:
        script: '${
   BASE_DIR}/build-web-test-plan.jmx'  # 脚本

modules:
    jmeter:
        download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{
   version}.zip' # 下载地址
        version: 5.2.1  # 版本号

reporting:
- module: final-stats   # 摘要报告
- module: console       # 控制台

六、使用 YAML 创建 JMeter 脚本

如果你不想使用 JMeter 创建脚本,还可以使用 Taurus 的简单配置语法将测试场景使用 YAML 或 JSON 来描述 JMeter 脚本,这就是我们想要的 test as code。

例如,一个简单的测试,其中有 10 个并发用户,启动时间为 1 分钟,持续时间为 2.5 分钟,并使用 HTTP GET 请求访问 example.com 网站,看起来很简单:

编写 example.yml 脚本:

settings:
  env:
    BASE_DIR: /home/taurus/taurus_container_scripts  # 脚本目录
  artifacts-dir: /home/taurus/taurus_container_artifacts/simple1/%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f

scenarios:
  my_scenario:
    requests:
      - label: Home
        url: /       #路径
        method: GET  #请求方式

execution:
- concurrency: 10  #并发线程数
  ramp-up: 1m      # 启动时间
  hold-for: 2m30s  # 持续时间
  scenario:        # 测试场景
    default-address: http://www.example.com/  # 请求地址
    requests: 
      - include-scenario: my_scenario  # 场景名称

reporting:  
- module: final-stats # 摘要报告
- module: console     # 控制台

modules:
    jmeter:
        download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{
   version}.zip' # 下载地址
        version: 5.2.1  # 版本号

运行命令:

bzt example.yml

按下 Enter 键后,Taurus 引擎将开始执行测试。

这是 Taurus 测试执行的显示方式:

image.png

测试后摘要报告如下所示:
image.png

生成的过程文件如下:

[root@localhost 2019-12-28_12-15]# ll
total 3352
-rw-r--r--. 1 root root   23716 Dec 28 12:18 bzt.log
-rw-r--r--. 1 root root    6572 Dec 28 12:18 effective.json
-rw-r--r--. 1 root root    5336 Dec 28 12:18 effective.yml
-rw-r--r--. 1 root root      83 Dec 28 12:18 error.jtl
-rw-r--r--. 1 root root     877 Dec 28 12:15 example.yml
-rw-r--r--. 1 root root     436 Dec 28 12:15 jmeter-bzt.properties
-rw-r--r--. 1 root root       0 Dec 28 12:15 jmeter.err
-rw-r--r--. 1 root root 2858758 Dec 28 12:18 jmeter.log
-rw-r--r--. 1 root root     365 Dec 28 12:18 jmeter.out
-rw-r--r--. 1 root root  484169 Dec 28 12:18 kpi.jtl
-rw-r--r--. 1 root root     815 Dec 28 12:15 merged.json
-rw-r--r--. 1 root root     608 Dec 28 12:15 merged.yml
-rw-r--r--. 1 root root    7810 Dec 28 12:15 modified_requests.jmx
-rw-r--r--. 1 root root    5704 Dec 28 12:15 requests.jmx
-rw-r--r--. 1 root root      23 Dec 28 12:15 system.properties

文件说明:

  • bzt.log :Taurus 日志。包含 Taurus 的全部输出,对于故障排除非常有用;
  • effective.json:最终的 Taurus JSON 格式的配置文件。它包含合并的输入文件,配置默认值,任何覆盖的属性等;
  • effective.yml:与 effective.json 相同,但采用 YAML 格式。Taurus 不会在 YAML 和 JSON 之间进行区分,并且能够使用任何格式,因此任何一种都很好;
  • errors.jtl:启用了所有诊断字段的 XML 格式的 JMete 结果文件。能够在“ 查看结果树”监听器中查看完整的请求和响应详细信息;
  • example.yml:通过命令行提供给 Taurus 的 YAML 配置文件;
  • jmeter-bzt.properties:任何 JMeter 属性覆盖;
  • jmeter.log:一个非常默认的 JMeter 日志文件;
  • kpi.jtl:主要结果文件,其名称代表关键绩效指标,其中包括:
    • 采样器时间戳,标签和持续时间
    • 响应消息和代码
    • 采样器是否成功
    • 连接和延迟指标
    • 活动线程号
  • merged.json:Taurus 配置文件。它包含合并的,用户提供的配置文件(YAML或JSON),但未应用默认值或替代值;
  • merged.yml:与上述相同,但采用 YAML 格式;
  • modified_requests:与 requests.jmx 相同,并且通过 YAML 由 Taurus 驱动的更改;
  • requests.jmx:将 YAML 配置文件转换为 JMeter.jmx 格式;
  • system.properties:有效的 JVM 系统属性。

如前所述,就 JMeter 而言,Taurus提供以下报告:

  • 运行时的摘要控制台
  • 测试结束时的统计数据;
  • 2个.jtl 结果文件:
  • CSV-适用于成功的采样器;
  • XML-包含请求/响应的完整详细信息的失败采样器;

因此,kpi.jtlerrors.jtl 用于结果分析,而其他用于调试目的。

注意:

内网环境下,可以将最新的 JMeter 版本(带有最新的插件)下载到 〜/ .bzt / jmeter-taurus文件夹(如果使用自定义插件,则还有一个选项可以指定现有的 JMeter 位置。

七、小结

Taurus 的全部思想--提供一种统一的简化方式来配置和运行自动化测试,并以最有效的形式表示结果。整体上大概有下面几个步骤:

  • 根据提供的 example.yml 准备 JMeter.jmx 脚本;
  • 开始实际的 JMeter 压测;
  • 在文本控制台中显示实时统计信息和基本的 ASCII 图;
  • 测试完成后将摘要打印到控制台;
  • 将 JMeter 测试结果保存为开箱即用,且由 JMeter Plugins提供的 JMeter 监听器可以理解的格式。

示例脚本:

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
6月前
|
数据挖掘 测试技术 BI
性能工具之 Gatling 快速入门
Gatling 是一款基于 Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。
224 1
性能工具之 Gatling 快速入门
|
6月前
|
编解码 NoSQL 测试技术
性能工具之Jmeter HLS 插件(入门篇)
【2月更文挑战第28天】JMeter Redis 数据集 vs CSV 数据集性能对比
183 1
性能工具之Jmeter HLS 插件(入门篇)
|
3月前
|
负载均衡 数据可视化 NoSQL
强烈推荐,好用的时序图开源插件PlantUML!
PlantUML这个开源时序图插件,它通过简单的语法和自动化的图形线条关联解决了传统画图软件中对齐困难、逻辑判断不易表示等问题,并提供了美观的图形和易于修改的特点,特别适合新入职场的开发者快速上手绘制高质量的时序图。
强烈推荐,好用的时序图开源插件PlantUML!
|
3月前
|
开发者 C# UED
如何轻松将WinUI控件引入Web应用?Uno Platform实战攻略——从环境搭建到性能优化,一探究竟!
【8月更文挑战第31天】Uno Platform 通过支持 WebAssembly,将 WinUI 控件无缝带入 Web,为多平台开发提供了新途径。本文介绍如何在 Web 中使用 WinUI 控件,包括环境搭建、控件使用、性能优化、样式调整及测试调优,助力开发者打造高质量跨平台应用。
53 0
|
5月前
|
监控 Java 测试技术
Java性能测试与调优工具使用指南
Java性能测试与调优工具使用指南
|
6月前
|
XML 存储 测试技术
性能工具之Taurus进阶场景使用
【5月更文挑战第9天】性能工具之Taurus进阶场景使用
141 3
性能工具之Taurus进阶场景使用
|
6月前
|
JSON Java Linux
性能工具之 JMeter 快速入门
【5月更文挑战第10天】性能工具之 JMeter 快速入门
79 5
性能工具之 JMeter 快速入门
|
6月前
|
Java 测试技术 Apache
性能工具之JMeter5.0核心源码浅析
【5月更文挑战第14天】性能工具之JMeter5.0核心源码浅析
79 1
性能工具之JMeter5.0核心源码浅析
|
6月前
|
监控 Java 测试技术
性能工具之 nGrinder 入门安装及使用
【5月更文挑战第1天】性能工具之 nGrinder 入门安装及使用
71 5
性能工具之 nGrinder 入门安装及使用
|
6月前
|
Ubuntu 物联网 Linux
性能工具之emqtt_bench快速上手
【4月更文挑战第8天】MQTT 协议是目前最适合物联网场景数据平台搭建的通信协议。基于此,BenchMark 联网场景中的 MQTT 消息采集与传递,以及如何构建一个百万级,甚至千万级 MQTT 消息平台,可以为物联网业务的企业用户提供平台架构设计参考。
127 2
性能工具之emqtt_bench快速上手