Beispiel #1
0
    def test_extend_data_and_assertion(self):
        # check aggregated results for error details in the corresponding state record:
        #   'current': {
        #     <label>:
        #       {'jmeter_errors': {..
        #           'errors': [{'msg':..., 'tag':..., ...}, ...]..}, # there must be real jmeter errors and nothing more
        #        'http_errors': {..}, 'success': {..}, ...}}, <other_labels>...}
        self.configure({
            "execution": [{
                "data-file":
                RESOURCES_DIR + "/jmeter/jtl/kpi-pair1.jtl",
                "errors-file":
                RESOURCES_DIR + "/jmeter/jtl/error-pair1.jtl",
            }]
        })
        self.engine.aggregator.settings['extend-aggregation'] = True
        watcher = MockListener()
        watcher.engine = self.obj.engine

        self.engine.aggregator.prepare()
        self.obj.prepare()
        self.engine.aggregator.add_listener(watcher)
        self.engine.aggregator.startup()
        self.obj.startup()

        while not self.obj.check():
            self.engine.aggregator.check()

        self.obj.shutdown()
        self.engine.aggregator.shutdown()
        self.obj.post_process()
        self.obj.engine.aggregator.post_process()
        dp = watcher.results[0]['current']

        success_label = 'Response Code 200'
        self.assertEqual([],
                         dp[success_label][SAMPLE_STATES[0]][KPISet.ERRORS])

        jmeter_error_label = 'Invalid Assert (No results for path)'
        sample_jmeter_error = ('No results for path: $[\'error\']',
                               'JSON Path Assertion - No results for path')
        jmeter_errors_err = [
            (e['msg'], e['tag'])
            for e in dp[jmeter_error_label][SAMPLE_STATES[1]][KPISet.ERRORS]
        ]
        self.assertEqual({sample_jmeter_error}, set(jmeter_errors_err))

        http_error_label = 'Response Code 400'
        sample_http_error = ('Bad Request', None)
        http_errors_err = [
            (e['msg'], e['tag'])
            for e in dp[http_error_label][SAMPLE_STATES[2]][KPISet.ERRORS]
        ]
        self.assertEqual({sample_http_error}, set(http_errors_err))
 def test_set_rtimes_len(self):
     self.obj.settings['histogram-initial'] = 10.0
     self.obj.prepare()
     reader = get_fail_reader()
     self.obj.add_underling(reader)
     listener = MockListener()
     listener.engine = self.obj.engine
     self.obj.add_listener(listener)
     self.obj.check()
     for dp in listener.results:
         for kpiset in dp['cumulative'].values():
             self.assertEqual(10000, kpiset[KPISet.RESP_TIMES].high)
         for kpiset in dp['current'].values():
             self.assertEqual(10000, kpiset[KPISet.RESP_TIMES].high)
Beispiel #3
0
    def test_sum_of_errors(self):
        # get_mixed_label was called even in not extended_aggregation case
        # it caused lack of error info in label' kpi sets (but overall ('') errors list was correct).
        # DE520333
        self.configure({
            "execution": [{
                "data-file":
                RESOURCES_DIR + "/jmeter/jtl/kpi-pair1.jtl",
                "errors-file":
                RESOURCES_DIR + "/jmeter/jtl/error-pair1.jtl",
            }]
        })
        self.engine.aggregator.settings['extend-aggregation'] = False
        watcher = MockListener()
        watcher.engine = self.obj.engine

        self.engine.aggregator.prepare()
        self.obj.prepare()
        self.engine.aggregator.add_listener(watcher)
        self.engine.aggregator.startup()
        self.obj.startup()

        while not self.obj.check():
            self.engine.aggregator.check()

        self.obj.shutdown()
        self.engine.aggregator.shutdown()
        self.obj.post_process()
        self.obj.engine.aggregator.post_process()
        dp = watcher.results[0]['current']

        assertions = {label: 0 for label in dp}
        http_errors = {label: 0 for label in dp}
        for label in dp:
            for error in dp[label]['errors']:
                if error['type'] == 1:
                    assertions[label] += error['cnt']
                elif error['type'] == 2:
                    http_errors[label] += error['cnt']

        sum_of_assertions = sum(
            [assertions[label] for label in assertions if label != ''])
        sum_of_http_errors = sum(
            [http_errors[label] for label in assertions if label != ''])
        self.assertEqual(sum_of_assertions, assertions[''])
        self.assertEqual(sum_of_http_errors, http_errors[''])
    def test_extend_data(self):
        # test migrated from taurus-cloud (LDJSONExtractor tests)

        # check aggregated results for the following hierarchy:
        # {...
        # 'current': {
        # <label>:
        # {'success':{..}, 'http_errors':{..}, 'jmeter_errors':{..},
        # 'success_jmeter_errors':{..}, 'http_errors_jmeter_errors':{..}, 'success_http_errors':{..},
        # '':{..}}},
        # '': <the same states>} # end of 'current' record
        # ...}
        self.obj.settings['extend-aggregation'] = True
        reader = MockReader()
        watcher = MockListener()
        watcher.engine = self.obj.engine

        reader.buffer_scale_idx = '100.0'
        # data format: t_stamp, label, conc, r_time, con_time, latency, r_code, error, trname, byte_count
        reader.data.append((1, "a", 1, 1, 1, 1, '200', None, '', 1))
        reader.data.append((2, "b", 1, 2, 2, 2, '200', 'OK', '', 2))
        reader.data.append((2, "b", 1, 3, 3, 3, '404', "Not Found", '', 3))
        reader.data.append((2, "c", 1, 4, 4, 4, '200', None, '', 4))
        reader.data.append((3, "d", 1, 5, 5, 5, '200', None, '', 5))
        reader.data.append((5, "b", 1, 6, 6, 6, '200', None, '', 6))
        reader.data.append((5, "c", 1, 7, 7, 7, '200', None, '', 7))
        original_labels = list(d[1] for d in reader.data)

        self.obj.add_underling(reader)
        self.obj.add_listener(watcher)

        self.obj.prepare()
        self.obj.startup()
        self.obj.check()
        self.obj.shutdown()
        self.obj.post_process()

        self.assertEqual(4, len(watcher.results))
        allowed_states = set(SAMPLE_STATES + AGGREGATED_STATES + (ConsolidatingAggregator.OVERALL_STATE,))

        for dp in watcher.results:
            written_kpis = dp['current']
            for label in written_kpis:
                self.assertIn(label, original_labels + [''], f"Wrong original label: {label}")
                for state in written_kpis[label].keys():
                    self.assertIn(state, allowed_states, f"Wrong state '{state}' for label '{label}'")