kubernetes實踐之四十六:分散式負載測試Locust
一: 前言
本文介紹如何在Kubernetes叢集中對一個應用進行分散式測試,sample-webapp是一個簡單的web測試應用。測試工具使用Locust.
二:Locust 介紹
Locust是一個用於可擴充套件的,分散式的,效能測試的,開源的,用Python編寫框架/工具.
在這個示例中,定義了針對網站的測試場景:先模擬使用者登入系統,然後隨機地訪問首頁(/)和關於頁面(/about/),請求比例為2:1;並且,在測試過程中,兩次請求的間隔時間為1~5秒間的隨機值。
三:部署測試WEB應用
sample-webapp-controller.yaml
sample-webapp-service.yaml
kubectl create -f sample-webapp-controller.yaml
kubectl create -f sample-webapp-service.yaml
locust-master-controller.yaml
locust-master-service.yaml
locust-worker-controller.yaml
kubectl create -f locust-master-controller.yaml
kubectl create -f locust-master-service.yaml
kubectl create -f locust-worker-controller.yaml
五:配置Traefik
kubectl replace -f ingress.yaml
六:執行測試
訪問http://locust.donkey/ 設定測試引數,進行測試
本文介紹如何在Kubernetes叢集中對一個應用進行分散式測試,sample-webapp是一個簡單的web測試應用。測試工具使用Locust.
二:Locust 介紹
Locust是一個用於可擴充套件的,分散式的,效能測試的,開源的,用Python編寫框架/工具.
在Locust測試框架中,測試場景是採用純Python指令碼進行描述的。對於最常見的HTTP(S)協議的系統,Locust採用Python的requests庫作為客戶端,使得指令碼編寫大大簡化,富有表現力的同時且極具美感。而對於其它協議型別的系統,Locust也提供了介面,只要我們能採用Python編寫對應的請求客戶端,就能方便地採用Locust實現壓力測試。從這個角度來說,Locust可以用於壓測任意型別的系統。
在模擬有效併發方面,Locust的優勢在於其摒棄了程式和執行緒,完全基於事件驅動,使用gevent提供的非阻塞IO和coroutine來實現網路層的併發請求,因此即使是單臺壓力機也能產生數千併發請求數;再加上對分散式執行的支援,理論上來說,Locust能在使用較少壓力機的前提下支援極高併發數的測試。
Locust指令碼示例:
點選(此處)摺疊或開啟
-
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 = ""
-
min_wait = 1000
- max_wait = 5000
三:部署測試WEB應用
sample-webapp-controller.yaml
點選(此處)摺疊或開啟
-
kind: ReplicationController
-
apiVersion: v1
-
metadata:
-
name: sample-webapp
-
namespace: kube-system
-
labels:
-
name: sample-webapp
-
spec:
-
selector:
-
name: sample-webapp
-
replicas: 1
-
template:
-
metadata:
-
labels:
-
name: sample-webapp
-
spec:
-
containers:
-
- name: sample-webapp
-
image: index.tenxcloud.com/jimmy/k8s-sample-webapp:latest
-
ports:
- - containerPort: 8000
點選(此處)摺疊或開啟
-
kind: Service
-
apiVersion: v1
-
metadata:
-
name: sample-webapp
-
namespace: kube-system
-
labels:
-
name: sample-webapp
-
spec:
-
ports:
-
- port: 8000
-
selector:
- name: sample-webapp
kubectl create -f sample-webapp-service.yaml
locust-master-controller.yaml
點選(此處)摺疊或開啟
-
kind: ReplicationController
-
apiVersion: v1
-
metadata:
-
name: locust-master
-
namespace: kube-system
-
labels:
-
name: locust
-
role: master
-
spec:
-
replicas: 1
-
selector:
-
name: locust
-
role: master
-
template:
-
metadata:
-
labels:
-
name: locust
-
role: master
-
spec:
-
containers:
-
- name: locust
-
image: index.tenxcloud.com/jimmy/locust-tasks:latest
-
env:
-
- name: LOCUST_MODE
-
value: master
-
- name: TARGET_HOST
-
value: http://sample-webapp:8000
-
ports:
-
- name: loc-master-web
-
containerPort: 8089
-
protocol: TCP
-
- name: loc-master-p1
-
containerPort: 5557
-
protocol: TCP
-
- name: loc-master-p2
-
containerPort: 5558
- protocol: TCP
點選(此處)摺疊或開啟
-
kind: Service
-
apiVersion: v1
-
metadata:
-
name: locust-master
-
namespace: kube-system
-
labels:
-
name: locust
-
role: master
-
spec:
-
ports:
-
- port: 8089
-
targetPort: loc-master-web
-
protocol: TCP
-
name: loc-master-web
-
- port: 5557
-
targetPort: loc-master-p1
-
protocol: TCP
-
name: loc-master-p1
-
- port: 5558
-
targetPort: loc-master-p2
-
protocol: TCP
-
name: loc-master-p2
-
selector:
-
name: locust
- role: master
點選(此處)摺疊或開啟
-
kind: ReplicationController
-
apiVersion: v1
-
metadata:
-
name: locust-worker
-
namespace: kube-system
-
labels:
-
name: locust
-
role: worker
-
spec:
-
replicas: 1
-
selector:
-
name: locust
-
role: worker
-
template:
-
metadata:
-
labels:
-
name: locust
-
role: worker
-
spec:
-
containers:
-
- name: locust
-
image: index.tenxcloud.com/jimmy/locust-tasks:latest
-
env:
-
- name: LOCUST_MODE
-
value: worker
-
- name: LOCUST_MASTER
-
value: locust-master
-
- name: TARGET_HOST
- value: http://sample-webapp:8000
kubectl create -f locust-master-service.yaml
kubectl create -f locust-worker-controller.yaml
五:配置Traefik
點選(此處)摺疊或開啟
-
- host: locust.donkey
-
http:
-
paths:
-
- path: /
-
backend:
-
serviceName: locust-master
- servicePort: 8089
六:執行測試
訪問http://locust.donkey/ 設定測試引數,進行測試
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2155000/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Locust 進行分散式負載測試分散式負載
- Locust效能測試實踐
- Locust如何實現逐步負載?負載
- Windows平臺分散式架構實踐 - 負載均衡(轉載)Windows分散式架構負載
- Locust(Python負載測試工具)簡介和安裝方法Python負載
- kubernetes實踐之十三: 負載均衡機制Ingress負載
- 乾貨 | 獨創分散式網路負載均衡最佳實踐分散式負載
- 搞懂分散式技術9:Nginx負載均衡原理與實踐分散式Nginx負載
- locust多程序實現分散式壓測遇到的問題分散式
- JMeter分散式壓測/JMeter負載新增/jmeter負載均衡/jmeter Windows系統壓測負載新增JMeter分散式負載Windows
- 車載乙太網第二彈|測試之實錘-AVB測試實踐
- 4.10 負載均衡分散式負載分散式
- 效能測試:分散式測試分散式
- 效能測試工具Locust
- Kubernetes之Pod工作負載負載
- 負載測試工具Ripplet負載
- (一)效能測試(壓力測試、負載測試)負載
- jmeter壓力測試實現負載均衡JMeter負載
- Jmeter分散式測試JMeter分散式
- Bumblebee之負載、限流和故障處理實踐負載
- TestLoadBalancer測試均衡負載負載
- 分散式鎖實踐分散式
- 從網路到分散式-負載均衡分散式負載
- docker && k8s 分散式壓測 locust_boomer 方案DockerK8S分散式OOM
- 介面測試,負載測試,併發測試,壓力測試區別負載
- kubernetes實踐之七十二:Istio之策略與遙測
- 技術分享| Etcd如何實現分散式負載均衡及分散式通知與協調分散式負載
- 分散式系統關注點——如何去實施「負載均衡」?分散式負載
- 效能測試、負載測試、壓力測試有什麼區別?負載
- TensorFlow分散式實踐分散式
- 開源的負載測試/壓力測試工具 NBomber負載
- (轉載 --- 上篇) 分散式系統測試那些事兒 - 理念分散式
- [原始碼解析] 並行分散式任務佇列 Celery 之 負載均衡原始碼並行分散式佇列負載
- 在 Kubernetes 上快速測試 Citus 分散式 PostgreSQL 叢集(分散式表,共置,引用表,列儲存)分散式SQL
- ORACLE 11G負載均衡測試Oracle負載
- locust+influxdb+grafana 實現自定義測試報告UXGrafana測試報告
- ApiTestEngine 整合 Locust 實現更好的效能測試體驗API
- Jmeter效能測試:高併發分散式效能測試JMeter分散式