# vmalert-tool VMAlert command-line tool ## Unit testing for rules You can use `vmalert-tool` to run unit tests for alerting and recording rules. It will perform the following actions: * sets up an isolated VictoriaMetrics instance; * simulates the periodic ingestion of time series; * queries the ingested data for recording and alerting rules evaluation like [vmalert](https://docs.victoriametrics.com/vmalert.html); * checks whether the firing alerts or resulting recording rules match the expected results. See how to run vmalert-tool for unit test below: ``` # Run vmalert-tool with one or multiple test files via --files cmd-line flag ./vmalert-tool unittest --files test1.yaml --files test2.yaml ``` vmalert-tool unittest is compatible with [Prometheus config format for tests](https://prometheus.io/docs/prometheus/latest/configuration/unit_testing_rules/#test-file-format) except `promql_expr_test` field. Use `metricsql_expr_test` field name instead. The name is different because vmalert-tool validates and executes [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html) expressions, which aren't always backward compatible with [PromQL](https://prometheus.io/docs/prometheus/latest/querying/basics/). ### Test file format The configuration format for files specified in `--files` cmd-line flag is the following: ```yaml # Path to the files or http url containing [rule groups](https://docs.victoriametrics.com/vmalert.html#groups) configuration. # Enterprise version of vmalert-tool supports S3 and GCS paths to rules. rule_files: [ - ] # The evaluation interval for rules specified in `rule_files` [ evaluation_interval: | default = 1m ] # Groups listed below will be evaluated by order. # Not All the groups need not be mentioned, if not, they will be evaluated by define order in rule_files. group_eval_order: [ - ] # The list of unit test files to be checked during evaluation. tests: [ - ] ``` #### `` ```yaml # Interval between samples for input series interval: # Time series to persist into the database according to configured before running tests. input_series: [ - ] # Name of the test group, optional [ name: ] # Unit tests for alerting rules alert_rule_test: [ - ] # Unit tests for Metricsql expressions. metricsql_expr_test: [ - ] # External labels accessible for templating. external_labels: [ : ... ] ``` #### `` ```yaml # series in the following format '{