diff --git a/ct/go/util/ct_perf_test.go b/ct/go/util/ct_perf_test.go
index bb3f891..e41c52f 100644
--- a/ct/go/util/ct_perf_test.go
+++ b/ct/go/util/ct_perf_test.go
@@ -72,8 +72,7 @@
 
 func TestConvertCSVToBenchData(t *testing.T) {
 	unittest.SmallTest(t)
-	testDataDir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	testDataDir := testutils.TestDataDir(t)
 	pathToTestCSV := filepath.Join(testDataDir, "test.csv")
 
 	perfData, err := convertCSVToBenchData(TEST_HASH, TEST_GROUP_NAME, TEST_UNIQUE_ID, pathToTestCSV)
diff --git a/go/config/config_test.go b/go/config/config_test.go
index 6e3dc2d..3ad579a 100644
--- a/go/config/config_test.go
+++ b/go/config/config_test.go
@@ -50,8 +50,7 @@
 
 func TestParseConfigFile(t *testing.T) {
 	unittest.MediumTest(t)
-	dir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	dir := testutils.TestDataDir(t)
 	configFile := filepath.Join(dir, "TestParseConfigFile.json5")
 	parsed := TestConfig{}
 	require.NoError(t, ParseConfigFile(configFile, "", &parsed))
@@ -92,6 +91,7 @@
 	configFile := filepath.Join(dir, "nonexistent-file.json5")
 	parsed := TestConfig{}
 	err := ParseConfigFile(configFile, "--main-config", &parsed)
+	require.Error(t, err)
 	require.Regexp(t, `Unable to read --main-config file ".*/nonexistent-file.json5":.* no such file or directory`, err.Error())
 }
 
@@ -103,5 +103,6 @@
 	require.NoError(t, ioutil.WriteFile(configFile, []byte("Hi Mom!"), os.ModePerm))
 	parsed := TestConfig{}
 	err := ParseConfigFile(configFile, "", &parsed)
+	require.Error(t, err)
 	require.Regexp(t, `Unable to parse file ".*/invalid.json5": invalid character 'H' looking for beginning of value`, err.Error())
 }
