diff --git a/util/dvsim/utils_test.py b/util/dvsim/utils_test.py
new file mode 100644
index 0000000..d8267b7
--- /dev/null
+++ b/util/dvsim/utils_test.py
@@ -0,0 +1,77 @@
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+
+'''pytest-based testing for functions in utils.py'''
+
+import os
+import pytest
+from .utils import _subst_wildcards, subst_wildcards
+
+
+def test_subst_wildcards():
+    '''Pytest-compatible test for the subst_wildcards function.'''
+    # Basic checks
+    assert subst_wildcards('foo {x} baz', {'x': 'bar'}) == 'foo bar baz'
+
+    # Stringify
+    assert (subst_wildcards('{a}, {b}, {c}, {d}',
+                            {'a': 'a', 'b': True, 'c': 42, 'd': ['{b}', 10]}) ==
+            'a, 1, 42, 1 10')
+
+    # Ignored wildcards (with or without a match in mdict)
+    assert (subst_wildcards('{a} {b}', {'a': 'aye', 'b': 'bee'},
+                            ignored_wildcards=['a']) ==
+            '{a} bee')
+    assert (subst_wildcards('{a} {b}', {'b': 'bee'},
+                            ignored_wildcards=['a']) ==
+            '{a} bee')
+
+    # Environment variables. We will always have PWD and can probably assume
+    # that this won't itself have any braced substrings.
+    assert (subst_wildcards('{PWD}', {}) == os.environ['PWD'])
+
+    # Missing variable with ignore_error=False, running _subst_wildcards
+    # instead so that we can catch the error. (We assume that 'biggles' isn't
+    # in the environment)
+    with pytest.raises(ValueError) as excinfo:
+        _subst_wildcards('{biggles} {b}', {'b': 'bee'}, [], False, [])
+    assert "unknown wildcard, '{biggles}'" in str(excinfo.value)
+
+    # ignore_error=True.
+    assert (subst_wildcards('{biggles} {b}', {'b': 'bee'},
+                            ignore_error=True) ==
+            '{biggles} bee')
+
+    # Check we support (non-circular) recursion
+    assert (subst_wildcards('{a}', {'a': '{b}', 'b': 'c'}) == 'c')
+
+    # Check we spot circular recursion
+    with pytest.raises(ValueError) as excinfo:
+        _subst_wildcards('{a}', {'a': '{b}', 'b': '{a}'}, [], False, [])
+    assert "circular expansion of wildcard '{a}'" in str(excinfo.value)
+
+    # Check we also complain about circular recursion with ignore_error
+    with pytest.raises(ValueError) as excinfo:
+        _subst_wildcards('{a}', {'a': '{b}', 'b': '{a}'}, [], True, [])
+    assert "circular expansion of wildcard '{a}'" in str(excinfo.value)
+
+    # Computed variable names (probably not a great idea, but it's probably
+    # good to check this works the way we think)
+    assert subst_wildcards('{a}b}', {'a': 'a {', 'b': 'bee'}) == 'a bee'
+
+    # Some eval_cmd calls (using echo, which should always work)
+    assert (subst_wildcards('{eval_cmd}echo foo {b}', {'b': 'bar'}) ==
+            'foo bar')
+
+    # Make sure that nested commands work
+    assert (subst_wildcards('{eval_cmd} {eval_cmd} echo echo a', {}) == 'a')
+
+    # Recursive expansion
+    assert (subst_wildcards('{var}',
+                            {
+                                'var': '{{foo}_xyz_{bar}}',
+                                'foo': 'p',
+                                'bar': 'q',
+                                'p_xyz_q': 'baz'
+                            }) == 'baz')
