diff --git a/tests/Makefile b/tests/Makefile
index cba482f..7228f44 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -33,6 +33,43 @@ test-qmp-input-visitor: test-qmp-input-visitor.o $(qobject-obj-y) $(qapi-obj-y)
 test-qmp-commands.o: $(addprefix $(qapi-dir)/, test-qapi-types.c test-qapi-types.h test-qapi-visit.c test-qapi-visit.h test-qmp-marshal.c test-qmp-commands.h) $(qapi-obj-y)
 test-qmp-commands: test-qmp-commands.o $(qobject-obj-y) $(qapi-obj-y) $(tools-obj-y) $(qapi-dir)/test-qapi-visit.o $(qapi-dir)/test-qapi-types.o $(qapi-dir)/test-qmp-marshal.o module.o
 
-.PHONY: check
-check: $(CHECKS)
-	gtester $(CHECKS)
+check: check-quick
+
+check-slow: $(CHECKS)
+	gtester -m=slow $(CHECKS)
+
+check-quick: $(CHECKS)
+	gtester -m=quick $(CHECKS)
+
+check-perf: $(CHECKS)
+	gtester -m=perf $(CHECKS)
+
+check-help:
+	@echo "Regression targets:"
+	@echo
+	@echo " make check                Alias for 'make check-quick'"
+	@echo " make check-quick          Run all unit tests in 'quick' mode"
+	@echo " make check-slow           Run all unit tests in 'slow' mode"
+	@echo " make check-perf           Run all unit tests in 'perf' mode"
+	@echo
+	@echo " make check-report         Alias for 'make check-report-quick'"
+	@echo " make check-report-quick   Generate an HTML report for check-quick"
+	@echo " make check-report-slow    Generate an HTML report for check-slow"
+	@echo " make check-report-perf    Generate an HTML report for check-perf"
+	@echo
+	@echo "Please note that HTML reports do not regenerate if the unit tests"
+	@echo "has not changed."
+
+check-report-%.log: $(CHECKS)
+	gtester -m=`echo $@ | cut -f3 -d- | cut -f1 -d.` -o $@ $^
+
+check-report-%.html: check-report-%.log
+	gtester-report $< > $@
+
+check-report-quick: check-report-quick.html
+check-report-slow: check-report-slow.html
+check-report-perf: check-report-perf.html
+
+check-report: check-report-quick
+
+.PHONY: check check-quick check-slow check-perf check-help