diff --git a/go/git/gitinfo/gitinfo_test.go b/go/git/gitinfo/gitinfo_test.go
index 7dfe1c5..5aaacc3 100644
--- a/go/git/gitinfo/gitinfo_test.go
+++ b/go/git/gitinfo/gitinfo_test.go
@@ -15,7 +15,7 @@
 
 func TestVCSSuite(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -26,7 +26,7 @@
 
 func TestFrom(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	r, err := NewGitInfo(context.TODO(), repoDir, false, false)
@@ -36,7 +36,7 @@
 
 func TestLastN(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -73,7 +73,7 @@
 
 func TestByIndex(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	r, err := NewGitInfo(context.TODO(), repoDir, false, false)
@@ -83,7 +83,7 @@
 
 func TestLastNIndex(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	r, err := NewGitInfo(context.TODO(), repoDir, false, false)
@@ -93,7 +93,7 @@
 
 func TestIndexOf(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -107,7 +107,7 @@
 
 func TestRange(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	r, err := NewGitInfo(context.TODO(), repoDir, false, false)
@@ -116,7 +116,7 @@
 }
 func TestLog(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -165,7 +165,7 @@
 
 func TestLogFine(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -197,7 +197,7 @@
 
 func TestLogArgs(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -218,7 +218,7 @@
 
 func TestShortList(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -270,7 +270,7 @@
 
 func TestRevList(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -318,7 +318,7 @@
 
 func TestBranchInfo(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
@@ -338,7 +338,7 @@
 
 func TestSetBranch(t *testing.T) {
 	unittest.MediumTest(t)
-	repoDir, cleanup := vcstu.InitTempRepo()
+	repoDir, cleanup := vcstu.InitTempRepo(t)
 	defer cleanup()
 
 	ctx := context.Background()
diff --git a/go/jsonutils/jsonutils_test.go b/go/jsonutils/jsonutils_test.go
index 64fe2bd..3900f47 100644
--- a/go/jsonutils/jsonutils_test.go
+++ b/go/jsonutils/jsonutils_test.go
@@ -70,6 +70,7 @@
 		var got Number
 		err := json.Unmarshal([]byte(tc.in), &got)
 		if tc.err != "" {
+			require.Error(t, err)
 			require.Contains(t, err.Error(), tc.err)
 		} else {
 			require.NoError(t, err)
@@ -108,7 +109,7 @@
 func TestMarshalStringMap_NonEmptyMap_MatchesBuiltInImpl(t *testing.T) {
 	unittest.MediumTest(t)
 	input := map[string]string{}
-	testutils.MustReadJsonFile("mediumparams.json", &input)
+	testutils.ReadJSONFile(t, "mediumparams.json", &input)
 	require.Len(t, input, 50)
 	actual := MarshalStringMap(input)
 	expected, err := json.Marshal(input)
@@ -116,7 +117,7 @@
 	assert.Equal(t, expected, actual, "%s != %s", string(expected), string(actual))
 
 	input2 := map[string]string{}
-	testutils.MustReadJsonFile("smallparams.json", &input2)
+	testutils.ReadJSONFile(t, "smallparams.json", &input2)
 	require.Len(t, input2, 10)
 	actual = MarshalStringMap(input2)
 	expected, err = json.Marshal(input2)
@@ -144,7 +145,7 @@
 
 func BenchmarkMarshalStringMap_10Items(b *testing.B) {
 	input := map[string]string{}
-	testutils.MustReadJsonFile("smallparams.json", &input)
+	testutils.ReadJSONFile(b, "smallparams.json", &input)
 	b.ResetTimer()
 	for i := 0; i < b.N; i++ {
 		b := MarshalStringMap(input)
@@ -156,7 +157,7 @@
 
 func BenchmarkMarshalStringMap_50Items(b *testing.B) {
 	input := map[string]string{}
-	testutils.MustReadJsonFile("mediumparams.json", &input)
+	testutils.ReadJSONFile(b, "mediumparams.json", &input)
 	b.ResetTimer()
 	for i := 0; i < b.N; i++ {
 		b := MarshalStringMap(input)
@@ -168,7 +169,7 @@
 
 func BenchmarkBuiltInJSONMarshal_10Items(b *testing.B) {
 	input := map[string]string{}
-	testutils.MustReadJsonFile("smallparams.json", &input)
+	testutils.ReadJSONFile(b, "smallparams.json", &input)
 	b.ResetTimer()
 	for i := 0; i < b.N; i++ {
 		b, _ := json.Marshal(input)
@@ -180,7 +181,7 @@
 
 func BenchmarkBuiltInJSONMarshal_50Items(b *testing.B) {
 	input := map[string]string{}
-	testutils.MustReadJsonFile("mediumparams.json", &input)
+	testutils.ReadJSONFile(b, "mediumparams.json", &input)
 	b.ResetTimer()
 	for i := 0; i < b.N; i++ {
 		b, _ := json.Marshal(input)
diff --git a/go/testutils/testutils.go b/go/testutils/testutils.go
index c376248..65279f2 100644
--- a/go/testutils/testutils.go
+++ b/go/testutils/testutils.go
@@ -35,16 +35,12 @@
 
 // TestDataDir returns the path to the caller's testdata directory, which
 // is assumed to be "<path to caller dir>/testdata".
-func TestDataDir() (string, error) {
+func TestDataDir(t sktest.TestingT) string {
 	_, thisFile, _, ok := runtime.Caller(0)
-	if !ok {
-		return "", fmt.Errorf("Could not find test data dir: runtime.Caller() failed.")
-	}
+	require.True(t, ok, "Could not find test data dir: runtime.Caller() failed.")
 	for skip := 0; ; skip++ {
 		_, file, _, ok := runtime.Caller(skip)
-		if !ok {
-			return "", fmt.Errorf("Could not find test data dir: runtime.Caller() failed.")
-		}
+		require.True(t, ok, "Could not find test data dir: runtime.Caller() failed.")
 		if file != thisFile {
 			// Under Bazel, the path returned by runtime.Caller() is relative to the workspace's root
 			// directory (e.g. "go/testutils"). We prepend this with the absolute path to the runfiles
@@ -56,82 +52,43 @@
 				file = filepath.Join(bazel.RunfilesDir(), file)
 			}
 
-			return filepath.Join(filepath.Dir(file), "testdata"), nil
+			return filepath.Join(filepath.Dir(file), "testdata")
 		}
 	}
 }
 
-func readFile(filename string) (io.ReadCloser, error) {
-	dir, err := TestDataDir()
-	if err != nil {
-		return nil, fmt.Errorf("Could not read %s: %v", filename, err)
-	}
-	f, err := os.Open(filepath.Join(dir, filename))
-	if err != nil {
-		return nil, fmt.Errorf("Could not read %s: %v", filename, err)
-	}
-	return f, nil
-}
-
 // ReadFileBytes reads a file from the caller's testdata directory and returns its contents as a
 // slice of bytes.
-func ReadFileBytes(filename string) ([]byte, error) {
-	f, err := readFile(filename)
-	if err != nil {
-		return nil, err
-	}
+func ReadFileBytes(t sktest.TestingT, filename string) []byte {
+	f := GetReader(t, filename)
 	b, err := ioutil.ReadAll(f)
-	if err != nil {
-		return nil, fmt.Errorf("Could not read %s: %v", filename, err)
-	}
-	return b, nil
+	require.NoError(t, err, "Could not read %s: %v", filename)
+	require.NoError(t, f.Close())
+	return b
 }
 
 // ReadFile reads a file from the caller's testdata directory.
-func ReadFile(filename string) (string, error) {
-	b, err := ReadFileBytes(filename)
-	if err != nil {
-		return "", err
-	}
-	return string(b), nil
+func ReadFile(t sktest.TestingT, filename string) string {
+	b := ReadFileBytes(t, filename)
+	return string(b)
 }
 
-// MustGetReader reads a file from the caller's testdata directory and panics on
+// GetReader reads a file from the caller's testdata directory and panics on
 // error.
-func MustGetReader(filename string) io.ReadCloser {
-	r, err := readFile(filename)
-	if err != nil {
-		panic(err)
-	}
-	return r
+func GetReader(t sktest.TestingT, filename string) io.ReadCloser {
+	dir := TestDataDir(t)
+	f, err := os.Open(filepath.Join(dir, filename))
+	require.NoError(t, err, "Reading %s from testdir", filename)
+	return f
 }
 
-// MustReadFile returns  from the caller's testdata directory and panics on
-// error.
-func MustReadFile(filename string) string {
-	s, err := ReadFile(filename)
-	if err != nil {
-		panic(err)
-	}
-	return s
-}
-
-// ReadJsonFile reads a JSON file from the caller's testdata directory into the
+// ReadJSONFile reads a JSON file from the caller's testdata directory into the
 // given interface.
-func ReadJsonFile(filename string, dest interface{}) error {
-	f, err := readFile(filename)
-	if err != nil {
-		return err
-	}
-	return json.NewDecoder(f).Decode(dest)
-}
-
-// MustReadJsonFile reads a JSON file from the caller's testdata directory into
-// the given interface and panics on error.
-func MustReadJsonFile(filename string, dest interface{}) {
-	if err := ReadJsonFile(filename, dest); err != nil {
-		panic(err)
-	}
+func ReadJSONFile(t sktest.TestingT, filename string, dest interface{}) {
+	f := GetReader(t, filename)
+	err := json.NewDecoder(f).Decode(dest)
+	require.NoError(t, err, "Decoding JSON in %s", filename)
+	require.NoError(t, f.Close())
 }
 
 // WriteFile writes the given contents to the given file path, reporting any
@@ -159,6 +116,7 @@
 
 // TempDir is a wrapper for ioutil.TempDir. Returns the path to the directory and a cleanup
 // function to defer.
+// TODO(kjlubick) replace this with testing.TempDir()
 func TempDir(t sktest.TestingT) (string, func()) {
 	d, err := ioutil.TempDir("", "testutils")
 	require.NoError(t, err)
diff --git a/go/vcsinfo/bt_vcs/bt_vcs_test.go b/go/vcsinfo/bt_vcs/bt_vcs_test.go
index 678b98a..742ac37 100644
--- a/go/vcsinfo/bt_vcs/bt_vcs_test.go
+++ b/go/vcsinfo/bt_vcs/bt_vcs_test.go
@@ -189,7 +189,7 @@
 
 // setupVCSLocalRepo loads the test repo into a new GitStore and returns an instance of vcsinfo.VCS.
 func setupVCSLocalRepo(t *testing.T, branch string) (vcsinfo.VCS, gitstore.GitStore, func()) {
-	repoDir, cleanup := vcs_testutils.InitTempRepo()
+	repoDir, cleanup := vcs_testutils.InitTempRepo(t)
 	wd, err := ioutil.TempDir("", "")
 	require.NoError(t, err)
 	ctx := context.Background()
diff --git a/go/vcsinfo/testutils/repo.go b/go/vcsinfo/testutils/repo.go
index 14aac3e..af948ad 100644
--- a/go/vcsinfo/testutils/repo.go
+++ b/go/vcsinfo/testutils/repo.go
@@ -5,6 +5,8 @@
 	"os"
 	"path/filepath"
 
+	"go.skia.org/infra/go/sktest"
+
 	"go.skia.org/infra/go/sklog"
 	go_testutils "go.skia.org/infra/go/testutils"
 	"go.skia.org/infra/go/util/zip"
@@ -37,11 +39,8 @@
 // newTempRepo assumes the repo is called testrepo.zip, is in a directory
 // called testdata under the directory of the unit test that is calling it
 // and contains a single directory 'testrepo'.
-func newTempRepo() *tempRepo {
-	testDataDir, err := go_testutils.TestDataDir()
-	if err != nil {
-		sklog.Fatal("Failed to locate test data dir:", err)
-	}
+func newTempRepo(t sktest.TestingT) *tempRepo {
+	testDataDir := go_testutils.TestDataDir(t)
 	ret := newTempRepoFrom(filepath.Join(testDataDir, "testrepo.zip"))
 	ret.Dir = filepath.Join(ret.Dir, "testrepo")
 	return ret
diff --git a/go/vcsinfo/testutils/vcsinfo_testutils.go b/go/vcsinfo/testutils/vcsinfo_testutils.go
index 5b603a5..b405694 100644
--- a/go/vcsinfo/testutils/vcsinfo_testutils.go
+++ b/go/vcsinfo/testutils/vcsinfo_testutils.go
@@ -17,8 +17,8 @@
 // InitTempRepo creates a temporary git repository from ./testdata/testrepo.zip.
 // It returns the path to the repo directory and a cleanup function that should
 // be called in a deferred.
-func InitTempRepo() (string, func()) {
-	tr := newTempRepo()
+func InitTempRepo(t sktest.TestingT) (string, func()) {
+	tr := newTempRepo(t)
 	sklog.Infof("YYY: %s", tr.Dir)
 	return tr.Dir, tr.Cleanup
 }
diff --git a/gold-client/cmd/goldctl/cmd_diff_test.go b/gold-client/cmd/goldctl/cmd_diff_test.go
index 081c1f1..29802aa 100644
--- a/gold-client/cmd/goldctl/cmd_diff_test.go
+++ b/gold-client/cmd/goldctl/cmd_diff_test.go
@@ -23,8 +23,7 @@
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
 
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := &mocks.HTTPClient{}
 	j, err := json.Marshal(frontend.DigestListResponse{Digests: []types.Digest{a05Digest, a09Digest}})
diff --git a/gold-client/cmd/goldctl/cmd_imgtest_test.go b/gold-client/cmd/goldctl/cmd_imgtest_test.go
index 77bd8c0..552764d 100644
--- a/gold-client/cmd/goldctl/cmd_imgtest_test.go
+++ b/gold-client/cmd/goldctl/cmd_imgtest_test.go
@@ -89,8 +89,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-instance-gold.skia.org").Build()
 
@@ -166,8 +165,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-custom-gold-url.example.com").Build()
 
@@ -245,8 +243,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-instance-gold.skia.org").Positive("pixel-tests", blankDigest).Build()
 
@@ -314,8 +311,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-instance-gold.skia.org").Positive("pixel-tests", blankDigest).Build()
 
@@ -415,8 +411,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	keysFile := filepath.Join(workDir, "keys.json")
 	require.NoError(t, ioutil.WriteFile(keysFile, []byte(`{"os": "Android"}`), 0644))
@@ -475,8 +470,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-instance-gold.skia.org").Positive("pixel-tests", blankDigest).Build()
 
@@ -569,8 +563,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-instance-gold.skia.org").Build()
 
@@ -675,8 +668,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-instance-gold.skia.org").Positive("pixel-tests", a01Digest).
 		LatestPositive(a01Digest, paramtools.Params{
@@ -715,8 +707,7 @@
 
 	workDir := t.TempDir()
 	setupAuthWithGSUtil(t, workDir)
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	mh := mockRPCResponses("https://my-instance-gold.skia.org").Positive("pixel-tests", a01Digest).
 		LatestPositive(a01Digest, paramtools.Params{
diff --git a/gold-client/cmd/goldctl/cmd_match_test.go b/gold-client/cmd/goldctl/cmd_match_test.go
index 4d6b27a..69fbc73 100644
--- a/gold-client/cmd/goldctl/cmd_match_test.go
+++ b/gold-client/cmd/goldctl/cmd_match_test.go
@@ -5,8 +5,6 @@
 	"testing"
 
 	"github.com/stretchr/testify/assert"
-	"github.com/stretchr/testify/require"
-
 	"go.skia.org/infra/go/testutils"
 	"go.skia.org/infra/go/testutils/unittest"
 	"go.skia.org/infra/gold-client/go/imgmatching"
@@ -15,8 +13,7 @@
 func TestMatch_Fuzzy_ImagesAreWithinTolerance_ExitCodeZero(t *testing.T) {
 	unittest.MediumTest(t)
 
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	// Call imgtest match using the fuzzy match algorithm
 	ctx, output, exit := testContext(nil, nil, nil, nil)
@@ -43,8 +40,7 @@
 func TestMatch_Sobel_ImagesAreVeryDifferent_ExitCodeZero(t *testing.T) {
 	unittest.MediumTest(t)
 
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 
 	// Call imgtest match using the fuzzy match algorithm
 	ctx, output, exit := testContext(nil, nil, nil, nil)
diff --git a/golden/go/config/config_test.go b/golden/go/config/config_test.go
index 77340c6..e820050 100644
--- a/golden/go/config/config_test.go
+++ b/golden/go/config/config_test.go
@@ -28,13 +28,12 @@
 func TestLoadFromJSON5_Success(t *testing.T) {
 	unittest.MediumTest(t)
 
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 	commonPath := filepath.Join(td, "common.json5")
 	specificPath := filepath.Join(td, "specific.json5")
 
 	var tsc testSpecificConfig
-	err = LoadFromJSON5(&tsc, &commonPath, &specificPath)
+	err := LoadFromJSON5(&tsc, &commonPath, &specificPath)
 	require.NoError(t, err)
 
 	assert.Equal(t, testSpecificConfig{
@@ -51,13 +50,12 @@
 func TestLoadFromJSON5_WithDuration_Success(t *testing.T) {
 	unittest.MediumTest(t)
 
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 	commonPath := filepath.Join(td, "common.json5")
 	specificPath := filepath.Join(td, "specific_duration.json5")
 
 	var tsc testSpecificConfig
-	err = LoadFromJSON5(&tsc, &commonPath, &specificPath)
+	err := LoadFromJSON5(&tsc, &commonPath, &specificPath)
 	require.NoError(t, err)
 
 	assert.Equal(t, testSpecificConfig{
@@ -75,13 +73,12 @@
 func TestLoadFromJSON5_RequiredFieldMissing_Error(t *testing.T) {
 	unittest.MediumTest(t)
 
-	td, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	td := testutils.TestDataDir(t)
 	commonPath := filepath.Join(td, "common_missing_field.json5")
 	specificPath := filepath.Join(td, "specific.json5")
 
 	var tsc testSpecificConfig
-	err = LoadFromJSON5(&tsc, &commonPath, &specificPath)
+	err := LoadFromJSON5(&tsc, &commonPath, &specificPath)
 	require.Error(t, err)
 	assert.Contains(t, err.Error(), "CommonInt")
 }
diff --git a/golden/go/diff/diff_test.go b/golden/go/diff/diff_test.go
index 831341a..73d9eaa 100644
--- a/golden/go/diff/diff_test.go
+++ b/golden/go/diff/diff_test.go
@@ -254,8 +254,7 @@
 
 // openNRGBAFromFile opens the given file path to a PNG file and returns the image as image.NRGBA.
 func openNRGBAFromFile(t testing.TB, fileName string) *image.NRGBA {
-	b, err := testutils.ReadFileBytes(fileName)
-	require.NoError(t, err, "Failed to read test image %s", fileName)
+	b := testutils.ReadFileBytes(t, fileName)
 	im, err := png.Decode(bytes.NewReader(b))
 	require.NoError(t, err, "invalid png file %s", fileName)
 	return GetNRGBA(im)
diff --git a/golden/go/diffstore/mem_diffstore_test.go b/golden/go/diffstore/mem_diffstore_test.go
index 1e8513a..99a86d9 100644
--- a/golden/go/diffstore/mem_diffstore_test.go
+++ b/golden/go/diffstore/mem_diffstore_test.go
@@ -53,8 +53,7 @@
 
 func TestMD5Hash16BitImageIsCorrect(t *testing.T) {
 	unittest.SmallTest(t)
-	b, err := testutils.ReadFileBytes(fmt.Sprintf("%s.png", digest16BitImage))
-	require.NoError(t, err)
+	b := testutils.ReadFileBytes(t, fmt.Sprintf("%s.png", digest16BitImage))
 	require.Equal(t, md5Hash16BitImage, bytesToMD5HashString(b))
 }
 
@@ -375,8 +374,7 @@
 	mockBucketClient.On("GetFileObjectAttrs", testutils.AnyContext, digest16BitImageGsPath).Return(oa3, nil)
 
 	// digest16BitImage is read.
-	bytes16BitImage, err := testutils.ReadFileBytes(fmt.Sprintf("%s.png", digest16BitImage))
-	require.NoError(t, err)
+	bytes16BitImage := testutils.ReadFileBytes(t, fmt.Sprintf("%s.png", digest16BitImage))
 	reader3 := ioutil.NopCloser(bytes.NewReader(bytes16BitImage))
 	mockBucketClient.On("FileReader", testutils.AnyContext, digest16BitImageGsPath).Return(reader3, nil)
 
diff --git a/golden/go/search/query/query_test.go b/golden/go/search/query/query_test.go
index a4e225a..ccadcfc 100644
--- a/golden/go/search/query/query_test.go
+++ b/golden/go/search/query/query_test.go
@@ -60,8 +60,7 @@
 	unittest.SmallTest(t)
 
 	// Load the list of of live queries.
-	contents, err := testutils.ReadFile("valid_queries.txt")
-	require.NoError(t, err)
+	contents := testutils.ReadFile(t, "valid_queries.txt")
 
 	queries := strings.Split(contents, "\n")
 
@@ -76,8 +75,7 @@
 	unittest.SmallTest(t)
 
 	// Load the list of of live queries.
-	contents, err := testutils.ReadFile("invalid_queries.txt")
-	require.NoError(t, err)
+	contents := testutils.ReadFile(t, "invalid_queries.txt")
 
 	queries := strings.Split(contents, "\n")
 
diff --git a/golden/go/sql/databuilder/databuilder_test.go b/golden/go/sql/databuilder/databuilder_test.go
index 43452ee..2fa8bcd 100644
--- a/golden/go/sql/databuilder/databuilder_test.go
+++ b/golden/go/sql/databuilder/databuilder_test.go
@@ -92,8 +92,7 @@
 			"device": []string{"NUC1234"},
 		})
 
-	dir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	dir := testutils.TestDataDir(t)
 	b.ComputeDiffMetricsFromImages(dir, "2020-12-14T14:14:14Z")
 
 	tables := b.Build()
@@ -536,8 +535,7 @@
 			types.PrimaryKeyField: []string{"test_two"},
 		})
 
-	dir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	dir := testutils.TestDataDir(t)
 	b.ComputeDiffMetricsFromImages(dir, "2020-12-14T14:14:14Z")
 
 	tables := b.Build()
@@ -1414,8 +1412,7 @@
 
 func TestComputeDiffMetricsFromImages_IncompleteData_Panics(t *testing.T) {
 	unittest.SmallTest(t)
-	testDir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	testDir := testutils.TestDataDir(t)
 
 	b := TablesBuilder{}
 	b.SetGroupingKeys(types.CorpusField)
@@ -1437,8 +1434,7 @@
 
 func TestComputeDiffMetricsFromImages_InvalidTime_Panics(t *testing.T) {
 	unittest.SmallTest(t)
-	testDir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	testDir := testutils.TestDataDir(t)
 
 	b := TablesBuilder{}
 	b.SetGroupingKeys(types.CorpusField)
diff --git a/perf/go/ingest/parser/parser_test.go b/perf/go/ingest/parser/parser_test.go
index eff11ab..f9bfcac 100644
--- a/perf/go/ingest/parser/parser_test.go
+++ b/perf/go/ingest/parser/parser_test.go
@@ -38,7 +38,7 @@
 	unittest.SmallTest(t)
 	// Load the sample data file as BenchData.
 
-	r := testutils.MustGetReader(filepath.Join("legacy", "success.json"))
+	r := testutils.GetReader(t, filepath.Join("legacy", "success.json"))
 
 	benchData, err := format.ParseLegacyFormat(r)
 	require.NoError(t, err)
@@ -53,7 +53,7 @@
 func TestGetParamsAndValuesFromFormat_Success(t *testing.T) {
 	unittest.SmallTest(t)
 	// Load the sample data file as BenchData.
-	r := testutils.MustGetReader(filepath.Join("version_1", "success.json"))
+	r := testutils.GetReader(t, filepath.Join("version_1", "success.json"))
 
 	f, err := format.Parse(r)
 	require.NoError(t, err)
@@ -93,7 +93,7 @@
 
 	// Load the sample data file as BenchData.
 
-	r := testutils.MustGetReader(filepath.Join(subdir, filename))
+	r := testutils.GetReader(t, filepath.Join(subdir, filename))
 
 	return ret, file.File{
 		Name:     filename,
@@ -227,7 +227,7 @@
 	unittest.SmallTest(t)
 	// Load the sample data file as BenchData.
 
-	r := testutils.MustGetReader(filepath.Join("legacy", "samples_success.json"))
+	r := testutils.GetReader(t, filepath.Join("legacy", "samples_success.json"))
 
 	b, err := format.ParseLegacyFormat(r)
 	require.NoError(t, err)
@@ -268,7 +268,7 @@
 	unittest.SmallTest(t)
 
 	// Load the sample data file as BenchData.
-	r := testutils.MustGetReader(filepath.Join("legacy", "samples_no_results.json"))
+	r := testutils.GetReader(t, filepath.Join("legacy", "samples_no_results.json"))
 
 	b, err := format.ParseLegacyFormat(r)
 	require.NoError(t, err)
diff --git a/perf/go/trybot/ingester/gerrit/gerrit_test.go b/perf/go/trybot/ingester/gerrit/gerrit_test.go
index abc2e6a..e930fa0 100644
--- a/perf/go/trybot/ingester/gerrit/gerrit_test.go
+++ b/perf/go/trybot/ingester/gerrit/gerrit_test.go
@@ -13,7 +13,7 @@
 	"go.skia.org/infra/perf/go/types"
 )
 
-var createdTime time.Time = time.Date(2020, 01, 01, 00, 00, 00, 0000, time.UTC)
+var createdTime = time.Date(2020, 01, 01, 00, 00, 00, 0000, time.UTC)
 
 func setupForTest(t *testing.T, filename string) (*parser.Parser, file.File) {
 	unittest.SmallTest(t)
@@ -26,7 +26,7 @@
 
 	return p, file.File{
 		Name:     filename,
-		Contents: testutils.MustGetReader(filename),
+		Contents: testutils.GetReader(t, filename),
 		Created:  createdTime,
 	}
 }
diff --git a/perf/nanostat/main_test.go b/perf/nanostat/main_test.go
index 9f4867a..8d852bc 100644
--- a/perf/nanostat/main_test.go
+++ b/perf/nanostat/main_test.go
@@ -7,7 +7,6 @@
 	"testing"
 
 	"github.com/stretchr/testify/assert"
-	"github.com/stretchr/testify/require"
 	"go.skia.org/infra/go/testutils"
 	"go.skia.org/infra/go/testutils/unittest"
 )
@@ -15,8 +14,7 @@
 func TestMain_DifferentFlags_ChangeOutput(t *testing.T) {
 	unittest.SmallTest(t)
 
-	testdataDir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	testdataDir := testutils.TestDataDir(t)
 	oldFile := filepath.Join(testdataDir, "nanobench_old.json")
 	newFile := filepath.Join(testdataDir, "nanobench_new.json")
 
@@ -38,8 +36,7 @@
 		var stdout bytes.Buffer
 		actualMain(&stdout)
 
-		golden, err := testutils.ReadFile(name + ".golden")
-		require.NoError(t, err)
+		golden := testutils.ReadFile(t, name+".golden")
 		assert.Equal(t, golden, stdout.String())
 	})
 }
diff --git a/power/go/testdata/data.go b/power/go/testdata/data.go
index bd14f02..fa5a260 100644
--- a/power/go/testdata/data.go
+++ b/power/go/testdata/data.go
@@ -1,9 +1,6 @@
 package testdata
 
 import (
-	"encoding/json"
-
-	"github.com/stretchr/testify/require"
 	swarming "go.chromium.org/luci/common/api/swarming/swarming/v1"
 	"go.skia.org/infra/go/sktest"
 	"go.skia.org/infra/go/testutils"
@@ -25,11 +22,8 @@
 // MockBotAndId creates a *swarming.SwarmingRpcsBotInfo using the matching JSON
 // file in ./testdata
 func MockBotAndId(t sktest.TestingT, filename, id string) *swarming.SwarmingRpcsBotInfo {
-	j, err := testutils.ReadFile(filename)
-	require.NoError(t, err, "There was a problem reading in the test data")
 	var s swarming.SwarmingRpcsBotInfo
-	err = json.Unmarshal([]byte(j), &s)
-	require.NoError(t, err, "There was a problem parsing the test data")
+	testutils.ReadJSONFile(t, filename, &s)
 	s.BotId = id
 	return &s
 }
diff --git a/task_driver/go/lib/docker/docker_test.go b/task_driver/go/lib/docker/docker_test.go
index 7746f7a..ab94dbe 100644
--- a/task_driver/go/lib/docker/docker_test.go
+++ b/task_driver/go/lib/docker/docker_test.go
@@ -20,8 +20,7 @@
 	// Strip our PATH so we find our version of `docker` which is in the
 	// testdata directory. Then add `/bin` to the PATH since we are running a
 	// Bash shell.
-	testDataDir, err := testutils.TestDataDir()
-	require.NoError(t, err)
+	testDataDir := testutils.TestDataDir(t)
 	dockerCmd = filepath.Join(testDataDir, "docker_mock")
 
 	type args struct {
