github.com/kubeshop/testkube@v1.17.23/contrib/executor/jmeter/pkg/parser/xjtl_test.go (about)

     1  package parser
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  const (
    10  	badXML = `
    11  12345
    12  `
    13  
    14  	successXML = `
    15  <testResults version="1.2">
    16  	<httpSample t="1259" it="0" lt="124" ct="80" ts="1690288938130" s="true" lb="Testkube - HTTP Request" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="65222" sby="366" ng="1" na="1">
    17  		<assertionResult>
    18  			<name>Response Assertion</name>
    19  			<failure>false</failure>
    20  			<error>false</error>
    21  		</assertionResult>
    22  	</httpSample>
    23  </testResults>
    24  `
    25  
    26  	failedXML = `
    27  <testResults version="1.2">
    28  	<httpSample t="51" it="0" lt="0" ct="51" ts="1690366471701" s="false" lb="Testkube - HTTP Request" rc="Non HTTP response code: java.net.UnknownHostException" rm="Non HTTP response message: testkube.fakeshop.io: Name does not resolve" tn="Thread Group 1-1" dt="text" by="2327" sby="0" ng="1" na="1">
    29  		<assertionResult>
    30  			<name>Response Assertion</name>
    31  			<failure>true</failure>
    32  			<error>false</error>
    33  			<failureMessage>Test failed: code expected to equal / ****** received : [[[Non HTTP response code: java.net.UnknownHostException]]] ****** comparison: [[[200 ]]] /</failureMessage>
    34  		</assertionResult>
    35  	</httpSample>
    36  </testResults>
    37  `
    38  
    39  	mixedXML = `
    40  <testResults version="1.2">
    41  	<sample t="2" it="0" lt="0" ct="0" ts="1690724003768" s="true" lb="========== Starting GR Alarm verification =========" rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="7109" sby="0" ng="1" na="1">
    42  	</sample>
    43  	<httpSample t="946" it="0" lt="935" ct="737" ts="1690724004825" s="true" lb="Get Token - HTTP Request" rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="3774" sby="350" ng="1" na="1">
    44  	</httpSample>	
    45  	<sample t="0" it="0" lt="0" ct="0" ts="1690724048711" s="true" lb="Dummy cmdb Alarm cleared at : 2022-03-22T09:05:01.000Z " rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="10328" sby="0" ng="1" na="1">
    46  	</sample>	
    47  	<sample t="1" it="0" lt="0" ct="0" ts="1690724048871" s="false" lb="Alarms status are inactive. Unexpected Result! Failing the test!" rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="10328" sby="0" ng="1" na="1">
    48  		<assertionResult>
    49  		<name>Fail Test</name>
    50  		<failure>true</failure>
    51  		<error>false</error>
    52  		<failureMessage>Test FAILED</failureMessage>
    53  		</assertionResult>
    54  	</sample>		
    55  </testResults>
    56  `
    57  )
    58  
    59  func TestParseXML(t *testing.T) {
    60  	t.Parallel()
    61  
    62  	t.Run("parse XML success test", func(t *testing.T) {
    63  		t.Parallel()
    64  
    65  		results, err := ParseXML([]byte(successXML))
    66  
    67  		assert.NoError(t, err)
    68  		assert.Equal(t, 1, len(results.HTTPSamples))
    69  		assert.True(t, results.HTTPSamples[0].Success)
    70  		assert.Equal(t, 1259, results.HTTPSamples[0].Time)
    71  		assert.Equal(t, "Testkube - HTTP Request", results.HTTPSamples[0].Label)
    72  		assert.Equal(t, "Response Assertion", results.HTTPSamples[0].AssertionResult.Name)
    73  	})
    74  
    75  	t.Run("parse XML failed test", func(t *testing.T) {
    76  		t.Parallel()
    77  
    78  		results, err := ParseXML([]byte(failedXML))
    79  
    80  		assert.NoError(t, err)
    81  		assert.Equal(t, 1, len(results.HTTPSamples))
    82  		assert.False(t, results.HTTPSamples[0].Success)
    83  		assert.Equal(t, 51, results.HTTPSamples[0].Time)
    84  		assert.Equal(t, "Testkube - HTTP Request", results.HTTPSamples[0].Label)
    85  		assert.Equal(t, "Test failed: code expected to equal / ****** received : [[[Non HTTP response code: java.net.UnknownHostException]]] ****** comparison: [[[200 ]]] /", results.HTTPSamples[0].AssertionResult.FailureMessage)
    86  	})
    87  
    88  	t.Run("parse bad XML", func(t *testing.T) {
    89  		t.Parallel()
    90  
    91  		_, err := ParseXML([]byte(badXML))
    92  
    93  		assert.EqualError(t, err, "EOF")
    94  	})
    95  
    96  	t.Run("parse XML mixed test", func(t *testing.T) {
    97  		t.Parallel()
    98  
    99  		results, err := ParseXML([]byte(mixedXML))
   100  
   101  		assert.NoError(t, err)
   102  		assert.Equal(t, 1, len(results.HTTPSamples))
   103  		assert.True(t, results.HTTPSamples[0].Success)
   104  		assert.Equal(t, 946, results.HTTPSamples[0].Time)
   105  		assert.Equal(t, "Get Token - HTTP Request", results.HTTPSamples[0].Label)
   106  
   107  		assert.Equal(t, 3, len(results.Samples))
   108  		assert.False(t, results.Samples[2].Success)
   109  		assert.Equal(t, 1, results.Samples[2].Time)
   110  		assert.Equal(t, "Alarms status are inactive. Unexpected Result! Failing the test!", results.Samples[2].Label)
   111  		assert.Equal(t, "Fail Test", results.Samples[2].AssertionResult.Name)
   112  	})
   113  }