def load_expression_suite(self, suite_to_load, monitor_class=None): if monitor_class: monitor_class = load_object(monitor_class) else: monitor_class = ExpressionsMonitor monitor = factory.create_monitor_class_from_dict( monitor_dict=suite_to_load, monitor_class=monitor_class) suite = MonitorSuite(crawler=self.crawler) suite.add_monitor(monitor) return suite
def test_not_configured_without_threshold_setting_or_method(make_data): class TestBaseStatMonitor(BaseStatMonitor): stat_name = "test_statistic" assert_type = "==" data = make_data() runner = data.pop("runner") data["stats"][TestBaseStatMonitor.stat_name] = 100 monitor_suite = MonitorSuite(monitors=[TestBaseStatMonitor]) with pytest.raises(NotConfigured): runner.run(monitor_suite, **data)
def test_fail_if_stat_can_not_be_found(make_data): class TestBaseStatMonitor(BaseStatMonitor): stat_name = "test_statistic" threshold_setting = "THRESHOLD_SETTING" assert_type = ">=" data = make_data({"THRESHOLD_SETTING": 100}) runner = data.pop("runner") data["stats"] = {"other_stats": 1} monitor_suite = MonitorSuite(monitors=[TestBaseStatMonitor]) runner.run(monitor_suite, **data) assert runner.result.monitor_results[ 0].status == settings.MONITOR.STATUS.FAILURE
def test_base_stat_monitor_raise_not_configured_if_setting_not_provided( make_data): class TestBaseStatMonitor(BaseStatMonitor): stat_name = "test_statistic" threshold_setting = "THRESHOLD_SETTING" assert_type = "<" data = make_data() runner = data.pop("runner") data["stats"][TestBaseStatMonitor.stat_name] = 100 monitor_suite = MonitorSuite(monitors=[TestBaseStatMonitor]) with pytest.raises(NotConfigured): runner.run(monitor_suite, **data)
def test_base_stat_monitor_assertion_types(make_data, assertion_type, stat_value, threshold, expected_status): class TestBaseStatMonitor(BaseStatMonitor): stat_name = "test_statistic" threshold_setting = "THRESHOLD_SETTING" assert_type = assertion_type data = make_data({TestBaseStatMonitor.threshold_setting: threshold}) runner = data.pop("runner") data["stats"][TestBaseStatMonitor.stat_name] = stat_value monitor_suite = MonitorSuite(monitors=[TestBaseStatMonitor]) runner.run(monitor_suite, **data) assert runner.result.monitor_results[0].status == expected_status
def test_skipped_if_stat_can_not_be_found_but_monitor_configured_to_be_ignore( make_data, ): class TestBaseStatMonitor(BaseStatMonitor): stat_name = "test_statistic" threshold_setting = "THRESHOLD_SETTING" assert_type = ">=" fail_if_stat_missing = False data = make_data({"THRESHOLD_SETTING": 100}) runner = data.pop("runner") data["stats"] = {"other_stats": 1} monitor_suite = MonitorSuite(monitors=[TestBaseStatMonitor]) runner.run(monitor_suite, **data) assert runner.result.monitor_results[ 0].status == settings.MONITOR.STATUS.SKIPPED
def test_base_stat_monitor_using_get_threshold_method(make_data): class TestBaseStatMonitor(BaseStatMonitor): stat_name = "test_statistic" assert_type = "==" def get_threshold(self): return 100 data = make_data() runner = data.pop("runner") data["stats"][TestBaseStatMonitor.stat_name] = 100 monitor_suite = MonitorSuite(monitors=[TestBaseStatMonitor]) runner.run(monitor_suite, **data) assert runner.result.monitor_results[ 0].status == settings.MONITOR.STATUS.SUCCESS
def test_failure_message_describe_values_expected(make_data): class TestBaseStatMonitor(BaseStatMonitor): stat_name = "test_statistic" threshold_setting = "THRESHOLD_SETTING" assert_type = "==" expected_threshold = 100 obtained_value = 90 data = make_data( {TestBaseStatMonitor.threshold_setting: expected_threshold}) runner = data.pop("runner") data["stats"][TestBaseStatMonitor.stat_name] = obtained_value monitor_suite = MonitorSuite(monitors=[TestBaseStatMonitor]) runner.run(monitor_suite, **data) assert ( runner.result.monitor_results[0].reason == f"Expecting '{TestBaseStatMonitor.stat_name}' to be '{TestBaseStatMonitor.assert_type}' " f"to '{expected_threshold}'. Current value: '{obtained_value}'", )
def item_count_suite(): return MonitorSuite(monitors=[ItemCountMonitor])
def monitor_suite(): return MonitorSuite(monitors=[PeriodicExecutionTimeMonitor])
def new_suite(): return MonitorSuite(monitors=[RetryCountMonitor])
def warning_count_suite(): return MonitorSuite(monitors=[WarningCountMonitor])
def downloader_exception_suite(): return MonitorSuite(monitors=[DownloaderExceptionMonitor])
def item_validation_suite(): return MonitorSuite(monitors=[ItemValidationMonitor])
def error_count_suite(): return MonitorSuite(monitors=[ErrorCountMonitor])
def field_coverage_monitor_suite(): return MonitorSuite(monitors=[FieldCoverageMonitor])
def new_suite(monitors): return MonitorSuite(monitors=monitors)
def new_suite(): return MonitorSuite(monitors=[TotalRequestsMonitor])
def new_suite(): return MonitorSuite(monitors=[FinishReasonMonitor])
def critical_count_suite(): return MonitorSuite(monitors=[CriticalCountMonitor])
def new_suite(): return MonitorSuite(monitors=[UnwantedHTTPCodesMonitor])