github.com/kubeshop/testkube@v1.17.23/contrib/executor/jmeter/pkg/runner/runner_integration_test.go (about) 1 package runner 2 3 import ( 4 "context" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 11 "github.com/kubeshop/testkube/pkg/envs" 12 13 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 14 "github.com/kubeshop/testkube/pkg/utils/test" 15 ) 16 17 func TestRun_Integration(t *testing.T) { 18 test.IntegrationTest(t) 19 t.Parallel() 20 21 ctx := context.Background() 22 23 assert.NoError(t, os.Setenv("ENTRYPOINT_CMD", "jmeter")) 24 25 t.Run("run successful jmeter test", func(t *testing.T) { 26 t.Parallel() 27 28 tempDir, err := os.MkdirTemp("", "*") 29 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 30 defer os.RemoveAll(tempDir) 31 32 params := envs.Params{DataDir: tempDir} 33 runner, err := NewRunner(ctx, params) 34 assert.NoError(t, err) 35 36 execution := testkube.NewQueuedExecution() 37 execution.TestType = "jmeter/test" 38 execution.Content = testkube.NewStringTestContent("") 39 execution.Command = []string{ 40 "<entryPoint>", 41 } 42 execution.Args = []string{ 43 "-n", 44 "-j", 45 "<logFile>", 46 "-t", 47 "<runPath>", 48 "-l", 49 "<jtlFile>", 50 "-e", 51 "-o", 52 "<reportFile>", 53 "<envVars>", 54 } 55 writeTestContent(t, tempDir, "../../examples/kubeshop.jmx") 56 57 execution.Variables = map[string]testkube.Variable{} 58 59 result, err := runner.Run(ctx, *execution) 60 61 assert.NoError(t, err) 62 assert.Empty(t, result.ErrorMessage) 63 assert.Equal(t, testkube.ExecutionStatusPassed, result.Status) 64 assert.Len(t, result.Steps, 1) 65 66 err = cleanup(tempDir) 67 assert.NoError(t, err) 68 }) 69 70 t.Run("run failing jmeter test", func(t *testing.T) { 71 t.Parallel() 72 73 tempDir, err := os.MkdirTemp("", "*") 74 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 75 defer os.RemoveAll(tempDir) 76 77 params := envs.Params{DataDir: tempDir} 78 runner, err := NewRunner(ctx, params) 79 assert.NoError(t, err) 80 81 execution := testkube.NewQueuedExecution() 82 execution.TestType = "jmeter/test" 83 execution.Content = testkube.NewStringTestContent("") 84 execution.Command = []string{ 85 "<entryPoint>", 86 } 87 execution.Args = []string{ 88 "-n", 89 "-j", 90 "<logFile>", 91 "-t", 92 "<runPath>", 93 "-l", 94 "<jtlFile>", 95 "-e", 96 "-o", 97 "<reportFile>", 98 "<envVars>", 99 } 100 writeTestContent(t, tempDir, "../../examples/kubeshop_failed.jmx") 101 102 execution.Variables = map[string]testkube.Variable{} 103 104 result, err := runner.Run(ctx, *execution) 105 106 assert.NoError(t, err) 107 assert.Equal(t, "Test failed: text expected to contain /SOME_NONExisting_String/", result.ErrorMessage) 108 assert.Equal(t, testkube.ExecutionStatusFailed, result.Status) 109 assert.Len(t, result.Steps, 1) 110 111 err = cleanup(tempDir) 112 assert.NoError(t, err) 113 }) 114 115 t.Run("run successful jmeter test with arguments", func(t *testing.T) { 116 t.Parallel() 117 118 tempDir, err := os.MkdirTemp("", "*") 119 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 120 defer os.RemoveAll(tempDir) 121 122 params := envs.Params{DataDir: tempDir} 123 runner, err := NewRunner(ctx, params) 124 assert.NoError(t, err) 125 126 execution := testkube.NewQueuedExecution() 127 execution.TestType = "jmeter/test" 128 execution.Content = testkube.NewStringTestContent("") 129 execution.Command = []string{ 130 "<entryPoint>", 131 } 132 execution.Args = []string{ 133 "-n", 134 "-j", 135 "<logFile>", 136 "-t", 137 "<runPath>", 138 "-l", 139 "<jtlFile>", 140 "-e", 141 "-o", 142 "<reportFile>", 143 "<envVars>", 144 "-Jthreads", 145 "10", 146 "-Jrampup", 147 "0", 148 "-Jloopcount", 149 "1", 150 "-Jip", 151 "sampleip", 152 "-Jport", 153 "1234", 154 } 155 writeTestContent(t, tempDir, "../../examples/kubeshop.jmx") 156 157 result, err := runner.Run(ctx, *execution) 158 159 assert.NoError(t, err) 160 assert.Empty(t, result.ErrorMessage) 161 assert.Equal(t, testkube.ExecutionStatusPassed, result.Status) 162 assert.Len(t, result.Steps, 1) 163 164 err = cleanup(tempDir) 165 assert.NoError(t, err) 166 }) 167 168 } 169 170 func cleanup(tempDir string) error { 171 return os.RemoveAll(filepath.Join(tempDir, "output")) 172 } 173 174 func writeTestContent(t *testing.T, dir string, testScript string) { 175 jmeterScript, err := os.ReadFile(testScript) 176 if err != nil { 177 assert.FailNow(t, "Unable to read jmeter test script") 178 } 179 180 err = os.WriteFile(filepath.Join(dir, "test-content"), jmeterScript, 0644) 181 if err != nil { 182 assert.FailNow(t, "Unable to write jmeter runner test content file") 183 } 184 }