github.com/kubeshop/testkube@v1.17.23/test/scripts/executor-tests/run.sh (about) 1 #!/bin/bash 2 set -e 3 4 # params 5 help='false' 6 delete='false' 7 create='false' 8 run='false' 9 follow='false' 10 schedule='false' 11 executor_type='all' 12 namespace='testkube' 13 custom_testsuite='' 14 branch_overwrite='' 15 16 while getopts 'hdcrfse:n:t:b:v' flag; do 17 case "${flag}" in 18 h) help='true' ;; # TODO: describe params 19 d) delete='true' ;; 20 c) create='true' ;; 21 r) run='true' ;; 22 f) follow='true' ;; 23 s) schedule='true' ;; 24 e) executor_type="${OPTARG}" ;; 25 n) namespace="${OPTARG}" ;; 26 t) custom_testsuite="${OPTARG}" ;; 27 b) branch_overwrite="${OPTARG}" ;; 28 v) set -x ;; 29 esac 30 done 31 32 print_title() { 33 border="==================" 34 printf "\n$border\n=== $1\n$border\n" 35 } 36 37 create_update_testsuite_json() { # testsuite_name testsuite_path 38 exit_code=0 39 type="" 40 kubectl testkube --namespace $namespace get testsuite $1 > /dev/null 2>&1 || exit_code=$? 41 42 if [ $exit_code == 0 ] ; then # testsuite already created 43 type="update" 44 else 45 type="create" 46 fi 47 48 if [ "$schedule" = true ] ; then # workaround for appending schedule 49 random_minute="$(($RANDOM % 59))" 50 cat $2 | kubectl testkube --namespace $namespace $type testsuite --name $1 --schedule "$random_minute */4 * * *" 51 else 52 cat $2 | kubectl testkube --namespace $namespace $type testsuite --name $1 53 fi 54 } 55 56 create_update_testsuite() { # testsuite_name testsuite_path 57 kubectl --namespace $namespace apply -f $2 58 59 if [ "$schedule" = true ] ; then # workaround for appending schedule 60 random_minute="$(($RANDOM % 59))" 61 kubectl testkube --namespace $namespace update testsuite --name $1 --schedule "$random_minute */4 * * *" 62 fi 63 } 64 65 run_follow_testsuite() { # testsuite_name 66 follow_param='' 67 if [ "$follow" = true ] ; then 68 follow_param=' -f' 69 fi 70 71 branch_overwrite_param='' 72 if [ -n "$branch_overwrite" ] ; then 73 branch_overwrite_param=" --git-branch $branch_overwrite" 74 fi 75 76 kubectl testkube --namespace $namespace run testsuite $1 $follow_param $branch_overwrite_param 77 } 78 79 common_run() { # name, test_crd_file, testsuite_name, testsuite_file, custom_executor_crd_file 80 name=$1 81 test_crd_file=$2 82 testsuite_name=$3 83 testsuite_file=$4 84 custom_executor_crd_file=$5 85 86 print_title "$name" 87 88 if [ "$delete" = true ] ; then 89 if [ ! -z "$custom_executor_crd_file" ] ; then 90 kubectl --namespace $namespace delete -f $custom_executor_crd_file --ignore-not-found=true 91 fi 92 kubectl --namespace $namespace delete -f $test_crd_file --ignore-not-found=true 93 kubectl --namespace $namespace delete testsuite $testsuite_name -ntestkube --ignore-not-found=true 94 fi 95 96 if [ "$create" = true ] ; then 97 if [ ! -z "$custom_executor_crd_file" ] ; then 98 # Executors (not created by default) 99 kubectl --namespace $namespace apply -f $custom_executor_crd_file 100 fi 101 102 # Tests 103 kubectl --namespace $namespace apply -f $test_crd_file 104 105 # TestsSuites 106 create_update_testsuite "$testsuite_name" "$testsuite_file" 107 fi 108 109 if [ "$run" = true ] && [ "$custom_testsuite" = '' ]; then 110 run_follow_testsuite $testsuite_name 111 fi 112 } 113 114 artillery-smoke() { 115 name="artillery" 116 test_crd_file="test/artillery/executor-smoke/crd/crd.yaml" 117 testsuite_name="executor-artillery-smoke-tests" 118 testsuite_file="test/suites/executor-artillery-smoke-tests.yaml" 119 120 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 121 } 122 123 container-curl-smoke() { 124 name="Container executor - Curl" 125 test_crd_file="test/container-executor/executor-smoke/crd/curl.yaml" 126 testsuite_name="executor-container-curl-smoke-tests" 127 testsuite_file="test/suites/executor-container-curl-smoke-tests.yaml" 128 129 custom_executor_crd_file="test/executors/container-executor-curl.yaml" 130 131 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 132 } 133 134 container-cypress-smoke() { 135 name="Container executor - Cypress" 136 test_crd_file="test/container-executor/executor-smoke/crd/cypress.yaml" 137 testsuite_name="executor-container-cypress-smoke-tests" 138 testsuite_file="test/suites/executor-container-cypress-smoke-tests.yaml" 139 140 custom_executor_crd_file="test/executors/container-executor-cypress.yaml" 141 142 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 143 } 144 145 container-gradle-smoke() { 146 name="Container executor - Gradle" 147 test_crd_file="test/container-executor/executor-smoke/crd/gradle.yaml" 148 testsuite_name="executor-container-gradle-smoke-tests" 149 testsuite_file="test/suites/executor-container-gradle-smoke-tests.yaml" 150 151 custom_executor_crd_file="test/executors/container-executor-gradle.yaml" 152 153 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 154 } 155 156 container-k6-smoke() { 157 name="Container executor - K6" 158 test_crd_file="test/container-executor/executor-smoke/crd/k6.yaml" 159 testsuite_name="executor-container-k6-smoke-tests" 160 testsuite_file="test/suites/executor-container-k6-smoke-tests.yaml" 161 162 custom_executor_crd_file="test/executors/container-executor-k6.yaml" 163 164 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 165 } 166 167 container-maven-smoke() { 168 name="Container executor - Maven" 169 test_crd_file="test/container-executor/executor-smoke/crd/maven.yaml" 170 testsuite_name="executor-container-maven-smoke-tests" 171 testsuite_file="test/suites/executor-container-maven-smoke-tests.yaml" 172 173 custom_executor_crd_file="test/executors/container-executor-maven.yaml" 174 175 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 176 } 177 178 container-playwright-smoke() { 179 name="Container executor - Playwright" 180 test_crd_file="test/container-executor/executor-smoke/crd/playwright.yaml" 181 testsuite_name="executor-container-playwright-smoke-tests" 182 testsuite_file="test/suites/executor-container-playwright-smoke-tests.yaml" 183 184 custom_executor_crd_file="test/executors/container-executor-playwright.yaml" 185 186 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 187 } 188 189 container-postman-smoke() { 190 name="Container executor - Postman" 191 test_crd_file="test/container-executor/executor-smoke/crd/postman.yaml" 192 testsuite_name="executor-container-postman-smoke-tests" 193 testsuite_file="test/suites/executor-container-postman-smoke-tests.yaml" 194 195 custom_executor_crd_file="test/executors/container-executor-postman.yaml" 196 197 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 198 } 199 200 curl-smoke() { 201 name="curl" 202 test_crd_file="test/curl/executor-tests/crd/smoke.yaml" 203 testsuite_name="executor-curl-smoke-tests" 204 testsuite_file="test/suites/executor-curl-smoke-tests.yaml" 205 206 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 207 } 208 209 cypress-smoke() { 210 name="Cypress" 211 test_crd_file="test/cypress/executor-tests/crd/crd.yaml" 212 testsuite_name="executor-cypress-smoke-tests" 213 testsuite_file="test/suites/executor-cypress-smoke-tests.yaml" 214 215 custom_executor_crd_file="test/executors/cypress.yaml" 216 217 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 218 } 219 220 ginkgo-smoke() { 221 name="Ginkgo" 222 test_crd_file="test/ginkgo/executor-tests/crd/smoke.yaml" 223 testsuite_name="executor-ginkgo-smoke-tests" 224 testsuite_file="test/suites/executor-ginkgo-smoke-tests.yaml" 225 226 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 227 } 228 229 gradle-smoke() { 230 name="Gradle" 231 test_crd_file="test/gradle/executor-smoke/crd/crd.yaml" 232 testsuite_name="executor-gradle-smoke-tests" 233 testsuite_file="test/suites/executor-gradle-smoke-tests.yaml" 234 235 custom_executor_crd_file="test/executors/gradle.yaml" 236 237 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 238 } 239 240 jmeter-smoke() { 241 name="JMeter" 242 test_crd_file="test/jmeter/executor-tests/crd/smoke.yaml" 243 testsuite_name="executor-jmeter-smoke-tests" 244 testsuite_file="test/suites/executor-jmeter-smoke-tests.yaml" 245 246 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 247 } 248 249 jmeter-other() { 250 name="JMeter" 251 test_crd_file="test/jmeter/executor-tests/crd/other.yaml" 252 testsuite_name="executor-jmeter-other-tests" 253 testsuite_file="test/suites/executor-jmeter-other-tests.yaml" 254 255 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 256 } 257 258 k6-smoke() { 259 name="k6 smoke" 260 test_crd_file="test/k6/executor-tests/crd/smoke.yaml" 261 testsuite_name="executor-k6-smoke-tests" 262 testsuite_file="test/suites/executor-k6-smoke-tests.yaml" 263 264 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 265 } 266 267 k6-other() { 268 name="k6 other" 269 test_crd_file="test/k6/executor-tests/crd/other.yaml" 270 testsuite_name="executor-k6-other-tests" 271 testsuite_file="test/suites/executor-k6-other-tests.yaml" 272 273 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 274 } 275 276 kubepug-smoke() { 277 name="kubepug" 278 test_crd_file="test/kubepug/executor-smoke/crd/crd.yaml" 279 testsuite_name="executor-kubepug-smoke-tests" 280 testsuite_file="test/suites/executor-kubepug-smoke-tests.yaml" 281 282 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 283 } 284 285 maven-smoke() { 286 name="Maven" 287 test_crd_file="test/maven/executor-smoke/crd/crd.yaml" 288 testsuite_name="executor-maven-smoke-tests" 289 testsuite_file="test/suites/executor-maven-smoke-tests.yaml" 290 291 custom_executor_crd_file="test/executors/maven.yaml" 292 293 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 294 } 295 296 playwright-smoke() { 297 name="playwright" 298 test_crd_file="test/playwright/executor-tests/crd/crd.yaml" 299 testsuite_name="executor-playwright-smoke-tests" 300 testsuite_file="test/suites/executor-playwright-smoke-tests.yaml" 301 302 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 303 } 304 305 postman-smoke() { 306 name="postman" 307 test_crd_file="test/postman/executor-tests/crd/crd.yaml" 308 testsuite_name="executor-postman-smoke-tests" 309 testsuite_file="test/suites/executor-postman-smoke-tests.yaml" 310 311 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 312 } 313 314 soapui-smoke() { 315 name="SoapUI" 316 test_crd_file="test/soapui/executor-smoke/crd/crd.yaml" 317 testsuite_name="executor-soapui-smoke-tests" 318 testsuite_file="test/suites/executor-soapui-smoke-tests.yaml" 319 320 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 321 } 322 323 special-cases-failures() { 324 name="Special Cases - Edge Cases - Expected Failures" 325 test_crd_file="test/special-cases/edge-cases-expected-fails.yaml" 326 testsuite_name="expected-fail" 327 testsuite_file="test/suites/special-cases/edge-cases-expected-fails.yaml" 328 329 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 330 } 331 332 special-cases-large-logs() { 333 name="Special Cases - Large logs" 334 test_crd_file="test/special-cases/large-logs.yaml" 335 testsuite_name="large-logs" 336 testsuite_file="test/suites/special-cases/large-logs.yaml" 337 338 custom_executor_crd_file="test/executors/container-executor-large-logs.yaml" 339 340 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 341 } 342 343 special-cases-large-artifacts() { 344 name="Special Cases - Large artifacts" 345 test_crd_file="test/special-cases/large-artifacts.yaml" 346 testsuite_name="large-artifacts" 347 testsuite_file="test/suites/special-cases/large-artifacts.yaml" 348 349 custom_executor_crd_file="test/executors/container-executor-large-artifacts.yaml" 350 351 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file" 352 } 353 354 special-cases-jmeter() { 355 name="Special Cases - JMeter/JMeterd" 356 test_crd_file="test/jmeter/executor-tests/crd/special-cases.yaml" 357 testsuite_name="jmeter-special-cases" 358 testsuite_file="test/suites/special-cases/jmeter-special-cases.yaml" 359 360 common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" 361 } 362 363 main() { 364 case $executor_type in 365 all) 366 artillery-smoke 367 container-curl-smoke 368 container-cypress-smoke 369 container-gradle-smoke 370 container-k6-smoke 371 container-maven-smoke 372 container-postman-smoke 373 container-playwright-smoke 374 curl-smoke 375 cypress-smoke 376 ginkgo-smoke 377 gradle-smoke 378 jmeter-smoke 379 jmeter-other 380 k6-smoke 381 k6-other 382 kubepug-smoke 383 maven-smoke 384 postman-smoke 385 playwright-smoke 386 soapui-smoke 387 ;; 388 smoke) 389 artillery-smoke 390 container-curl-smoke 391 container-cypress-smoke 392 container-gradle-smoke 393 container-k6-smoke 394 container-maven-smoke 395 container-postman-smoke 396 container-playwright-smoke 397 curl-smoke 398 cypress-smoke 399 ginkgo-smoke 400 gradle-smoke 401 jmeter-smoke 402 k6-smoke 403 kubepug-smoke 404 maven-smoke 405 playwright-smoke 406 postman-smoke 407 soapui-smoke 408 ;; 409 special) 410 special-cases-failures 411 special-cases-large-logs 412 special-cases-large-artifacts 413 special-cases-jmeter 414 ;; 415 *) 416 $executor_type 417 ;; 418 esac 419 420 if [ "$custom_testsuite" != '' ] ; then # create/delete/schedule all resources, but execute only ones from Custom Testsuite 421 filename=$(basename $custom_testsuite) 422 testsuite_name="${filename%%.*}" 423 424 create_update_testsuite "$testsuite_name" "$custom_testsuite" 425 run_follow_testsuite "$testsuite_name" 426 fi 427 } 428 429 main