测试框架

测试框架

Posted by Deetch on November 3, 2018
               LoadRunner Jmeter  Locust  Tsung

授权方式       商业收费    开源免费   开源免费  开源免费

开发语言        C/Java     Java      Python    Erlang

测试脚本形式    C/Java     GUI       Python    xml

并发机制       进程/线程   线程      协程      “轻量级”进程

单机并发能力   低          低        高        高

分布式压力     支持       支持       支持      支持

资源监控       支持      不支持     不支持    支持

报告与分析     完善      简单图表   简单图表   丰富图表

支持二次开发   不支持    支持       支持      支持

Kubernetes + Locust

ref: https://cloud.google.com/solutions/distributed-load-testing-using-kubernetes

https://github.com/locustio/locust(python)

https://github.com/myzhan/boomer(golang)

Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户。Locust 是完全基于时间的,因此单个机器支持几千个并发用户。相比其他许多事件驱动的应用,Locust 不使用回调,而是使用轻量级的处理方式 gevent。

特性

使用纯 Python 代码编写用户测试场景;不需要 UIs 或者 XML

分布式&可伸缩 - 支持成千上万的用户

基于 Web 的 UI

可以测试任意系统;虽然 Locust 是面向 Web 的,但是也可以测试其他任意的系统

部署时,首先部署load testing Master,然后部署10个load testing Worker。

部署Locust Master后,您可以使用外部传输规则的外部IP地址访问Web界面。部署Locust工作器后,您可以启动模拟并检查通过Locust Web界面聚合的统计信息。

要扩大模拟的用户数量,您需要增加蝗虫工作者窗格的数量。复制控制器按照Locust工作控制器的指定部署十个Locust工作器pod。为了增加复制控制器部署的pod数量,Kubernetes提供了在不重新部署pod的情况下更改控制器大小的功能。例如,您可以使用kubectl命令行工具更改工作线程管理器的数量。

 locust的架构是经典压测架构的master->slave,开源有golang实现的slave(https://github.com/myzhan/boomer)。locust本身很轻量,虽然官方只提供了对http的支持,但是官方给出了接口,可以根据实际需要二次开发实现对非web组件的压测,例如websocket、mqtt、redis等。              

websocket example   https://gist.github.com/reallistic/dae87055210af82ea6aa4851a60fde11   

mqtt example            https://github.com/eclipse/paho.mqtt.golang

example :

from locust import HttpLocust, TaskSet, task

class WebsiteTasks(TaskSet):

def on_start(self):


    self.client.post("/login", {


        "username": "test",


        "password": "123456"


    })


@task(2)


def index(self):


    self.client.get("/")


@task(1)


def about(self):


    self.client.get("/about/")

class WebsiteUser(HttpLocust):

task_set = WebsiteTasks


host = "http://www.dui.ai"


min_wait = 1000


max_wait = 5000

先模拟用户登录系统,然后随机地访问首页(/)和关于页面(/about/),请求比例为2:1;并且,在测试过程中,两次请求的间隔时间为1~5秒间的随机值。

Locust 参数化 (测试数据)

这一项极其普遍,主要是用在测试数据方面。但通过归纳,发现其实也可以概括为3中类型。

循环取数据,数据可重复使用:e.g. 模拟3用户并发请求网页,总共有100个URL地址,每个虚拟用户都会依次循环加载这100个URL地址;

保证并发测试数据唯一性,不循环取数据:e.g. 模拟3用户并发注册账号,总共有90个账号,要求注册账号不重复,注册完毕后结束测试;

保证并发测试数据唯一性,循环取数据:模拟3用户并发登录账号,总共有90个账号,要求并发登录账号不相同,但数据可循环使用。