Kubernetes library for Robot Framework
Project description
KubeLibrary
RobotFramework library for testing Kubernetes cluster
Quick start
# install library itself
pip install robotframework-kubelibrary
# export KUBECONFIG
export KUBECONFIG=~/.kube/config
# run example tests
pip install robotframework-requests
git clone https://github.com/devopsspiral/KubeLibrary.git
cd KubeLibrary
robot -e prerelease testcases
Example testcase
Pods in kube-system are ok
[Documentation] Test if all pods in kube-system initiated correctly and are running or succeeded
[Tags] cluster smoke
Given kubernetes API responds
When getting all pods in "kube-system"
Then all pods in "kube-system" are running or succeeded
Grafana has correct version
[Documentation] Test if Grafana container image is in correct version
[Tags] grafana
Given kubernetes API responds
When accessing "grafana-" excluding "svclb" container images version in "default"
Then "grafana/grafana:6.5.0" version is used
More examples in testcases/ directory.
To see all the tests passing execute below commands.
Documentation
Cluster Tests
# run cluster tests
robot -i cluster -e prerelease testcases/
Grafana Tests
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install grafana grafana/grafana -f testcases/grafana/values.yaml
# run grafana tests
export KLIB_POD_PATTERN='grafana.*'
export KLIB_POD_ANNOTATIONS='{"kubelibrary":"testing"}'
export KLIB_POD_NAMESPACE=default
robot -i grafana -e prerelease testcases/
Octopus Tests
git clone https://github.com/kyma-incubator/octopus
helm install octopus octopus/chart/octopus/
# run octopus tests
export KLIB_RESOURCE_LIMITS_MEMORY=30Mi
export KLIB_POD_PATTERN='octopus.*'
export KLIB_RESOURCE_REQUESTS_CPU=100m
export KLIB_POD_LABELS='{"app":"octopus"}'
export KLIB_RESOURCE_LIMITS_CPU=100m
export KLIB_ENV_VARS='{"SECRET_NAME":"webhook-server-secret"}'
export KLIB_POD_NAMESPACE=default
export KLIB_RESOURCE_REQUESTS_MEMORY=20Mi
robot -i octopus -e prerelease testcases/
Other Tests
These tests require the kubelib-test helm-chart to be installed in your test cluster.
# run other library tests
export KLIB_POD_PATTERN='busybox.*'
export KLIB_POD_NAMESPACE=kubelib-tests
export KLIB_POD_LABELS='job-name=busybox-job'
kubectl create namespace $KLIB_POD_NAMESPACE
kubectl label namespaces kubelib-tests test=test
helm install kubelib-test ./test-objects-chart -n $KLIB_POD_NAMESPACE
robot -i other -e prerelease testcases/
Multi Cluster Tests
These tests require more than one cluster and utilize KinD as a setup. Download KinD and install it.
# Create Test Cluster 1
kind create cluster --kubeconfig ./cluster1-conf --name kind-cluster-1
# Create namespace in Test Cluster 1
kubectl create namespace test-ns-1 --context kind-kind-cluster-1 --kubeconfig ./cluster1-conf
# For bearer token auth
kubectl apply -f testcases/reload-config/sa.yaml
MYSA_TOKEN_SECRET=$(kubectl get sa mysa -o jsonpath="{.secrets[0].name}")
export K8S_TOKEN=$(kubectl get secret $MYSA_TOKEN_SECRET --template={{.data.token}} | base64 -d)
kubectl get secret $MYSA_TOKEN_SECRET -o jsonpath="{.data.ca\.crt}" | base64 -d > ca.crt
export K8S_API_URL=$(kubectl config view -o jsonpath='{.clusters[0].cluster.server}')
export K8S_CA_CRT=./ca.crt
# Create Test Cluster 2
kind create cluster --kubeconfig ./cluster2-conf --name kind-cluster-2
# Create namespace in Test Cluster 2
kubectl create namespace test-ns-2 --context kind-kind-cluster-2 --kubeconfig ./cluster2-conf
robot -i reload-config -e prerelease testcases/
# Clean up
kind delete cluster --name kind-cluster-1
kind delete cluster --name kind-cluster-2
Keywords documentation
Keywords documentation can be found in docs/.
Further reading
DevOps spiral article on KubeLibrary
KubeLibrary: Testing Kubernetes with RobotFramework | Humanitec
Development
# clone repo
git clone https://github.com/devopsspiral/KubeLibrary.git
cd KubeLibrary
# create virtualenv
virtualenv .venv
. .venv/bin/activate
pip install -r requirements
Create keyword and test file, import KubeLibrary using below to point to library under development.
*** Settings ***
Library ../src/KubeLibrary/KubeLibrary.py
For development cluster you can use k3s/k3d as described in DevOps spiral article on K3d and skaffold.
Generate docs
python -m robot.libdoc src/KubeLibrary/KubeLibrary.py docs/index.html
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for robotframework-kubelibrary-0.5.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 18ff32095deeb7e2978c37aaca702b337330df2beb44005698e190c5a0d3292e |
|
MD5 | f23b96a3af70fd3605567accbc79432d |
|
BLAKE2b-256 | e2ed6ee85922e2ace4313c25ced78f107ff24b483ea504f8a34876f2446b3db8 |
Hashes for robotframework_kubelibrary-0.5.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bb04477c59932fc09d0f24f9d5846e33496481e458f0c02b59a3c661bf91682 |
|
MD5 | 89aebc7d0b8577284526c7c0df67474c |
|
BLAKE2b-256 | 517f6c2857484254af0d67f40e13a2e8bc3b636a7e469adf7325a2b9d14d301e |