diff --git a/lib/config/decrypt.spec.ts b/lib/config/decrypt.spec.ts
index f0f604e60a3a1893e341dd7ee36495cb8ddd538b..c79072a5159fabd4debf695e4692cf3a647d0f4f 100644
--- a/lib/config/decrypt.spec.ts
+++ b/lib/config/decrypt.spec.ts
@@ -1,10 +1,9 @@
-import fs from 'fs';
-import { getName } from '../../test/util';
+import { getName, loadFixture } from '../../test/util';
 import { setAdminConfig } from './admin';
 import { decryptConfig } from './decrypt';
 import type { RenovateConfig } from './types';
 
-const privateKey = fs.readFileSync('lib/config/keys/__fixtures__/private.pem');
+const privateKey = loadFixture(__filename, 'private.pem', 'keys');
 
 describe(getName(__filename), () => {
   describe('decryptConfig()', () => {
diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts
index 08acc21349fc430847baf0099d3c6157741f38e1..38e7e4f982ad51b40767d3001f832dcc812a077a 100644
--- a/lib/config/presets/index.spec.ts
+++ b/lib/config/presets/index.spec.ts
@@ -1,6 +1,5 @@
-import { getName, mocked } from '../../../test/util';
+import { getName, loadJsonFixture, mocked } from '../../../test/util';
 import type { RenovateConfig } from '../types';
-import presetIkatyang from './__fixtures__/renovate-config-ikatyang.json';
 import * as _local from './local';
 import * as _npm from './npm';
 import {
@@ -17,6 +16,11 @@ jest.mock('./local');
 const npm = mocked(_npm);
 const local = mocked(_local);
 
+const presetIkatyang = loadJsonFixture(
+  __filename,
+  'renovate-config-ikatyang.json'
+);
+
 npm.getPreset = jest.fn(({ packageName, presetName }) => {
   if (packageName === 'renovate-config-ikatyang') {
     return presetIkatyang.versions[presetIkatyang['dist-tags'].latest][
diff --git a/lib/datasource/cdnjs/index.spec.ts b/lib/datasource/cdnjs/index.spec.ts
index 8535027de59767729648757365a0c15568b716f4..6e6165ee1f647dfd7798df85f67de89494ee7443 100644
--- a/lib/datasource/cdnjs/index.spec.ts
+++ b/lib/datasource/cdnjs/index.spec.ts
@@ -1,21 +1,11 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { id as datasource } from '.';
 
-let res1 = fs.readFileSync(
-  'lib/datasource/cdnjs/__fixtures__/d3-force.json',
-  'utf8'
-);
-res1 = JSON.parse(res1);
-
-let res2 = fs.readFileSync(
-  'lib/datasource/cdnjs/__fixtures__/bulma.json',
-  'utf8'
-);
-res2 = JSON.parse(res2);
+const res1 = loadFixture(__filename, 'd3-force.json');
+const res2 = loadFixture(__filename, 'bulma.json');
 
 const baseUrl = 'https://api.cdnjs.com/';
 
diff --git a/lib/datasource/crate/index.spec.ts b/lib/datasource/crate/index.spec.ts
index dd8e79fdefb2cbec73214847aa06a7a1ecc88537..8bcf8fe19c08b07a6e63f43fa858c7cdb4fbe33d 100644
--- a/lib/datasource/crate/index.spec.ts
+++ b/lib/datasource/crate/index.spec.ts
@@ -5,7 +5,7 @@ import { DirectoryResult, dir } from 'tmp-promise';
 import { dirname, join } from 'upath';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { setAdminConfig } from '../../config/admin';
 import * as memCache from '../../util/cache/memory';
 import { setFsConfig } from '../../util/fs';
@@ -20,12 +20,9 @@ import {
 jest.mock('simple-git');
 const simpleGit: any = _simpleGit;
 
-const res1 = fs.readFileSync('lib/datasource/crate/__fixtures__/libc', 'utf8');
-const res2 = fs.readFileSync(
-  'lib/datasource/crate/__fixtures__/amethyst',
-  'utf8'
-);
-const res3 = fs.readFileSync('lib/datasource/crate/__fixtures__/mypkg', 'utf8');
+const res1 = loadFixture(__filename, 'libc');
+const res2 = loadFixture(__filename, 'amethyst');
+const res3 = loadFixture(__filename, 'mypkg');
 
 const baseUrl =
   'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';
diff --git a/lib/datasource/dart/index.spec.ts b/lib/datasource/dart/index.spec.ts
index 5228b332bf5ca18d11665b2924d44e8d60096d74..abc986a028b1bc75cb6edecc6cf9409346f4bee8 100644
--- a/lib/datasource/dart/index.spec.ts
+++ b/lib/datasource/dart/index.spec.ts
@@ -1,15 +1,9 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadJsonFixture } from '../../../test/util';
 import { id as datasource } from '.';
 
-const body: any = JSON.parse(
-  fs.readFileSync(
-    'lib/datasource/dart/__fixtures__/shared_preferences.json',
-    'utf8'
-  )
-);
+const body = loadJsonFixture(__filename, 'shared_preferences.json');
 
 const baseUrl = 'https://pub.dartlang.org/api/packages/';
 
diff --git a/lib/datasource/galaxy-collection/index.spec.ts b/lib/datasource/galaxy-collection/index.spec.ts
index b7583d605de991867e555a7dae47c65a06171631..32acd8d69a10a1554a64bdc2d73a9caa2ad66cec 100644
--- a/lib/datasource/galaxy-collection/index.spec.ts
+++ b/lib/datasource/galaxy-collection/index.spec.ts
@@ -1,29 +1,28 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 
 import { id as datasource } from '.';
 
-const communityKubernetesBase = fs.readFileSync(
-  'lib/datasource/galaxy-collection/__fixtures__/community_kubernetes_base.json',
-  'utf8'
+const communityKubernetesBase = loadFixture(
+  __filename,
+  'community_kubernetes_base.json'
 );
-const communityKubernetesVersions = fs.readFileSync(
-  'lib/datasource/galaxy-collection/__fixtures__/community_kubernetes_versions.json',
-  'utf8'
+const communityKubernetesVersions = loadFixture(
+  __filename,
+  'community_kubernetes_versions.json'
 );
-const communityKubernetesDetails121 = fs.readFileSync(
-  'lib/datasource/galaxy-collection/__fixtures__/community_kubernetes_version_details_1.2.1.json',
-  'utf8'
+const communityKubernetesDetails121 = loadFixture(
+  __filename,
+  'community_kubernetes_version_details_1.2.1.json'
 );
-const communityKubernetesDetails120 = fs.readFileSync(
-  'lib/datasource/galaxy-collection/__fixtures__/community_kubernetes_version_details_1.2.0.json',
-  'utf8'
+const communityKubernetesDetails120 = loadFixture(
+  __filename,
+  'community_kubernetes_version_details_1.2.0.json'
 );
-const communityKubernetesDetails0111 = fs.readFileSync(
-  'lib/datasource/galaxy-collection/__fixtures__/community_kubernetes_version_details_0.11.1.json',
-  'utf8'
+const communityKubernetesDetails0111 = loadFixture(
+  __filename,
+  'community_kubernetes_version_details_0.11.1.json'
 );
 
 const baseUrl = 'https://galaxy.ansible.com';
diff --git a/lib/datasource/galaxy/index.spec.ts b/lib/datasource/galaxy/index.spec.ts
index 6fb54511189fad3ab9e919db20dd235e5ec30e87..4786daa7281fa5e94860c3897aad9b259bb31949 100644
--- a/lib/datasource/galaxy/index.spec.ts
+++ b/lib/datasource/galaxy/index.spec.ts
@@ -1,18 +1,11 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 
 import { id as datasource } from '.';
 
-const res1 = fs.readFileSync(
-  'lib/datasource/galaxy/__fixtures__/timezone',
-  'utf8'
-);
-const empty = fs.readFileSync(
-  'lib/datasource/galaxy/__fixtures__/empty',
-  'utf8'
-);
+const res1 = loadFixture(__filename, 'timezone');
+const empty = loadFixture(__filename, 'empty');
 
 const baseUrl = 'https://galaxy.ansible.com/';
 
diff --git a/lib/datasource/git-refs/index.spec.ts b/lib/datasource/git-refs/index.spec.ts
index c60b8eb241bbe2a49bdb44b901799e35bd355c66..5e0dc5c31faac9944f961b4dc9a12acb9cd728dd 100644
--- a/lib/datasource/git-refs/index.spec.ts
+++ b/lib/datasource/git-refs/index.spec.ts
@@ -1,7 +1,6 @@
-import fs from 'fs-extra';
 import _simpleGit from 'simple-git';
 import { getPkgReleases } from '..';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { id as datasource, getDigest } from '.';
 
 jest.mock('simple-git');
@@ -9,10 +8,7 @@ const simpleGit: any = _simpleGit;
 
 const depName = 'https://github.com/example/example.git';
 
-const lsRemote1 = fs.readFileSync(
-  'lib/datasource/git-refs/__fixtures__/ls-remote-1.txt',
-  'utf8'
-);
+const lsRemote1 = loadFixture(__filename, 'ls-remote-1.txt');
 
 describe(getName(__filename), () => {
   describe('getReleases', () => {
diff --git a/lib/datasource/git-tags/index.spec.ts b/lib/datasource/git-tags/index.spec.ts
index c449c78d4295622e5e2666098b23a9525299c99b..d1309fa51d89c8428fea2f49ce4c92c4f64c24fc 100644
--- a/lib/datasource/git-tags/index.spec.ts
+++ b/lib/datasource/git-tags/index.spec.ts
@@ -1,7 +1,6 @@
-import fs from 'fs-extra';
 import _simpleGit from 'simple-git';
 import { getPkgReleases } from '..';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { id as datasource, getDigest } from '.';
 
 jest.mock('simple-git');
@@ -9,10 +8,7 @@ const simpleGit: any = _simpleGit;
 
 const depName = 'https://github.com/example/example.git';
 
-const lsRemote1 = fs.readFileSync(
-  'lib/datasource/git-refs/__fixtures__/ls-remote-1.txt',
-  'utf8'
-);
+const lsRemote1 = loadFixture(__filename, 'ls-remote-1.txt', '../git-refs');
 
 describe(getName(__filename), () => {
   describe('getReleases', () => {
diff --git a/lib/datasource/gradle-version/index.spec.ts b/lib/datasource/gradle-version/index.spec.ts
index fc9ac0b290a3f836f718169883a2f87158f7a6eb..dd527dc0e1396f17287742b3a932f72a1a7b5177 100644
--- a/lib/datasource/gradle-version/index.spec.ts
+++ b/lib/datasource/gradle-version/index.spec.ts
@@ -1,14 +1,11 @@
-import fs from 'fs';
 import { GetPkgReleasesConfig, GetReleasesConfig, getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, partial } from '../../../test/util';
+import { getName, loadJsonFixture, partial } from '../../../test/util';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { id as versioning } from '../../versioning/gradle';
 import { id as datasource, getReleases } from '.';
 
-const allResponse: any = fs.readFileSync(
-  'lib/datasource/gradle-version/__fixtures__/all.json'
-);
+const allResponse: any = loadJsonFixture(__filename, 'all.json');
 
 let config: GetPkgReleasesConfig;
 
@@ -32,7 +29,7 @@ describe(getName(__filename), () => {
       httpMock
         .scope('https://services.gradle.org/')
         .get('/versions/all')
-        .reply(200, JSON.parse(allResponse));
+        .reply(200, allResponse);
       const res = await getPkgReleases(config);
       expect(res).toMatchSnapshot();
       expect(res).not.toBeNull();
@@ -44,10 +41,7 @@ describe(getName(__filename), () => {
     });
 
     it('calls configured registryUrls', async () => {
-      httpMock
-        .scope('https://foo.bar')
-        .get('/')
-        .reply(200, JSON.parse(allResponse));
+      httpMock.scope('https://foo.bar').get('/').reply(200, allResponse);
 
       httpMock
         .scope('http://baz.qux')
diff --git a/lib/datasource/helm/index.spec.ts b/lib/datasource/helm/index.spec.ts
index 5e572990251bee3b6c580444e8c54baae6488bde..37e9a119201c4594f7471b25a33da595d14352ac 100644
--- a/lib/datasource/helm/index.spec.ts
+++ b/lib/datasource/helm/index.spec.ts
@@ -1,14 +1,10 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { id as datasource } from '.';
 
 // Truncated index.yaml file
-const indexYaml = fs.readFileSync(
-  'lib/datasource/helm/__fixtures__/index.yaml',
-  'utf8'
-);
+const indexYaml = loadFixture(__filename, 'index.yaml');
 
 describe(getName(__filename), () => {
   describe('getReleases', () => {
diff --git a/lib/datasource/hex/index.spec.ts b/lib/datasource/hex/index.spec.ts
index 44f72778b8f92d1474f05552ba51ab2eebf8fedd..4357cf966fe18c7d17a77aaeefc6aa48568c05b7 100644
--- a/lib/datasource/hex/index.spec.ts
+++ b/lib/datasource/hex/index.spec.ts
@@ -1,18 +1,13 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadJsonFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import * as _hostRules from '../../util/host-rules';
 import { id as datasource } from '.';
 
 const hostRules: any = _hostRules;
 
-let res1 = fs.readFileSync(
-  'lib/datasource/hex/__fixtures__/certifi.json',
-  'utf8'
-);
-res1 = JSON.parse(res1);
+const res1 = loadJsonFixture(__filename, 'certifi.json');
 
 jest.mock('../../util/host-rules');
 
diff --git a/lib/datasource/jenkins-plugins/index.spec.ts b/lib/datasource/jenkins-plugins/index.spec.ts
index 8de09d668839add1cbb20a616a083928c235fc42..3943760e88860d9beb11235180fbce77ced4cbcf 100644
--- a/lib/datasource/jenkins-plugins/index.spec.ts
+++ b/lib/datasource/jenkins-plugins/index.spec.ts
@@ -1,12 +1,19 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadJsonFixture } from '../../../test/util';
 import * as versioning from '../../versioning/docker';
-import jenkinsPluginsVersions from './__fixtures__/plugin-versions.json';
-import jenkinsPluginsInfo from './__fixtures__/update-center.actual.json';
 import { resetCache } from './get';
 import * as jenkins from '.';
 
+const jenkinsPluginsVersions = loadJsonFixture(
+  __filename,
+  'plugin-versions.json'
+);
+const jenkinsPluginsInfo = loadJsonFixture(
+  __filename,
+  'update-center.actual.json'
+);
+
 describe(getName(__filename), () => {
   describe('getReleases', () => {
     const SKIP_CACHE = process.env.RENOVATE_SKIP_CACHE;
diff --git a/lib/datasource/maven/index.spec.ts b/lib/datasource/maven/index.spec.ts
index 9eb446dbf8816e3e1fca5f647337c84d9f81f047..9a411bb8e26bade63d7e9517c9625c4c6683c26f 100644
--- a/lib/datasource/maven/index.spec.ts
+++ b/lib/datasource/maven/index.spec.ts
@@ -1,8 +1,6 @@
-import fs from 'fs';
 import nock from 'nock';
-import { resolve } from 'upath';
 import { Release, getPkgReleases } from '..';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import * as hostRules from '../../util/host-rules';
 import * as mavenVersioning from '../../versioning/maven';
@@ -10,20 +8,14 @@ import { id as datasource } from '.';
 
 const MYSQL_VERSIONS = ['6.0.5', '6.0.6', '8.0.7', '8.0.8', '8.0.9'];
 
-const MYSQL_MAVEN_METADATA = fs.readFileSync(
-  resolve(
-    __dirname,
-    './__fixtures__/repo1.maven.org/maven2/mysql/mysql-connector-java/maven-metadata.xml'
-  ),
-  'utf8'
+const MYSQL_MAVEN_METADATA = loadFixture(
+  __filename,
+  'repo1.maven.org/maven2/mysql/mysql-connector-java/maven-metadata.xml'
 );
 
-const MYSQL_MAVEN_MYSQL_POM = fs.readFileSync(
-  resolve(
-    __dirname,
-    './__fixtures__/repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.12/mysql-connector-java-8.0.12.pom'
-  ),
-  'utf8'
+const MYSQL_MAVEN_MYSQL_POM = loadFixture(
+  __filename,
+  'repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.12/mysql-connector-java-8.0.12.pom'
 );
 
 const config = {
diff --git a/lib/datasource/nuget/index.spec.ts b/lib/datasource/nuget/index.spec.ts
index c8ecb5a1da68d8ee397ceb947981da418377b69c..777089b4ec3f878c48e5c1ca142ce322136daa73 100644
--- a/lib/datasource/nuget/index.spec.ts
+++ b/lib/datasource/nuget/index.spec.ts
@@ -1,7 +1,6 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import { id as versioning } from '../../versioning/nuget';
 import { id as datasource, parseRegistryUrl } from '.';
@@ -10,81 +9,48 @@ const hostRules: any = _hostRules;
 
 jest.mock('../../util/host-rules');
 
-const pkgInfoV3FromNuget = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v3_nuget_org.xml',
-  'utf8'
-);
-const pkgListV3Registration = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v3_registration.json',
-  'utf8'
+const pkgInfoV3FromNuget = loadFixture(__filename, 'nunit/v3_nuget_org.xml');
+const pkgListV3Registration = loadFixture(
+  __filename,
+  'nunit/v3_registration.json'
 );
 
-const pkgListV2 = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v2.xml',
-  'utf8'
-);
-const pkgListV2NoGitHubProjectUrl = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v2_noGitHubProjectUrl.xml',
-  'utf8'
-);
-const pkgListV2NoRelease = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v2_no_release.xml',
-  'utf8'
+const pkgListV2 = loadFixture(__filename, 'nunit/v2.xml');
+const pkgListV2NoGitHubProjectUrl = loadFixture(
+  __filename,
+  'nunit/v2_noGitHubProjectUrl.xml'
 );
-const pkgListV2WithoutProjectUrl = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v2_withoutProjectUrl.xml',
-  'utf8'
+const pkgListV2NoRelease = loadFixture(__filename, 'nunit/v2_no_release.xml');
+const pkgListV2WithoutProjectUrl = loadFixture(
+  __filename,
+  'nunit/v2_withoutProjectUrl.xml'
 );
 
-const pkgListV2Page1of2 = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v2_paginated_1.xml',
-  'utf8'
-);
-const pkgListV2Page2of2 = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/nunit/v2_paginated_2.xml',
-  'utf8'
-);
+const pkgListV2Page1of2 = loadFixture(__filename, 'nunit/v2_paginated_1.xml');
+const pkgListV2Page2of2 = loadFixture(__filename, 'nunit/v2_paginated_2.xml');
 
-const nugetIndexV3 = fs.readFileSync(
-  'lib/datasource/nuget/__fixtures__/v3_index.json',
-  'utf8'
-);
+const nugetIndexV3 = loadFixture(__filename, 'v3_index.json');
 
 const nlogMocks = [
   {
     url: '/v3/registration5-gz-semver2/nlog/index.json',
-    result: fs.readFileSync(
-      'lib/datasource/nuget/__fixtures__/nlog/v3_registration.json',
-      'utf8'
-    ),
+    result: loadFixture(__filename, 'nlog/v3_registration.json'),
   },
   {
     url: '/v3/registration5-gz-semver2/nlog/page/1.0.0.505/4.4.0-beta5.json',
-    result: fs.readFileSync(
-      'lib/datasource/nuget/__fixtures__/nlog/v3_catalog_1.json',
-      'utf8'
-    ),
+    result: loadFixture(__filename, 'nlog/v3_catalog_1.json'),
   },
   {
     url: '/v3/registration5-gz-semver2/nlog/page/4.4.0-beta6/4.6.0-rc2.json',
-    result: fs.readFileSync(
-      'lib/datasource/nuget/__fixtures__/nlog/v3_catalog_2.json',
-      'utf8'
-    ),
+    result: loadFixture(__filename, 'nlog/v3_catalog_2.json'),
   },
   {
     url: '/v3/registration5-gz-semver2/nlog/page/4.6.0-rc3/5.0.0-beta11.json',
-    result: fs.readFileSync(
-      'lib/datasource/nuget/__fixtures__/nlog/v3_catalog_3.json',
-      'utf8'
-    ),
+    result: loadFixture(__filename, 'nlog/v3_catalog_3.json'),
   },
   {
     url: '/v3-flatcontainer/nlog/4.7.3/nlog.nuspec',
-    result: fs.readFileSync(
-      'lib/datasource/nuget/__fixtures__/nlog/nuspec.xml',
-      'utf8'
-    ),
+    result: loadFixture(__filename, 'nlog/nuspec.xml'),
   },
 ];
 
diff --git a/lib/datasource/packagist/index.spec.ts b/lib/datasource/packagist/index.spec.ts
index 33132089277815bb33d1f173d29a53942fac97fc..556339f47b8b59097c113812ab630b2cd00f27e2 100644
--- a/lib/datasource/packagist/index.spec.ts
+++ b/lib/datasource/packagist/index.spec.ts
@@ -1,7 +1,6 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadJsonFixture } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import * as composerVersioning from '../../versioning/composer';
 import { id as versioning } from '../../versioning/loose';
@@ -11,15 +10,9 @@ jest.mock('../../util/host-rules');
 
 const hostRules = _hostRules;
 
-const includesJson: any = fs.readFileSync(
-  'lib/datasource/packagist/__fixtures__/includes.json'
-);
-const beytJson: any = fs.readFileSync(
-  'lib/datasource/packagist/__fixtures__/1beyt.json'
-);
-const mailchimpJson: any = fs.readFileSync(
-  'lib/datasource/packagist/__fixtures__/mailchimp-api.json'
-);
+const includesJson: any = loadJsonFixture(__filename, 'includes.json');
+const beytJson: any = loadJsonFixture(__filename, '1beyt.json');
+const mailchimpJson: any = loadJsonFixture(__filename, 'mailchimp-api.json');
 
 const baseUrl = 'https://packagist.org';
 
@@ -143,7 +136,7 @@ describe(getName(__filename), () => {
         .get('/packages.json')
         .reply(200, packagesJson)
         .get('/include/all$afbf74d51f31c7cbb5ff10304f9290bfb4f4e68b.json')
-        .reply(200, JSON.parse(includesJson));
+        .reply(200, includesJson);
       const res = await getPkgReleases({
         ...config,
         datasource,
@@ -227,7 +220,7 @@ describe(getName(__filename), () => {
         .get(
           '/p/wpackagist-plugin/1beyt$b574a802b5bf20a58c0f027e73aea2a75d23a6f654afc298a8dc467331be316a.json'
         )
-        .reply(200, JSON.parse(beytJson));
+        .reply(200, beytJson);
       const res = await getPkgReleases({
         ...config,
         datasource,
@@ -269,10 +262,7 @@ describe(getName(__filename), () => {
           '/p/providers-2018-09$14346045d7a7261cb3a12a6b7a1a7c4151982530347b115e5e277d879cad1942.json'
         )
         .reply(200, fileJson);
-      httpMock
-        .scope(baseUrl)
-        .get('/p/some/other.json')
-        .reply(200, JSON.parse(beytJson));
+      httpMock.scope(baseUrl).get('/p/some/other.json').reply(200, beytJson);
       const res = await getPkgReleases({
         ...config,
         datasource,
@@ -304,7 +294,7 @@ describe(getName(__filename), () => {
         .get(
           '/p/wpackagist-plugin/1beyt$b574a802b5bf20a58c0f027e73aea2a75d23a6f654afc298a8dc467331be316a.json'
         )
-        .reply(200, JSON.parse(beytJson));
+        .reply(200, beytJson);
       const res = await getPkgReleases({
         ...config,
         datasource,
@@ -334,10 +324,7 @@ describe(getName(__filename), () => {
         .scope('https://composer.renovatebot.com')
         .get('/packages.json')
         .reply(200, packagesJson);
-      httpMock
-        .scope(baseUrl)
-        .get('/p/some/other.json')
-        .reply(200, JSON.parse(beytJson));
+      httpMock.scope(baseUrl).get('/p/some/other.json').reply(200, beytJson);
       const res = await getPkgReleases({
         ...config,
         datasource,
@@ -351,7 +338,7 @@ describe(getName(__filename), () => {
       httpMock
         .scope(baseUrl)
         .get('/p/drewm/mailchimp-api.json')
-        .reply(200, JSON.parse(mailchimpJson));
+        .reply(200, mailchimpJson);
       config.registryUrls = ['https://packagist.org'];
       expect(
         await getPkgReleases({
@@ -367,7 +354,7 @@ describe(getName(__filename), () => {
       httpMock
         .scope(baseUrl)
         .get('/p/drewm/mailchimp-api.json')
-        .reply(200, JSON.parse(mailchimpJson));
+        .reply(200, mailchimpJson);
       config.registryUrls = [];
       expect(
         await getPkgReleases({
diff --git a/lib/datasource/pypi/index.spec.ts b/lib/datasource/pypi/index.spec.ts
index 75c8c8efcc6b43d820abb646db3c855b1b3d95de..6a36bba660daa5c05f517a8b8f216b6a6347baab 100644
--- a/lib/datasource/pypi/index.spec.ts
+++ b/lib/datasource/pypi/index.spec.ts
@@ -1,27 +1,20 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import * as hostRules from '../../util/host-rules';
 import { id as datasource } from '.';
 
-const res1: any = fs.readFileSync(
-  'lib/datasource/pypi/__fixtures__/azure-cli-monitor.json'
+const res1: any = loadFixture(__filename, 'azure-cli-monitor.json');
+const res2: any = loadFixture(__filename, 'azure-cli-monitor-updated.json');
+const htmlResponse = loadFixture(__filename, 'versions-html.html');
+const badResponse = loadFixture(__filename, 'versions-html-badfile.html');
+const dataRequiresPythonResponse = loadFixture(
+  __filename,
+  'versions-html-data-requires-python.html'
 );
-const res2: any = fs.readFileSync(
-  'lib/datasource/pypi/__fixtures__/azure-cli-monitor-updated.json'
-);
-const htmlResponse = fs.readFileSync(
-  'lib/datasource/pypi/__fixtures__/versions-html.html'
-);
-const badResponse = fs.readFileSync(
-  'lib/datasource/pypi/__fixtures__/versions-html-badfile.html'
-);
-const dataRequiresPythonResponse = fs.readFileSync(
-  'lib/datasource/pypi/__fixtures__/versions-html-data-requires-python.html'
-);
-const mixedHyphensResponse = fs.readFileSync(
-  'lib/datasource/pypi/__fixtures__/versions-html-mixed-hyphens.html'
+const mixedHyphensResponse = loadFixture(
+  __filename,
+  'versions-html-mixed-hyphens.html'
 );
 
 const baseUrl = 'https://pypi.org/pypi';
diff --git a/lib/datasource/repology/index.spec.ts b/lib/datasource/repology/index.spec.ts
index 1079805e3a709c1869dba79401e83e8b9714a986..9323908ac1642f70c2cdf294b4c466698e51d996 100644
--- a/lib/datasource/repology/index.spec.ts
+++ b/lib/datasource/repology/index.spec.ts
@@ -1,7 +1,6 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { id as versioning } from '../../versioning/loose';
 import { RepologyPackage, id as datasource } from '.';
@@ -46,26 +45,11 @@ const mockResolverCall = (
   }
 };
 
-const fixtureNginx = fs.readFileSync(
-  `${__dirname}/__fixtures__/nginx.json`,
-  'utf8'
-);
-const fixtureGccDefaults = fs.readFileSync(
-  `${__dirname}/__fixtures__/gcc-defaults.json`,
-  'utf8'
-);
-const fixtureGcc = fs.readFileSync(
-  `${__dirname}/__fixtures__/gcc.json`,
-  'utf8'
-);
-const fixturePulseaudio = fs.readFileSync(
-  `${__dirname}/__fixtures__/pulseaudio.json`,
-  'utf8'
-);
-const fixtureJdk = fs.readFileSync(
-  `${__dirname}/__fixtures__/openjdk.json`,
-  'utf8'
-);
+const fixtureNginx = loadFixture(__filename, `nginx.json`);
+const fixtureGccDefaults = loadFixture(__filename, `gcc-defaults.json`);
+const fixtureGcc = loadFixture(__filename, `gcc.json`);
+const fixturePulseaudio = loadFixture(__filename, `pulseaudio.json`);
+const fixtureJdk = loadFixture(__filename, `openjdk.json`);
 
 describe(getName(__filename), () => {
   describe('getReleases', () => {
diff --git a/lib/datasource/ruby-version/index.spec.ts b/lib/datasource/ruby-version/index.spec.ts
index 759931897df364343d5b9d34425f9f70f0baf1c1..2f95bcfa918996bf489702433136ea58482a9cde 100644
--- a/lib/datasource/ruby-version/index.spec.ts
+++ b/lib/datasource/ruby-version/index.spec.ts
@@ -1,13 +1,9 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { id as datasource } from '.';
 
-const rubyReleasesHtml = fs.readFileSync(
-  'lib/datasource/ruby-version/__fixtures__/releases.html',
-  'utf8'
-);
+const rubyReleasesHtml = loadFixture(__filename, 'releases.html');
 
 describe(getName(__filename), () => {
   describe('getReleases', () => {
diff --git a/lib/datasource/rubygems/__fixtures__/rubygems-org.txt b/lib/datasource/rubygems/__fixtures__/rubygems-org.txt
new file mode 100644
index 0000000000000000000000000000000000000000..69564ff592b916332a211ab020124778f540f6d0
--- /dev/null
+++ b/lib/datasource/rubygems/__fixtures__/rubygems-org.txt
@@ -0,0 +1,18 @@
+created_at: 2017-03-27T04:38:13+00:00
+---
+- 1 05d0116933ba44b0b5d0ee19bfd35ccc
+.cat 0.0.1 631fd60a806eaf5026c86fff3155c289
+0mq 0.1.0,0.1.1,0.1.2,0.2.0,0.2.1,0.3.0,0.4.0,0.4.1,0.5.0,0.5.1,0.5.2,0.5.3 6146193f8f7e944156b0b42ec37bad3e
+0xffffff 0.0.1,0.1.0 0a4a9aeae24152cdb467be02f40482f9
+10to1-crack 0.1.1,0.1.2,0.1.3 e7218e76477e2137355d2e7ded094925
+1234567890_ 1.0,1.1 233e818c2db65d2dad9f9ea9a27b1a30
+12_hour_time 0.0.2,0.0.3,0.0.4 4e58bc03e301f704950410b713c20b69
+16watts-fluently 0.3.0,0.3.1 555088e2b18e97e0293cab1d90dbb0d2
+189seg 0.0.1 c4d329f7d3eb88b6e602358968be0242
+196demo 0.0.0 e00c558565f7b03a438fbd93d854b7de
+1_as_identity_function 1.0.0,1.0.1 bee2f0fbbc3c5c83008c0b8fc64cb168
+1and1 1.1 1853e4495b036ddc5da2035523d48f0d
+1hdoc 0.1.3,0.2.0,0.2.2,0.2.3,0.2.4 7076f29c196df12047a3700c4d6e5915
+1pass 0.1.0,0.1.1,0.1.2 d209547aae4b8f3d67123f18f738ac99
+1pass -0.1.2 abcdef
+21-day-challenge-countdown 0.1.0,0.1.1,0.1.2 57e8873fe713063f4e54e85bbbd709bb
diff --git a/lib/datasource/rubygems/index.spec.ts b/lib/datasource/rubygems/index.spec.ts
index 29c849d9f289c3b9ebbb2b7cd363bd60c20bc04e..92df66b559aba3392b39200105082723e517b6dc 100644
--- a/lib/datasource/rubygems/index.spec.ts
+++ b/lib/datasource/rubygems/index.spec.ts
@@ -1,30 +1,13 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture, loadJsonFixture } from '../../../test/util';
 import * as rubyVersioning from '../../versioning/ruby';
-import railsInfo from './__fixtures__/rails/info.json';
-import railsVersions from './__fixtures__/rails/versions.json';
 import { resetCache } from './get-rubygems-org';
 import * as rubygems from '.';
 
-const rubygemsOrgVersions = `created_at: 2017-03-27T04:38:13+00:00
----
-- 1 05d0116933ba44b0b5d0ee19bfd35ccc
-.cat 0.0.1 631fd60a806eaf5026c86fff3155c289
-0mq 0.1.0,0.1.1,0.1.2,0.2.0,0.2.1,0.3.0,0.4.0,0.4.1,0.5.0,0.5.1,0.5.2,0.5.3 6146193f8f7e944156b0b42ec37bad3e
-0xffffff 0.0.1,0.1.0 0a4a9aeae24152cdb467be02f40482f9
-10to1-crack 0.1.1,0.1.2,0.1.3 e7218e76477e2137355d2e7ded094925
-1234567890_ 1.0,1.1 233e818c2db65d2dad9f9ea9a27b1a30
-12_hour_time 0.0.2,0.0.3,0.0.4 4e58bc03e301f704950410b713c20b69
-16watts-fluently 0.3.0,0.3.1 555088e2b18e97e0293cab1d90dbb0d2
-189seg 0.0.1 c4d329f7d3eb88b6e602358968be0242
-196demo 0.0.0 e00c558565f7b03a438fbd93d854b7de
-1_as_identity_function 1.0.0,1.0.1 bee2f0fbbc3c5c83008c0b8fc64cb168
-1and1 1.1 1853e4495b036ddc5da2035523d48f0d
-1hdoc 0.1.3,0.2.0,0.2.2,0.2.3,0.2.4 7076f29c196df12047a3700c4d6e5915
-1pass 0.1.0,0.1.1,0.1.2 d209547aae4b8f3d67123f18f738ac99
-1pass -0.1.2 abcdef
-21-day-challenge-countdown 0.1.0,0.1.1,0.1.2 57e8873fe713063f4e54e85bbbd709bb`;
+const rubygemsOrgVersions = loadFixture(__filename, 'rubygems-org.txt');
+const railsInfo = loadJsonFixture(__filename, 'rails/info.json');
+const railsVersions = loadJsonFixture(__filename, 'rails/versions.json');
 
 describe(getName(__filename), () => {
   describe('getReleases', () => {
diff --git a/lib/datasource/sbt-package/index.spec.ts b/lib/datasource/sbt-package/index.spec.ts
index ba30b93ad56bfd7cd503352a0dafbfa6561feaaa..2616a41293cae89dfc9f006f63fda9822007ba1a 100644
--- a/lib/datasource/sbt-package/index.spec.ts
+++ b/lib/datasource/sbt-package/index.spec.ts
@@ -1,22 +1,13 @@
-import fs from 'fs';
 import nock from 'nock';
-import upath from 'upath';
 import { getPkgReleases } from '..';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import * as mavenVersioning from '../../versioning/maven';
 import { MAVEN_REPO } from '../maven/common';
 import { parseIndexDir } from '../sbt-plugin/util';
 import * as sbtPlugin from '.';
 
-const mavenIndexHtml = fs.readFileSync(
-  upath.resolve(__dirname, `./__fixtures__/maven-index.html`),
-  'utf8'
-);
-
-const sbtPluginIndex = fs.readFileSync(
-  upath.resolve(__dirname, `./__fixtures__/sbt-plugins-index.html`),
-  'utf8'
-);
+const mavenIndexHtml = loadFixture(__filename, `maven-index.html`);
+const sbtPluginIndex = loadFixture(__filename, `sbt-plugins-index.html`);
 
 describe(getName(__filename), () => {
   it('parses Maven index directory', () => {
diff --git a/lib/datasource/sbt-plugin/index.spec.ts b/lib/datasource/sbt-plugin/index.spec.ts
index ab8cd3e9f7cc074f348411267c472c320cdfeb53..b8228ab50091c8e7bcb6be880ee7440f79f13409 100644
--- a/lib/datasource/sbt-plugin/index.spec.ts
+++ b/lib/datasource/sbt-plugin/index.spec.ts
@@ -1,22 +1,13 @@
-import fs from 'fs';
 import nock from 'nock';
-import upath from 'upath';
 import { getPkgReleases } from '..';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import * as mavenVersioning from '../../versioning/maven';
 import { MAVEN_REPO } from '../maven/common';
 import { parseIndexDir } from './util';
 import * as sbtPlugin from '.';
 
-const mavenIndexHtml = fs.readFileSync(
-  upath.resolve(__dirname, `./__fixtures__/maven-index.html`),
-  'utf8'
-);
-
-const sbtPluginIndex = fs.readFileSync(
-  upath.resolve(__dirname, `./__fixtures__/sbt-plugins-index.html`),
-  'utf8'
-);
+const mavenIndexHtml = loadFixture(__filename, `maven-index.html`);
+const sbtPluginIndex = loadFixture(__filename, `sbt-plugins-index.html`);
 
 describe(getName(__filename), () => {
   it('parses Maven index directory', () => {
diff --git a/lib/datasource/terraform-module/index.spec.ts b/lib/datasource/terraform-module/index.spec.ts
index d7d1d0b7abac6d8d4384f697466aa123291e701e..2d08c2dd29677e91a654e0bdd8b4466cb4c3f0dc 100644
--- a/lib/datasource/terraform-module/index.spec.ts
+++ b/lib/datasource/terraform-module/index.spec.ts
@@ -1,17 +1,16 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { id as datasource } from '.';
 
-const consulData: any = fs.readFileSync(
-  'lib/datasource/terraform-module/__fixtures__/registry-consul.json'
+const consulData: any = loadFixture(__filename, 'registry-consul.json');
+const serviceDiscoveryResult: any = loadFixture(
+  __filename,
+  'service-discovery.json'
 );
-const serviceDiscoveryResult: any = fs.readFileSync(
-  'lib/datasource/terraform-module/__fixtures__/service-discovery.json'
-);
-const serviceDiscoveryCustomResult: any = fs.readFileSync(
-  'lib/datasource/terraform-module/__fixtures__/service-custom-discovery.json'
+const serviceDiscoveryCustomResult: any = loadFixture(
+  __filename,
+  'service-custom-discovery.json'
 );
 
 const baseUrl = 'https://registry.terraform.io';
diff --git a/lib/datasource/terraform-provider/index.spec.ts b/lib/datasource/terraform-provider/index.spec.ts
index c7725e2c744573309a46f258b3dbc6829ebcbb9a..44dfa44b294f2e72daf3814a5da7da83f829ca53 100644
--- a/lib/datasource/terraform-provider/index.spec.ts
+++ b/lib/datasource/terraform-provider/index.spec.ts
@@ -1,17 +1,16 @@
-import fs from 'fs';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { id as datasource, defaultRegistryUrls } from '.';
 
-const consulData: any = fs.readFileSync(
-  'lib/datasource/terraform-provider/__fixtures__/azurerm-provider.json'
+const consulData: any = loadFixture(__filename, 'azurerm-provider.json');
+const hashicorpReleases: any = loadFixture(
+  __filename,
+  'releaseBackendIndex.json'
 );
-const hashicorpReleases: any = fs.readFileSync(
-  'lib/datasource/terraform-provider/__fixtures__/releaseBackendIndex.json'
-);
-const serviceDiscoveryResult: any = fs.readFileSync(
-  'lib/datasource/terraform-module/__fixtures__/service-discovery.json'
+const serviceDiscoveryResult: any = loadFixture(
+  __filename,
+  'service-discovery.json'
 );
 
 const primaryUrl = defaultRegistryUrls[0];
diff --git a/lib/manager/ansible-galaxy/extract.spec.ts b/lib/manager/ansible-galaxy/extract.spec.ts
index b4f68b6f10abc8f5a464c1854d9bd84ac7716592..dd3593801e3754039e8a7ccfabfd76cc92dd2f4b 100644
--- a/lib/manager/ansible-galaxy/extract.spec.ts
+++ b/lib/manager/ansible-galaxy/extract.spec.ts
@@ -1,31 +1,12 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import extractPackageFile, { getSliceEndNumber } from './extract';
 
-const yamlFile1 = readFileSync(
-  'lib/manager/ansible-galaxy/__fixtures__/requirements01.yml',
-  'utf8'
-);
-const yamlFile2 = readFileSync(
-  'lib/manager/ansible-galaxy/__fixtures__/requirements02.yml',
-  'utf8'
-);
-const helmRequirements = readFileSync(
-  'lib/manager/ansible-galaxy/__fixtures__/helmRequirements.yml',
-  'utf8'
-);
-const collections1 = readFileSync(
-  'lib/manager/ansible-galaxy/__fixtures__/collections1.yml',
-  'utf8'
-);
-const collections2 = readFileSync(
-  'lib/manager/ansible-galaxy/__fixtures__/collections2.yml',
-  'utf8'
-);
-const galaxy = readFileSync(
-  'lib/manager/ansible-galaxy/__fixtures__/galaxy.yml',
-  'utf8'
-);
+const yamlFile1 = loadFixture(__filename, 'requirements01.yml');
+const yamlFile2 = loadFixture(__filename, 'requirements02.yml');
+const helmRequirements = loadFixture(__filename, 'helmRequirements.yml');
+const collections1 = loadFixture(__filename, 'collections1.yml');
+const collections2 = loadFixture(__filename, 'collections2.yml');
+const galaxy = loadFixture(__filename, 'galaxy.yml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/ansible/extract.spec.ts b/lib/manager/ansible/extract.spec.ts
index 8b96d583d5fe9825efecd8fe8ef097522642daed..3e068cf40622309767a7c17e93a14c9f6f438bb1 100644
--- a/lib/manager/ansible/extract.spec.ts
+++ b/lib/manager/ansible/extract.spec.ts
@@ -1,15 +1,8 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import extractPackageFile from './extract';
 
-const yamlFile1 = readFileSync(
-  'lib/manager/ansible/__fixtures__/main1.yaml',
-  'utf8'
-);
-const yamlFile2 = readFileSync(
-  'lib/manager/ansible/__fixtures__/main2.yaml',
-  'utf8'
-);
+const yamlFile1 = loadFixture(__filename, 'main1.yaml');
+const yamlFile2 = loadFixture(__filename, 'main2.yaml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/azure-pipelines/extract.spec.ts b/lib/manager/azure-pipelines/extract.spec.ts
index 5ac96ae7ecf41620cf6d5b8b24422b5fd8e09547..72dd4fcfad25d8fe5dea3b6c2f4c66c4ef07bb22 100644
--- a/lib/manager/azure-pipelines/extract.spec.ts
+++ b/lib/manager/azure-pipelines/extract.spec.ts
@@ -1,5 +1,4 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import {
   extractContainer,
   extractPackageFile,
@@ -7,19 +6,16 @@ import {
   parseAzurePipelines,
 } from './extract';
 
-const azurePipelines = readFileSync(
-  'lib/manager/azure-pipelines/__fixtures__/azure-pipelines.yaml',
-  'utf8'
-);
+const azurePipelines = loadFixture(__filename, 'azure-pipelines.yaml');
 
-const azurePipelinesInvalid = readFileSync(
-  'lib/manager/azure-pipelines/__fixtures__/azure-pipelines-invalid.yaml',
-  'utf8'
+const azurePipelinesInvalid = loadFixture(
+  __filename,
+  'azure-pipelines-invalid.yaml'
 );
 
-const azurePipelinesNoDependency = readFileSync(
-  'lib/manager/azure-pipelines/__fixtures__/azure-pipelines-no-dependency.yaml',
-  'utf8'
+const azurePipelinesNoDependency = loadFixture(
+  __filename,
+  'azure-pipelines-no-dependency.yaml'
 );
 
 describe(getName(__filename), () => {
diff --git a/lib/manager/batect-wrapper/extract.spec.ts b/lib/manager/batect-wrapper/extract.spec.ts
index fe854eb369251111748fb9672b2a7e04f2be3246..06393f3cd2f7e5019d2e9ff97b55137c71392c8c 100644
--- a/lib/manager/batect-wrapper/extract.spec.ts
+++ b/lib/manager/batect-wrapper/extract.spec.ts
@@ -1,19 +1,11 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { id as githubReleaseDatasource } from '../../datasource/github-releases';
 import { id as semverVersioning } from '../../versioning/semver';
 import type { PackageDependency } from '../types';
 import { extractPackageFile } from './extract';
 
-const validWrapperContent = readFileSync(
-  'lib/manager/batect-wrapper/__fixtures__/valid-wrapper',
-  'utf8'
-);
-
-const malformedWrapperContent = readFileSync(
-  'lib/manager/batect-wrapper/__fixtures__/malformed-wrapper',
-  'utf8'
-);
+const validWrapperContent = loadFixture(__filename, 'valid-wrapper');
+const malformedWrapperContent = loadFixture(__filename, 'malformed-wrapper');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/bazel/extract.spec.ts b/lib/manager/bazel/extract.spec.ts
index 23523f8359ca0f89a4335924b8a667454fc297d6..be6a208c17bbfd4ab27faba51d3870699418a9f1 100644
--- a/lib/manager/bazel/extract.spec.ts
+++ b/lib/manager/bazel/extract.spec.ts
@@ -1,26 +1,10 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const workspaceFile = readFileSync(
-  'lib/manager/bazel/__fixtures__/WORKSPACE1',
-  'utf8'
-);
-
-const workspace2File = readFileSync(
-  'lib/manager/bazel/__fixtures__/WORKSPACE2',
-  'utf8'
-);
-
-const workspace3File = readFileSync(
-  'lib/manager/bazel/__fixtures__/WORKSPACE3',
-  'utf8'
-);
-
-const fileWithBzlExtension = readFileSync(
-  'lib/manager/bazel/__fixtures__/repositories.bzl',
-  'utf8'
-);
+const workspaceFile = loadFixture(__filename, 'WORKSPACE1');
+const workspace2File = loadFixture(__filename, 'WORKSPACE2');
+const workspace3File = loadFixture(__filename, 'WORKSPACE3');
+const fileWithBzlExtension = loadFixture(__filename, 'repositories.bzl');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/bazel/update.spec.ts b/lib/manager/bazel/update.spec.ts
index 41d5fadef24fb024bb407c76cae3ec98fb5e9d8f..db2b6bc82a60095069cbedefc4162a791486bf99 100644
--- a/lib/manager/bazel/update.spec.ts
+++ b/lib/manager/bazel/update.spec.ts
@@ -1,25 +1,12 @@
-import { readFileSync } from 'fs';
 import { Readable } from 'stream';
-import { resolve } from 'upath';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import type { UpdateType } from '../../config/types';
 import { updateDependency } from './update';
 
-const content = readFileSync(
-  resolve('lib/manager/bazel/__fixtures__/WORKSPACE1'),
-  'utf8'
-);
-
-const contentContainerPull = readFileSync(
-  resolve('lib/manager/bazel/__fixtures__/container_pull'),
-  'utf8'
-);
-
-const fileWithBzlExtension = readFileSync(
-  'lib/manager/bazel/__fixtures__/repositories.bzl',
-  'utf8'
-);
+const content = loadFixture(__filename, 'WORKSPACE1');
+const contentContainerPull = loadFixture(__filename, 'container_pull');
+const fileWithBzlExtension = loadFixture(__filename, 'repositories.bzl');
 
 /*
 git_repository(
diff --git a/lib/manager/buildkite/extract.spec.ts b/lib/manager/buildkite/extract.spec.ts
index 3d9704d17334250501c90b91a6002e5f7deddd5e..911da7d3c9bf3a056b5b3d039c1793c02cfb78ea 100644
--- a/lib/manager/buildkite/extract.spec.ts
+++ b/lib/manager/buildkite/extract.spec.ts
@@ -1,23 +1,10 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const pipeline1 = readFileSync(
-  'lib/manager/buildkite/__fixtures__/pipeline1.yml',
-  'utf8'
-);
-const pipeline2 = readFileSync(
-  'lib/manager/buildkite/__fixtures__/pipeline2.yml',
-  'utf8'
-);
-const pipeline3 = readFileSync(
-  'lib/manager/buildkite/__fixtures__/pipeline3.yml',
-  'utf8'
-);
-const pipeline4 = readFileSync(
-  'lib/manager/buildkite/__fixtures__/pipeline4.yml',
-  'utf8'
-);
+const pipeline1 = loadFixture(__filename, 'pipeline1.yml');
+const pipeline2 = loadFixture(__filename, 'pipeline2.yml');
+const pipeline3 = loadFixture(__filename, 'pipeline3.yml');
+const pipeline4 = loadFixture(__filename, 'pipeline4.yml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/bundler/extract.spec.ts b/lib/manager/bundler/extract.spec.ts
index a70326a8cf85037f540b0560348541fc4b482099..baefc8e48a5df9fc57aa2d73939867c11546a783 100644
--- a/lib/manager/bundler/extract.spec.ts
+++ b/lib/manager/bundler/extract.spec.ts
@@ -1,67 +1,33 @@
-import { readFileSync } from 'fs';
-import { fs, getName } from '../../../test/util';
+import { fs, getName, loadFixture } from '../../../test/util';
 import { isValid } from '../../versioning/ruby';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
 
-const railsGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.rails',
-  'utf8'
-);
-const railsGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.rails.lock',
-  'utf8'
-);
+const railsGemfile = loadFixture(__filename, 'Gemfile.rails');
+const railsGemfileLock = loadFixture(__filename, 'Gemfile.rails.lock');
 
-const sourceGroupGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.sourceGroup',
-  'utf8'
-);
-const webPackerGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.webpacker',
-  'utf8'
-);
-const webPackerGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.webpacker.lock',
-  'utf8'
-);
-const mastodonGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.mastodon',
-  'utf8'
-);
-const mastodonGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.mastodon.lock',
-  'utf8'
-);
-const rubyCIGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.rubyci.lock',
-  'utf8'
-);
+const sourceGroupGemfile = loadFixture(__filename, 'Gemfile.sourceGroup');
+const webPackerGemfile = loadFixture(__filename, 'Gemfile.webpacker');
+const webPackerGemfileLock = loadFixture(__filename, 'Gemfile.webpacker.lock');
+const mastodonGemfile = loadFixture(__filename, 'Gemfile.mastodon');
+const mastodonGemfileLock = loadFixture(__filename, 'Gemfile.mastodon.lock');
+const rubyCIGemfileLock = loadFixture(__filename, 'Gemfile.rubyci.lock');
 
-const rubyCIGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.rubyci',
-  'utf8'
-);
-const gitlabFossGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.gitlab-foss.lock',
-  'utf8'
-);
-const gitlabFossGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.gitlab-foss',
-  'utf8'
-);
-const sourceBlockGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.sourceBlock',
-  'utf8'
+const rubyCIGemfile = loadFixture(__filename, 'Gemfile.rubyci');
+const gitlabFossGemfileLock = loadFixture(
+  __filename,
+  'Gemfile.gitlab-foss.lock'
 );
-const sourceBlockWithNewLinesGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.sourceBlockWithNewLines.lock',
-  'utf8'
+const gitlabFossGemfile = loadFixture(__filename, 'Gemfile.gitlab-foss');
+const sourceBlockGemfile = loadFixture(__filename, 'Gemfile.sourceBlock');
+const sourceBlockWithNewLinesGemfileLock = loadFixture(
+  __filename,
+  'Gemfile.sourceBlockWithNewLines.lock'
 );
-const sourceBlockWithNewLinesGemfile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.sourceBlockWithNewLines',
-  'utf8'
+const sourceBlockWithNewLinesGemfile = loadFixture(
+  __filename,
+  'Gemfile.sourceBlockWithNewLines'
 );
 
 function validateGems(raw, parsed) {
diff --git a/lib/manager/bundler/gemfile.spec.ts b/lib/manager/bundler/gemfile.spec.ts
index cee947b8a84b7f6917cf12cb605824648ec67229..a066c10e2f6017665027082ad53e242cfe1386a0 100644
--- a/lib/manager/bundler/gemfile.spec.ts
+++ b/lib/manager/bundler/gemfile.spec.ts
@@ -1,10 +1,8 @@
-import { readFileSync } from 'fs';
+import { loadFixture } from '../../../test/util';
 import { extractLockFileEntries } from './locked-version';
 
-const gemLockFile = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.rails.lock',
-  'utf8'
-);
+const gemLockFile = loadFixture(__filename, 'Gemfile.rails.lock');
+
 describe('extract lib/manager/bundler/gemfile.rails.lock', () => {
   it('matches the expected output', () => {
     expect(extractLockFileEntries(gemLockFile)).toMatchSnapshot();
diff --git a/lib/manager/bundler/locked-version.spec.ts b/lib/manager/bundler/locked-version.spec.ts
index 6670a10aa491159fad726fa8d70e7587c5e8c903..6401691b7bb25f9f79974118443ab00d5a1d093e 100644
--- a/lib/manager/bundler/locked-version.spec.ts
+++ b/lib/manager/bundler/locked-version.spec.ts
@@ -1,26 +1,15 @@
-import { readFileSync } from 'fs';
+import { loadFixture } from '../../../test/util';
 import { extractLockFileEntries } from './locked-version';
 
-const railsGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.rails.lock',
-  'utf8'
-);
-const webPackerGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.webpacker.lock',
-  'utf8'
-);
-const mastodonGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.mastodon.lock',
-  'utf8'
-);
-const rubyCIGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.rubyci.lock',
-  'utf8'
-);
-const gitlabFossGemfileLock = readFileSync(
-  'lib/manager/bundler/__fixtures__/Gemfile.gitlab-foss.lock',
-  'utf8'
+const railsGemfileLock = loadFixture(__filename, 'Gemfile.rails.lock');
+const webPackerGemfileLock = loadFixture(__filename, 'Gemfile.webpacker.lock');
+const mastodonGemfileLock = loadFixture(__filename, 'Gemfile.mastodon.lock');
+const rubyCIGemfileLock = loadFixture(__filename, 'Gemfile.rubyci.lock');
+const gitlabFossGemfileLock = loadFixture(
+  __filename,
+  'Gemfile.gitlab-foss.lock'
 );
+
 describe('/lib/manager/bundler/locked-version', () => {
   test('Parse Rails Gem Lock File', () => {
     const parsedLockEntries = extractLockFileEntries(railsGemfileLock);
diff --git a/lib/manager/cake/index.spec.ts b/lib/manager/cake/index.spec.ts
index c354776c5e0c94d2c037d2de888f1967ad951881..eae570413174cd95ba53dbbd80696512a9f87fd5 100644
--- a/lib/manager/cake/index.spec.ts
+++ b/lib/manager/cake/index.spec.ts
@@ -1,11 +1,7 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
-const content = readFileSync(
-  'lib/manager/cake/__fixtures__/build.cake',
-  'utf8'
-);
+const content = loadFixture(__filename, 'build.cake');
 
 describe(getName(__filename), () => {
   it('extracts', () => {
diff --git a/lib/manager/cargo/extract.spec.ts b/lib/manager/cargo/extract.spec.ts
index cfaf0d624c9d33c695554fb5be05c74e553e1515..761785d8031a7f9f3c7168095684746ac9807c9a 100644
--- a/lib/manager/cargo/extract.spec.ts
+++ b/lib/manager/cargo/extract.spec.ts
@@ -1,39 +1,16 @@
-import { readFileSync } from 'fs';
 import { dir } from 'tmp-promise';
 import { join } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { setFsConfig, writeLocalFile } from '../../util/fs';
 import { extractPackageFile } from './extract';
 
-const cargo1toml = readFileSync(
-  'lib/manager/cargo/__fixtures__/Cargo.1.toml',
-  'utf8'
-);
-const cargo2toml = readFileSync(
-  'lib/manager/cargo/__fixtures__/Cargo.2.toml',
-  'utf8'
-);
-const cargo3toml = readFileSync(
-  'lib/manager/cargo/__fixtures__/Cargo.3.toml',
-  'utf8'
-);
-const cargo4toml = readFileSync(
-  'lib/manager/cargo/__fixtures__/Cargo.4.toml',
-  'utf8'
-);
-const cargo5toml = readFileSync(
-  'lib/manager/cargo/__fixtures__/Cargo.5.toml',
-  'utf8'
-);
-
-const cargo6configtoml = readFileSync(
-  'lib/manager/cargo/__fixtures__/cargo.6.config.toml',
-  'utf8'
-);
-const cargo6toml = readFileSync(
-  'lib/manager/cargo/__fixtures__/Cargo.6.toml',
-  'utf8'
-);
+const cargo1toml = loadFixture(__filename, 'Cargo.1.toml');
+const cargo2toml = loadFixture(__filename, 'Cargo.2.toml');
+const cargo3toml = loadFixture(__filename, 'Cargo.3.toml');
+const cargo4toml = loadFixture(__filename, 'Cargo.4.toml');
+const cargo5toml = loadFixture(__filename, 'Cargo.5.toml');
+const cargo6configtoml = loadFixture(__filename, 'cargo.6.config.toml');
+const cargo6toml = loadFixture(__filename, 'Cargo.6.toml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/cdnurl/extract.spec.ts b/lib/manager/cdnurl/extract.spec.ts
index 0a01f316df76122331469351cd1532a05a948f11..7d03a1539fed134f1ff24b37326b8ed6471780b2 100644
--- a/lib/manager/cdnurl/extract.spec.ts
+++ b/lib/manager/cdnurl/extract.spec.ts
@@ -1,12 +1,7 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
-const input = readFileSync(
-  resolve(__dirname, `./__fixtures__/sample.txt`),
-  'utf8'
-);
+const input = loadFixture(__filename, `sample.txt`);
 
 describe(getName(__filename), () => {
   it('extractPackageFile', () => {
diff --git a/lib/manager/circleci/extract.spec.ts b/lib/manager/circleci/extract.spec.ts
index fc25189c5871b30c814f30fed4d52482ed550c06..dc31c4a5a59b5c5eafe587eed24d535e4827999c 100644
--- a/lib/manager/circleci/extract.spec.ts
+++ b/lib/manager/circleci/extract.spec.ts
@@ -1,19 +1,9 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const file1 = readFileSync(
-  'lib/manager/circleci/__fixtures__/config.yml',
-  'utf8'
-);
-const file2 = readFileSync(
-  'lib/manager/circleci/__fixtures__/config2.yml',
-  'utf8'
-);
-const file3 = readFileSync(
-  'lib/manager/circleci/__fixtures__/config3.yml',
-  'utf8'
-);
+const file1 = loadFixture(__filename, 'config.yml');
+const file2 = loadFixture(__filename, 'config2.yml');
+const file3 = loadFixture(__filename, 'config3.yml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/cloudbuild/extract.spec.ts b/lib/manager/cloudbuild/extract.spec.ts
index 116a38c644b38430d4f2f4e2973140d7fd01f764..4301cf5ccec8bb86a67e33a43f1e50fe5a8374fc 100644
--- a/lib/manager/cloudbuild/extract.spec.ts
+++ b/lib/manager/cloudbuild/extract.spec.ts
@@ -1,11 +1,7 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const file1 = readFileSync(
-  'lib/manager/cloudbuild/__fixtures__/cloudbuild.yml',
-  'utf8'
-);
+const file1 = loadFixture(__filename, 'cloudbuild.yml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/cocoapods/extract.spec.ts b/lib/manager/cocoapods/extract.spec.ts
index 09d456474f43c49413e647f6e4627afe0d7603e7..d8e5d18dcb3278d93e9352e5261df84cb6638d6d 100644
--- a/lib/manager/cocoapods/extract.spec.ts
+++ b/lib/manager/cocoapods/extract.spec.ts
@@ -1,18 +1,8 @@
-import fs from 'fs-extra';
-import upath from 'upath';
-
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
-const simplePodfile = fs.readFileSync(
-  upath.resolve(__dirname, './__fixtures__/Podfile.simple'),
-  'utf-8'
-);
-
-const complexPodfile = fs.readFileSync(
-  upath.resolve(__dirname, './__fixtures__/Podfile.complex'),
-  'utf-8'
-);
+const simplePodfile = loadFixture(__filename, 'Podfile.simple');
+const complexPodfile = loadFixture(__filename, 'Podfile.complex');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/composer/extract.spec.ts b/lib/manager/composer/extract.spec.ts
index 04bf9d7121ffdd7498ea91b91617d5408e7a139f..f7dc652ef6df87a71584a28e4a65ca4bb98d52fd 100644
--- a/lib/manager/composer/extract.spec.ts
+++ b/lib/manager/composer/extract.spec.ts
@@ -1,33 +1,14 @@
-import { readFileSync } from 'fs';
-import { fs, getName } from '../../../test/util';
+import { fs, getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
 
-const requirements1 = readFileSync(
-  'lib/manager/composer/__fixtures__/composer1.json',
-  'utf8'
-);
-const requirements2 = readFileSync(
-  'lib/manager/composer/__fixtures__/composer2.json',
-  'utf8'
-);
-const requirements3 = readFileSync(
-  'lib/manager/composer/__fixtures__/composer3.json',
-  'utf8'
-);
-const requirements4 = readFileSync(
-  'lib/manager/composer/__fixtures__/composer4.json',
-  'utf8'
-);
-const requirements5 = readFileSync(
-  'lib/manager/composer/__fixtures__/composer5.json',
-  'utf8'
-);
-const requirements5Lock = readFileSync(
-  'lib/manager/composer/__fixtures__/composer5.lock',
-  'utf8'
-);
+const requirements1 = loadFixture(__filename, 'composer1.json');
+const requirements2 = loadFixture(__filename, 'composer2.json');
+const requirements3 = loadFixture(__filename, 'composer3.json');
+const requirements4 = loadFixture(__filename, 'composer4.json');
+const requirements5 = loadFixture(__filename, 'composer5.json');
+const requirements5Lock = loadFixture(__filename, 'composer5.lock');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/deps-edn/extract.spec.ts b/lib/manager/deps-edn/extract.spec.ts
index dd550044a7196c4248145d56a4e1c0c5e9724ddc..b240919bb75bddd176b2ba8424c2e3804b2cb980 100644
--- a/lib/manager/deps-edn/extract.spec.ts
+++ b/lib/manager/deps-edn/extract.spec.ts
@@ -1,13 +1,7 @@
-/* eslint-disable no-template-curly-in-string */
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const depsEdn = readFileSync(
-  resolve(__dirname, `./__fixtures__/deps.edn`),
-  'utf8'
-);
+const depsEdn = loadFixture(__filename, 'deps.edn');
 
 describe(getName(__filename), () => {
   it('extractPackageFile', () => {
diff --git a/lib/manager/docker-compose/extract.spec.ts b/lib/manager/docker-compose/extract.spec.ts
index 915e00345f0f1cf21530a1d5d018f8b93ec75637..4cca8cd425415c16e72c0a4416d67fe3b5b5df78 100644
--- a/lib/manager/docker-compose/extract.spec.ts
+++ b/lib/manager/docker-compose/extract.spec.ts
@@ -1,20 +1,11 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const yamlFile1 = readFileSync(
-  'lib/manager/docker-compose/__fixtures__/docker-compose.1.yml',
-  'utf8'
-);
-
-const yamlFile3 = readFileSync(
-  'lib/manager/docker-compose/__fixtures__/docker-compose.3.yml',
-  'utf8'
-);
-
-const yamlFile3NoVersion = readFileSync(
-  'lib/manager/docker-compose/__fixtures__/docker-compose.3-no-version.yml',
-  'utf8'
+const yamlFile1 = loadFixture(__filename, 'docker-compose.1.yml');
+const yamlFile3 = loadFixture(__filename, 'docker-compose.3.yml');
+const yamlFile3NoVersion = loadFixture(
+  __filename,
+  'docker-compose.3-no-version.yml'
 );
 
 describe(getName(__filename), () => {
diff --git a/lib/manager/dockerfile/extract.spec.ts b/lib/manager/dockerfile/extract.spec.ts
index fcdf3409bcb4d6215d4b8e3d0e8edfd3006b8e3d..6a72adff49ac569fbeebb4c776956a7d78e08e6d 100644
--- a/lib/manager/dockerfile/extract.spec.ts
+++ b/lib/manager/dockerfile/extract.spec.ts
@@ -1,16 +1,8 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile, getDep } from './extract';
 
-const d1 = readFileSync(
-  'lib/manager/dockerfile/__fixtures__/1.Dockerfile',
-  'utf8'
-);
-
-const d2 = readFileSync(
-  'lib/manager/dockerfile/__fixtures__/2.Dockerfile',
-  'utf8'
-);
+const d1 = loadFixture(__filename, '1.Dockerfile');
+const d2 = loadFixture(__filename, '2.Dockerfile');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/droneci/extract.spec.ts b/lib/manager/droneci/extract.spec.ts
index 585137d56d0d85e2fcf9b740fd02d47686a687fd..3855871bb729f79e458975f81fa2d10b400f79b5 100644
--- a/lib/manager/droneci/extract.spec.ts
+++ b/lib/manager/droneci/extract.spec.ts
@@ -1,13 +1,8 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 
 import { extractPackageFile } from './extract';
 
-const droneYAML = readFileSync(
-  resolve('lib/manager/droneci/__fixtures__/.drone.yml'),
-  'utf8'
-);
+const droneYAML = loadFixture(__filename, '.drone.yml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/github-actions/extract.spec.ts b/lib/manager/github-actions/extract.spec.ts
index 9e607beda7426c9fcfb61767a00e2f29be88d975..96b57906990614ad5039079dbde845ff25c72c6f 100644
--- a/lib/manager/github-actions/extract.spec.ts
+++ b/lib/manager/github-actions/extract.spec.ts
@@ -1,16 +1,8 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const workflow1 = readFileSync(
-  'lib/manager/github-actions/__fixtures__/workflow.yml.1',
-  'utf8'
-);
-
-const workflow2 = readFileSync(
-  'lib/manager/github-actions/__fixtures__/workflow.yml.2',
-  'utf8'
-);
+const workflow1 = loadFixture(__filename, 'workflow.yml.1');
+const workflow2 = loadFixture(__filename, 'workflow.yml.2');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/gitlabci-include/extract.spec.ts b/lib/manager/gitlabci-include/extract.spec.ts
index f7083030c5e1103fda9dabbf1d289b7ff4c9dbb1..d0e561f84c941b196777c73465cc549a2759fda5 100644
--- a/lib/manager/gitlabci-include/extract.spec.ts
+++ b/lib/manager/gitlabci-include/extract.spec.ts
@@ -1,11 +1,7 @@
-import fs from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const yamlFile = fs.readFileSync(
-  'lib/manager/gitlabci-include/__fixtures__/gitlab-ci.1.yaml',
-  'utf8'
-);
+const yamlFile = loadFixture(__filename, 'gitlab-ci.1.yaml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/gomod/extract.spec.ts b/lib/manager/gomod/extract.spec.ts
index d0ae06a506032d19d73f9f35b288405b24d26a2e..e24ba7a50eee1a331e4bd451c87b24cce5357793 100644
--- a/lib/manager/gomod/extract.spec.ts
+++ b/lib/manager/gomod/extract.spec.ts
@@ -1,10 +1,9 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const gomod1 = readFileSync('lib/manager/gomod/__fixtures__/1/go.mod', 'utf8');
-const gomod2 = readFileSync('lib/manager/gomod/__fixtures__/2/go.mod', 'utf8');
-const gomod3 = readFileSync('lib/manager/gomod/__fixtures__/3/go.mod', 'utf8');
+const gomod1 = loadFixture(__filename, '1/go.mod');
+const gomod2 = loadFixture(__filename, '2/go.mod');
+const gomod3 = loadFixture(__filename, '3/go.mod');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/gomod/update.spec.ts b/lib/manager/gomod/update.spec.ts
index 6dfba946bf02b0b6b0c55985de5f15823b422b3b..eb03ca3cfc680621ef6371fc183a59f1c77b05b2 100644
--- a/lib/manager/gomod/update.spec.ts
+++ b/lib/manager/gomod/update.spec.ts
@@ -1,10 +1,9 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import type { UpdateType } from '../../config/types';
 import { updateDependency } from './update';
 
-const gomod1 = readFileSync('lib/manager/gomod/__fixtures__/1/go.mod', 'utf8');
-const gomod2 = readFileSync('lib/manager/gomod/__fixtures__/2/go.mod', 'utf8');
+const gomod1 = loadFixture(__filename, '1/go.mod');
+const gomod2 = loadFixture(__filename, '2/go.mod');
 
 describe(getName(__filename), () => {
   describe('updateDependency', () => {
diff --git a/lib/manager/gradle-lite/parser.spec.ts b/lib/manager/gradle-lite/parser.spec.ts
index 560d365dbdf88a58b7ce42be8cf5117f170eb7ab..972653ff4bff10e21c2a93c1109b84ea528ad858 100644
--- a/lib/manager/gradle-lite/parser.spec.ts
+++ b/lib/manager/gradle-lite/parser.spec.ts
@@ -1,13 +1,7 @@
-import { readFileSync } from 'fs';
-import path from 'path';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { GOOGLE_REPO, JCENTER_REPO, MAVEN_REPO } from './common';
 import { parseGradle, parseProps } from './parser';
 
-function getGradleFile(fileName: string): string {
-  return readFileSync(path.resolve(__dirname, fileName), 'utf8');
-}
-
 describe(getName(__filename), () => {
   it('handles end of input', () => {
     expect(parseGradle('version = ').deps).toBeEmpty();
@@ -162,8 +156,10 @@ describe(getName(__filename), () => {
     ]);
   });
   it('parses fixture from "gradle" manager', () => {
-    const content = getGradleFile(
-      `../gradle/__fixtures__/build.gradle.example1`
+    const content = loadFixture(
+      __filename,
+      'build.gradle.example1',
+      '../gradle'
     );
     const { deps } = parseGradle(content, {}, 'build.gradle');
     deps.forEach((dep) => {
diff --git a/lib/manager/gradle-wrapper/extract.spec.ts b/lib/manager/gradle-wrapper/extract.spec.ts
index b3d3a149d131c74b870627d7f05d493ad19cee32..f436ccdafdc953f7a5936946027717034d5ab499 100644
--- a/lib/manager/gradle-wrapper/extract.spec.ts
+++ b/lib/manager/gradle-wrapper/extract.spec.ts
@@ -1,27 +1,13 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const propertiesFile1 = readFileSync(
-  resolve(__dirname, './__fixtures__/gradle-wrapper-1.properties'),
-  'utf8'
-);
-const propertiesFile2 = readFileSync(
-  resolve(__dirname, './__fixtures__/gradle-wrapper-2.properties'),
-  'utf8'
-);
-const propertiesFile3 = readFileSync(
-  resolve(__dirname, './__fixtures__/gradle-wrapper-3.properties'),
-  'utf8'
-);
-const propertiesFile4 = readFileSync(
-  resolve(__dirname, './__fixtures__/gradle-wrapper-4.properties'),
-  'utf8'
-);
-const whitespacePropertiesFile = readFileSync(
-  resolve(__dirname, './__fixtures__/gradle-wrapper-whitespace.properties'),
-  'utf8'
+const propertiesFile1 = loadFixture(__filename, 'gradle-wrapper-1.properties');
+const propertiesFile2 = loadFixture(__filename, 'gradle-wrapper-2.properties');
+const propertiesFile3 = loadFixture(__filename, 'gradle-wrapper-3.properties');
+const propertiesFile4 = loadFixture(__filename, 'gradle-wrapper-4.properties');
+const whitespacePropertiesFile = loadFixture(
+  __filename,
+  'gradle-wrapper-whitespace.properties'
 );
 
 describe(getName(__filename), () => {
diff --git a/lib/manager/helm-values/extract.spec.ts b/lib/manager/helm-values/extract.spec.ts
index 3db74c265e3d8c5b355a2ef7352109b1683a7f0a..53fbc347837df3ecb59cb98a559b8e6bac956ab6 100644
--- a/lib/manager/helm-values/extract.spec.ts
+++ b/lib/manager/helm-values/extract.spec.ts
@@ -1,15 +1,14 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const helmDefaultChartInitValues = readFileSync(
-  'lib/manager/helm-values/__fixtures__/default_chart_init_values.yaml',
-  'utf8'
+const helmDefaultChartInitValues = loadFixture(
+  __filename,
+  'default_chart_init_values.yaml'
 );
 
-const helmMultiAndNestedImageValues = readFileSync(
-  'lib/manager/helm-values/__fixtures__/multi_and_nested_image_values.yaml',
-  'utf8'
+const helmMultiAndNestedImageValues = loadFixture(
+  __filename,
+  'multi_and_nested_image_values.yaml'
 );
 
 describe(getName(__filename), () => {
diff --git a/lib/manager/helmfile/extract.spec.ts b/lib/manager/helmfile/extract.spec.ts
index 7c983e6c7a807aa916d640153807cc1ff842fc29..3a3888575aae4c415e6e704cf646cc08998355cd 100644
--- a/lib/manager/helmfile/extract.spec.ts
+++ b/lib/manager/helmfile/extract.spec.ts
@@ -1,11 +1,8 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const multidocYaml = readFileSync(
-  'lib/manager/helmfile/__fixtures__/multidoc.yaml',
-  'utf8'
-);
+const multidocYaml = loadFixture(__filename, 'multidoc.yaml');
+
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
diff --git a/lib/manager/homebrew/extract.spec.ts b/lib/manager/homebrew/extract.spec.ts
index d4c61f7d27f3e485a5041fb71cdb738b9f30f7e0..b4e8f6d8d876627ea98317f5cbf4a8b999f6d4b3 100644
--- a/lib/manager/homebrew/extract.spec.ts
+++ b/lib/manager/homebrew/extract.spec.ts
@@ -1,24 +1,11 @@
-import fs from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const aalib = fs.readFileSync(
-  'lib/manager/homebrew/__fixtures__/aalib.rb',
-  'utf8'
-);
-const aap = fs.readFileSync('lib/manager/homebrew/__fixtures__/aap.rb', 'utf8');
-const acmetool = fs.readFileSync(
-  'lib/manager/homebrew/__fixtures__/acmetool.rb',
-  'utf8'
-);
-const aide = fs.readFileSync(
-  'lib/manager/homebrew/__fixtures__/aide.rb',
-  'utf8'
-);
-const ibazel = fs.readFileSync(
-  'lib/manager/homebrew/__fixtures__/ibazel.rb',
-  'utf8'
-);
+const aalib = loadFixture(__filename, 'aalib.rb');
+const aap = loadFixture(__filename, 'aap.rb');
+const acmetool = loadFixture(__filename, 'acmetool.rb');
+const aide = loadFixture(__filename, 'aide.rb');
+const ibazel = loadFixture(__filename, 'ibazel.rb');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/homebrew/update.spec.ts b/lib/manager/homebrew/update.spec.ts
index 84aafa850acaba58819cf1f2f068209668a4d1b0..ad7f6df4a7ec8d41eeda104bf52f1a2c796d9a5b 100644
--- a/lib/manager/homebrew/update.spec.ts
+++ b/lib/manager/homebrew/update.spec.ts
@@ -1,17 +1,10 @@
-import fs from 'fs';
 import { Readable } from 'stream';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { updateDependency } from './update';
 
-const aide = fs.readFileSync(
-  'lib/manager/homebrew/__fixtures__/aide.rb',
-  'utf8'
-);
-const ibazel = fs.readFileSync(
-  'lib/manager/homebrew/__fixtures__/ibazel.rb',
-  'utf8'
-);
+const aide = loadFixture(__filename, 'aide.rb');
+const ibazel = loadFixture(__filename, 'ibazel.rb');
 
 const baseUrl = 'https://github.com';
 
diff --git a/lib/manager/html/extract.spec.ts b/lib/manager/html/extract.spec.ts
index 7f27a8eb30428cb9aab79b80f1f3c7d51b6a0579..20bfa9720bd4ebc5831e098ad559adb26b8c2228 100644
--- a/lib/manager/html/extract.spec.ts
+++ b/lib/manager/html/extract.spec.ts
@@ -1,16 +1,8 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
-const sample = readFileSync(
-  resolve(__dirname, `./__fixtures__/sample.html`),
-  'utf8'
-);
-const nothing = readFileSync(
-  resolve(__dirname, `./__fixtures__/nothing.html`),
-  'utf8'
-);
+const sample = loadFixture(__filename, `sample.html`);
+const nothing = loadFixture(__filename, `nothing.html`);
 
 describe(getName(__filename), () => {
   it('extractPackageFile', () => {
diff --git a/lib/manager/jenkins/extract.spec.ts b/lib/manager/jenkins/extract.spec.ts
index 36775a6e261ffa5029dddda6c6bb5c8c0fdaff6d..b9481d1576ec4081230bb2273db3393067388ec6 100644
--- a/lib/manager/jenkins/extract.spec.ts
+++ b/lib/manager/jenkins/extract.spec.ts
@@ -1,29 +1,13 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const invalidYamlFile = readFileSync(
-  'lib/manager/jenkins/__fixtures__/invalid.yaml',
-  'utf8'
-);
-
-const pluginsTextFile = readFileSync(
-  'lib/manager/jenkins/__fixtures__/plugins.txt',
-  'utf8'
-);
-const pluginsYamlFile = readFileSync(
-  'lib/manager/jenkins/__fixtures__/plugins.yaml',
-  'utf8'
-);
-
-const pluginsEmptyTextFile = readFileSync(
-  'lib/manager/jenkins/__fixtures__/empty.txt',
-  'utf8'
-);
-const pluginsEmptyYamlFile = readFileSync(
-  'lib/manager/jenkins/__fixtures__/empty.yaml',
-  'utf8'
-);
+const invalidYamlFile = loadFixture(__filename, 'invalid.yaml');
+
+const pluginsTextFile = loadFixture(__filename, 'plugins.txt');
+const pluginsYamlFile = loadFixture(__filename, 'plugins.yaml');
+
+const pluginsEmptyTextFile = loadFixture(__filename, 'empty.txt');
+const pluginsEmptyYamlFile = loadFixture(__filename, 'empty.yaml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/kubernetes/extract.spec.ts b/lib/manager/kubernetes/extract.spec.ts
index 8862eaf8c0938309d0d33adb7a90fce21baf5c64..04fe288e18c45165a99f2c9dadfce6a0c1482bff 100644
--- a/lib/manager/kubernetes/extract.spec.ts
+++ b/lib/manager/kubernetes/extract.spec.ts
@@ -1,26 +1,10 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const kubernetesImagesFile = readFileSync(
-  'lib/manager/kubernetes/__fixtures__/kubernetes.yaml',
-  'utf8'
-);
-
-const kubernetesConfigMapFile = readFileSync(
-  'lib/manager/kubernetes/__fixtures__/configmap.yaml',
-  'utf8'
-);
-
-const kubernetesArraySyntaxFile = readFileSync(
-  'lib/manager/kubernetes/__fixtures__/array-syntax.yaml',
-  'utf8'
-);
-
-const otherYamlFile = readFileSync(
-  'lib/manager/kubernetes/__fixtures__/gitlab-ci.yaml',
-  'utf8'
-);
+const kubernetesImagesFile = loadFixture(__filename, 'kubernetes.yaml');
+const kubernetesConfigMapFile = loadFixture(__filename, 'configmap.yaml');
+const kubernetesArraySyntaxFile = loadFixture(__filename, 'array-syntax.yaml');
+const otherYamlFile = loadFixture(__filename, 'gitlab-ci.yaml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/kustomize/extract.spec.ts b/lib/manager/kustomize/extract.spec.ts
index f7330ce303e06b29d1094d256a62f4423fe6312f..e4da4782aed016516741597102ebe1b58a4016ba 100644
--- a/lib/manager/kustomize/extract.spec.ts
+++ b/lib/manager/kustomize/extract.spec.ts
@@ -1,5 +1,4 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import * as datasourceDocker from '../../datasource/docker';
 import * as datasourceGitTags from '../../datasource/git-tags';
 import * as datasourceGitHubTags from '../../datasource/github-tags';
@@ -11,47 +10,18 @@ import {
   parseKustomize,
 } from './extract';
 
-const kustomizeGitSSHBase = readFileSync(
-  'lib/manager/kustomize/__fixtures__/gitSshBase.yaml',
-  'utf8'
+const kustomizeGitSSHBase = loadFixture(__filename, 'gitSshBase.yaml');
+const kustomizeEmpty = loadFixture(__filename, 'kustomizeEmpty.yaml');
+const kustomizeGitSSHSubdir = loadFixture(__filename, 'gitSubdir.yaml');
+const kustomizeHTTP = loadFixture(__filename, 'kustomizeHttp.yaml');
+const kustomizeWithLocal = loadFixture(__filename, 'kustomizeWithLocal.yaml');
+const nonKustomize = loadFixture(__filename, 'service.yaml');
+const gitImages = loadFixture(__filename, 'gitImages.yaml');
+const kustomizeDepsInResources = loadFixture(
+  __filename,
+  'depsInResources.yaml'
 );
-
-const kustomizeEmpty = readFileSync(
-  'lib/manager/kustomize/__fixtures__/kustomizeEmpty.yaml',
-  'utf8'
-);
-
-const kustomizeGitSSHSubdir = readFileSync(
-  'lib/manager/kustomize/__fixtures__/gitSubdir.yaml',
-  'utf8'
-);
-
-const kustomizeHTTP = readFileSync(
-  'lib/manager/kustomize/__fixtures__/kustomizeHttp.yaml',
-  'utf8'
-);
-
-const kustomizeWithLocal = readFileSync(
-  'lib/manager/kustomize/__fixtures__/kustomizeWithLocal.yaml',
-  'utf8'
-);
-
-const nonKustomize = readFileSync(
-  'lib/manager/kustomize/__fixtures__/service.yaml',
-  'utf8'
-);
-
-const gitImages = readFileSync(
-  'lib/manager/kustomize/__fixtures__/gitImages.yaml',
-  'utf8'
-);
-
-const kustomizeDepsInResources = readFileSync(
-  'lib/manager/kustomize/__fixtures__/depsInResources.yaml',
-  'utf8'
-);
-
-const sha = readFileSync('lib/manager/kustomize/__fixtures__/sha.yaml', 'utf8');
+const sha = loadFixture(__filename, 'sha.yaml');
 
 describe(getName(__filename), () => {
   it('should successfully parse a valid kustomize file', () => {
diff --git a/lib/manager/leiningen/extract.spec.ts b/lib/manager/leiningen/extract.spec.ts
index 22a261641037e1041b1c51be046b3d467c6e9614..681db83205e44992b96ee6dfc899526952d9a318 100644
--- a/lib/manager/leiningen/extract.spec.ts
+++ b/lib/manager/leiningen/extract.spec.ts
@@ -1,14 +1,8 @@
-/* eslint-disable no-template-curly-in-string */
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import * as datasourceClojure from '../../datasource/clojure';
 import { extractFromVectors, extractPackageFile, trimAtKey } from './extract';
 
-const leinProjectClj = readFileSync(
-  resolve(__dirname, `./__fixtures__/project.clj`),
-  'utf8'
-);
+const leinProjectClj = loadFixture(__filename, `project.clj`);
 
 describe(getName(__filename), () => {
   it('trimAtKey', () => {
diff --git a/lib/manager/maven/extract.spec.ts b/lib/manager/maven/extract.spec.ts
index 8ba6f952187249dc055b2b9a9ad92eeb6b5d7ba2..36c443fe3faafd228748f98918b1c0f342b11601 100644
--- a/lib/manager/maven/extract.spec.ts
+++ b/lib/manager/maven/extract.spec.ts
@@ -1,18 +1,9 @@
 /* eslint-disable no-template-curly-in-string */
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackage } from './extract';
 
-const minimumContent = readFileSync(
-  resolve(__dirname, `./__fixtures__/minimum.pom.xml`),
-  'utf8'
-);
-
-const simpleContent = readFileSync(
-  resolve(__dirname, `./__fixtures__/simple.pom.xml`),
-  'utf8'
-);
+const minimumContent = loadFixture(__filename, `minimum.pom.xml`);
+const simpleContent = loadFixture(__filename, `simple.pom.xml`);
 
 describe(getName(__filename), () => {
   describe('extractDependencies', () => {
diff --git a/lib/manager/maven/index.spec.ts b/lib/manager/maven/index.spec.ts
index 548b71f42629f91e4f14d07217e65e6bd98e2151..4be69a337c6dbcb60dd72938cc741b0172cdc562 100644
--- a/lib/manager/maven/index.spec.ts
+++ b/lib/manager/maven/index.spec.ts
@@ -1,27 +1,14 @@
-import { readFileSync } from 'fs';
-import { fs, getName } from '../../../test/util';
+import { fs, getName, loadFixture } from '../../../test/util';
 import type { PackageDependency, PackageFile } from '../types';
 import { extractPackage, resolveParents } from './extract';
 import { extractAllPackageFiles, updateDependency } from '.';
 
 jest.mock('../../util/fs');
 
-const pomContent = readFileSync(
-  'lib/manager/maven/__fixtures__/simple.pom.xml',
-  'utf8'
-);
-const pomParent = readFileSync(
-  'lib/manager/maven/__fixtures__/parent.pom.xml',
-  'utf8'
-);
-const pomChild = readFileSync(
-  'lib/manager/maven/__fixtures__/child.pom.xml',
-  'utf8'
-);
-const origContent = readFileSync(
-  'lib/manager/maven/__fixtures__/grouping.pom.xml',
-  'utf8'
-);
+const pomContent = loadFixture(__filename, 'simple.pom.xml');
+const pomParent = loadFixture(__filename, 'parent.pom.xml');
+const pomChild = loadFixture(__filename, 'child.pom.xml');
+const origContent = loadFixture(__filename, 'grouping.pom.xml');
 
 function selectDep(deps: PackageDependency[], name = 'org.example:quuz') {
   return deps.find((dep) => dep.depName === name);
diff --git a/lib/manager/meteor/extract.spec.ts b/lib/manager/meteor/extract.spec.ts
index 6bfb2f18671161258f9dd4bc3be3996860a7ef7d..7171f035823bc0ead9e354f9ca4b8e749c2197d4 100644
--- a/lib/manager/meteor/extract.spec.ts
+++ b/lib/manager/meteor/extract.spec.ts
@@ -1,13 +1,7 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-function readFixture(fixture: string) {
-  return readFileSync(resolve(__dirname, `./__fixtures__/${fixture}`), 'utf8');
-}
-
-const input01Content = readFixture('package-1.js');
+const input01Content = loadFixture(__filename, 'package-1.js');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/mix/extract.spec.ts b/lib/manager/mix/extract.spec.ts
index b350d5750f66f1562156816a536e9fc0b45b57ed..834c210a500389d915cdc20c248a418305cf98dd 100644
--- a/lib/manager/mix/extract.spec.ts
+++ b/lib/manager/mix/extract.spec.ts
@@ -1,12 +1,7 @@
-import fs from 'fs-extra';
-import upath from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
-const sample = fs.readFileSync(
-  upath.resolve(__dirname, './__fixtures__/mix.exs'),
-  'utf-8'
-);
+const sample = loadFixture(__filename, 'mix.exs');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts
index beda16f2a1b85c6d2444d54d01f8529ed7192a04..b4ea83e1ef2eda71eb87f485fa8713a0f3e035d6 100644
--- a/lib/manager/npm/extract/index.spec.ts
+++ b/lib/manager/npm/extract/index.spec.ts
@@ -1,6 +1,4 @@
-import { readFileSync } from 'fs';
-import upath from 'upath';
-import { getName } from '../../../../test/util';
+import { getName, loadFixture } from '../../../../test/util';
 import { getConfig } from '../../../config/defaults';
 import * as _fs from '../../../util/fs';
 import * as npmExtract from '.';
@@ -10,18 +8,19 @@ const fs: any = _fs;
 // TODO: fix types
 const defaultConfig = getConfig();
 
-function readFixture(fixture: string) {
-  return readFileSync(
-    upath.resolve(__dirname, `../__fixtures__/${fixture}`),
-    'utf8'
-  );
-}
-
-const input01Content = readFixture('inputs/01.json');
-const workspacesContent = readFixture('inputs/workspaces.json');
-const workspacesSimpleContent = readFixture('inputs/workspaces-simple.json');
-const vendorisedContent = readFixture('is-object.json');
-const invalidNameContent = readFixture('invalid-name.json');
+const input01Content = loadFixture(__filename, 'inputs/01.json', '..');
+const workspacesContent = loadFixture(
+  __filename,
+  'inputs/workspaces.json',
+  '..'
+);
+const workspacesSimpleContent = loadFixture(
+  __filename,
+  'inputs/workspaces-simple.json',
+  '..'
+);
+const vendorisedContent = loadFixture(__filename, 'is-object.json', '..');
+const invalidNameContent = loadFixture(__filename, 'invalid-name.json', '..');
 
 describe(getName(__filename), () => {
   describe('.extractPackageFile()', () => {
diff --git a/lib/manager/npm/extract/npm.spec.ts b/lib/manager/npm/extract/npm.spec.ts
index 4a9962c4027198bec9e9682cada911c504c7a56f..1946d3e61eb9b896a04981235cde2edc56b534bc 100644
--- a/lib/manager/npm/extract/npm.spec.ts
+++ b/lib/manager/npm/extract/npm.spec.ts
@@ -1,5 +1,4 @@
-import { readFileSync } from 'fs';
-import { fs, getName } from '../../../../test/util';
+import { fs, getName, loadFixture } from '../../../../test/util';
 import { getNpmLock } from './npm';
 
 jest.mock('../../../util/fs');
@@ -12,8 +11,10 @@ describe(getName(__filename), () => {
       expect(Object.keys(res.lockedVersions)).toHaveLength(0);
     });
     it('extracts', async () => {
-      const plocktest1Lock = readFileSync(
-        'lib/manager/npm/__fixtures__/plocktest1/package-lock.json'
+      const plocktest1Lock = loadFixture(
+        __filename,
+        'plocktest1/package-lock.json',
+        '..'
       );
       fs.readLocalFile.mockResolvedValueOnce(plocktest1Lock as never);
       const res = await getNpmLock('package.json');
@@ -21,9 +22,7 @@ describe(getName(__filename), () => {
       expect(Object.keys(res.lockedVersions)).toHaveLength(7);
     });
     it('extracts npm 7 lockfile', async () => {
-      const npm7Lock = readFileSync(
-        'lib/manager/npm/__fixtures__/npm7/package-lock.json'
-      );
+      const npm7Lock = loadFixture(__filename, 'npm7/package-lock.json', '..');
       fs.readLocalFile.mockResolvedValueOnce(npm7Lock as never);
       const res = await getNpmLock('package.json');
       expect(res).toMatchSnapshot();
diff --git a/lib/manager/npm/extract/yarn.spec.ts b/lib/manager/npm/extract/yarn.spec.ts
index 9b91d2677244223206f4a8e6fe9714873722b745..9882b371471882a1b35bdfc5aa0aa2d7ba52daf8 100644
--- a/lib/manager/npm/extract/yarn.spec.ts
+++ b/lib/manager/npm/extract/yarn.spec.ts
@@ -1,5 +1,4 @@
-import { readFileSync } from 'fs';
-import { fs, getName } from '../../../../test/util';
+import { fs, getName, loadFixture } from '../../../../test/util';
 import { getYarnLock } from './yarn';
 
 jest.mock('../../../util/fs');
@@ -14,9 +13,10 @@ describe(getName(__filename), () => {
     });
 
     it('extracts yarn 1', async () => {
-      const plocktest1Lock = readFileSync(
-        'lib/manager/npm/__fixtures__/plocktest1/yarn.lock',
-        'utf8'
+      const plocktest1Lock = loadFixture(
+        __filename,
+        'plocktest1/yarn.lock',
+        '..'
       );
       fs.readLocalFile.mockResolvedValueOnce(plocktest1Lock);
       const res = await getYarnLock('package.json');
@@ -27,10 +27,7 @@ describe(getName(__filename), () => {
     });
 
     it('extracts yarn 2', async () => {
-      const plocktest1Lock = readFileSync(
-        'lib/manager/npm/__fixtures__/yarn2/yarn.lock',
-        'utf8'
-      );
+      const plocktest1Lock = loadFixture(__filename, 'yarn2/yarn.lock', '..');
       fs.readLocalFile.mockResolvedValueOnce(plocktest1Lock);
       const res = await getYarnLock('package.json');
       expect(res.isYarn1).toBe(false);
@@ -40,10 +37,7 @@ describe(getName(__filename), () => {
     });
 
     it('extracts yarn 2 cache version', async () => {
-      const plocktest1Lock = readFileSync(
-        'lib/manager/npm/__fixtures__/yarn2.2/yarn.lock',
-        'utf8'
-      );
+      const plocktest1Lock = loadFixture(__filename, 'yarn2.2/yarn.lock', '..');
       fs.readLocalFile.mockResolvedValueOnce(plocktest1Lock);
       const res = await getYarnLock('package.json');
       expect(res.isYarn1).toBe(false);
diff --git a/lib/manager/npm/update/dependency/index.spec.ts b/lib/manager/npm/update/dependency/index.spec.ts
index a663e644d3a2f45a0eac7f75071d7cc86d131e30..b2a2c177b3a4833d2451f6e3bc46f43a0b0299b3 100644
--- a/lib/manager/npm/update/dependency/index.spec.ts
+++ b/lib/manager/npm/update/dependency/index.spec.ts
@@ -1,15 +1,7 @@
-import fs from 'fs';
-import upath from 'upath';
-
-import { getName } from '../../../../../test/util';
+import { getName, loadFixture } from '../../../../../test/util';
 import * as npmUpdater from '.';
 
-function readFixture(fixture: string) {
-  return fs.readFileSync(
-    upath.resolve(__dirname, `../../__fixtures__/${fixture}`),
-    'utf8'
-  );
-}
+const readFixture = (x: string): string => loadFixture(__filename, x, '../..');
 
 const input01Content = readFixture('inputs/01.json');
 const input01GlobContent = readFixture('inputs/01-glob.json');
diff --git a/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts b/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts
index 47e0122b741f8c176954c0e2810ee2e0de8a03cb..577b9317221bf99853a4a70b1ff0f92340e8b327 100644
--- a/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts
@@ -1,16 +1,10 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../../../test/util';
+import { getName, loadJsonFixture } from '../../../../../test/util';
 import { findDepConstraints } from './dep-constraints';
 
 jest.mock('../../../../util/fs');
 
-const packageJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/package.json'), 'utf8')
-);
-const packageLockJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/package-lock.json'), 'utf8')
-);
+const packageJson = loadJsonFixture(__filename, 'package.json');
+const packageLockJson = loadJsonFixture(__filename, 'package-lock.json');
 
 describe(getName(__filename), () => {
   describe('findDepConstraints()', () => {
diff --git a/lib/manager/npm/update/locked-dependency/get-locked.spec.ts b/lib/manager/npm/update/locked-dependency/get-locked.spec.ts
index f6ee9de18acee99eb1fff54c81299aa935ae6d5c..80370af9e543ac8b2bd14e86cec02e1e6cc0769d 100644
--- a/lib/manager/npm/update/locked-dependency/get-locked.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/get-locked.spec.ts
@@ -1,13 +1,9 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../../../test/util';
+import { getName, loadJsonFixture } from '../../../../../test/util';
 import { getLockedDependencies } from './get-locked';
 
 jest.mock('../../../../util/fs');
 
-const packageLockJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/package-lock.json'), 'utf8')
-);
+const packageLockJson = loadJsonFixture(__filename, 'package-lock.json');
 
 describe(getName(__filename), () => {
   describe('getLockedDependencies()', () => {
diff --git a/lib/manager/npm/update/locked-dependency/index.spec.ts b/lib/manager/npm/update/locked-dependency/index.spec.ts
index b5cff2f0e15a15fab4e7c7fd735987b42d3ab127..ebcda222783838a7538e7315a3c52fbfaa6c4fb0 100644
--- a/lib/manager/npm/update/locked-dependency/index.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/index.spec.ts
@@ -1,43 +1,19 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
 import * as httpMock from '../../../../../test/http-mock';
-import { getName } from '../../../../../test/util';
+import { getName, loadFixture } from '../../../../../test/util';
 import { clone } from '../../../../util/clone';
 import type { UpdateLockedConfig } from '../../../types';
 import { updateLockedDependency } from '.';
 
-const packageFileContent = readFileSync(
-  resolve(__dirname, './__fixtures__/package.json'),
-  'utf8'
-);
-const lockFileContent = readFileSync(
-  resolve(__dirname, './__fixtures__/package-lock.json'),
-  'utf8'
-);
-
-const acceptsJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/accepts.json'), 'utf8')
-);
-
-const expressJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/express.json'), 'utf8')
-);
-
-const mimeJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/mime.json'), 'utf8')
-);
-
+const packageFileContent = loadFixture(__filename, 'package.json');
+const lockFileContent = loadFixture(__filename, 'package-lock.json');
+const acceptsJson = JSON.parse(loadFixture(__filename, 'accepts.json'));
+const expressJson = JSON.parse(loadFixture(__filename, 'express.json'));
+const mimeJson = JSON.parse(loadFixture(__filename, 'mime.json'));
 const serveStaticJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/serve-static.json'), 'utf8')
-);
-
-const sendJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/send.json'), 'utf8')
-);
-
-const typeIsJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/type-is.json'), 'utf8')
+  loadFixture(__filename, 'serve-static.json')
 );
+const sendJson = JSON.parse(loadFixture(__filename, 'send.json'));
+const typeIsJson = JSON.parse(loadFixture(__filename, 'type-is.json'));
 
 describe(getName(__filename), () => {
   describe('updateLockedDependency()', () => {
diff --git a/lib/manager/npm/update/locked-dependency/parent-version.spec.ts b/lib/manager/npm/update/locked-dependency/parent-version.spec.ts
index ee2e5a7c3d53701882a6c73c25afd3e930a21d93..0e5717c181a21675f0d5d74ad7bf0d181c257bd1 100644
--- a/lib/manager/npm/update/locked-dependency/parent-version.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/parent-version.spec.ts
@@ -1,12 +1,8 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
 import * as httpMock from '../../../../../test/http-mock';
-import { getName } from '../../../../../test/util';
+import { getName, loadJsonFixture } from '../../../../../test/util';
 import { findFirstParentVersion } from './parent-version';
 
-const expressJson = JSON.parse(
-  readFileSync(resolve(__dirname, './__fixtures__/express.json'), 'utf8')
-);
+const expressJson = loadJsonFixture(__filename, 'express.json');
 
 describe(getName(__filename), () => {
   describe('getLockedDependencies()', () => {
diff --git a/lib/manager/pip_requirements/extract.spec.ts b/lib/manager/pip_requirements/extract.spec.ts
index 9607c03eebc135073ed750238184fed2105da2ba..886f6059fe10c0be3affe47308f054f426726366 100644
--- a/lib/manager/pip_requirements/extract.spec.ts
+++ b/lib/manager/pip_requirements/extract.spec.ts
@@ -1,40 +1,14 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { setAdminConfig } from '../../config/admin';
 import { extractPackageFile } from './extract';
 
-const requirements1 = readFileSync(
-  'lib/manager/pip_requirements/__fixtures__/requirements1.txt',
-  'utf8'
-);
-const requirements2 = readFileSync(
-  'lib/manager/pip_requirements/__fixtures__/requirements2.txt',
-  'utf8'
-);
-const requirements3 = readFileSync(
-  'lib/manager/pip_requirements/__fixtures__/requirements3.txt',
-  'utf8'
-);
-
-const requirements4 = readFileSync(
-  'lib/manager/pip_requirements/__fixtures__/requirements4.txt',
-  'utf8'
-);
-
-const requirements5 = readFileSync(
-  'lib/manager/pip_requirements/__fixtures__/requirements5.txt',
-  'utf8'
-);
-
-const requirements6 = readFileSync(
-  'lib/manager/pip_requirements/__fixtures__/requirements6.txt',
-  'utf8'
-);
-
-const requirements7 = readFileSync(
-  'lib/manager/pip_requirements/__fixtures__/requirements7.txt',
-  'utf8'
-);
+const requirements1 = loadFixture(__filename, 'requirements1.txt');
+const requirements2 = loadFixture(__filename, 'requirements2.txt');
+const requirements3 = loadFixture(__filename, 'requirements3.txt');
+const requirements4 = loadFixture(__filename, 'requirements4.txt');
+const requirements5 = loadFixture(__filename, 'requirements5.txt');
+const requirements6 = loadFixture(__filename, 'requirements6.txt');
+const requirements7 = loadFixture(__filename, 'requirements7.txt');
 
 describe(getName(__filename), () => {
   beforeEach(() => {
diff --git a/lib/manager/pip_setup/__snapshots__/index.spec.ts.snap b/lib/manager/pip_setup/__snapshots__/index.spec.ts.snap
index 69fad81daa371467a56561e47c27a3c576a5b507..540026674ee265101d0226ced741b956ec23da32 100644
--- a/lib/manager/pip_setup/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/pip_setup/__snapshots__/index.spec.ts.snap
@@ -390,9 +390,9 @@ Array [
     },
   },
   Object {
-    "cmd": "<extract.py> \\"lib/manager/pip_setup/__fixtures__/setup.py\\"",
+    "cmd": "<extract.py> \\"setup.py\\"",
     "options": Object {
-      "cwd": "/tmp/github/some/repo/lib/manager/pip_setup/__fixtures__",
+      "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
       "env": Object {
         "HOME": "/home/user",
@@ -449,9 +449,9 @@ Array [
     },
   },
   Object {
-    "cmd": "<extract.py> \\"lib/manager/pip_setup/__fixtures__/setup.py\\"",
+    "cmd": "<extract.py> \\"setup.py\\"",
     "options": Object {
-      "cwd": "/tmp/github/some/repo/lib/manager/pip_setup/__fixtures__",
+      "cwd": "/tmp/github/some/repo",
       "encoding": "utf-8",
       "env": Object {
         "HOME": "/home/user",
diff --git a/lib/manager/pip_setup/index.spec.ts b/lib/manager/pip_setup/index.spec.ts
index b5cd418f0c9c8190de837761e2ce20864a0c4548..b81802bc82f6be73c1b83989f876b8b5f10c3df2 100644
--- a/lib/manager/pip_setup/index.spec.ts
+++ b/lib/manager/pip_setup/index.spec.ts
@@ -1,4 +1,3 @@
-import { readFileSync } from 'fs';
 import {
   ExecSnapshots,
   envMock,
@@ -6,18 +5,16 @@ import {
   mockExecAll,
   mockExecSequence,
 } from '../../../test/exec-util';
-import { env, getName } from '../../../test/util';
+import { env, getName, loadFixture } from '../../../test/util';
 import { setUtilConfig } from '../../util';
 import { BinarySource } from '../../util/exec/common';
 import * as fs from '../../util/fs';
 import * as extract from './extract';
 import { extractPackageFile } from '.';
 
-const packageFile = 'lib/manager/pip_setup/__fixtures__/setup.py';
-const content = readFileSync(packageFile, 'utf8');
-
-const packageFileJson = 'lib/manager/pip_setup/__fixtures__/setup.py.json';
-const jsonContent = readFileSync(packageFileJson, 'utf8');
+const packageFile = 'setup.py';
+const content = loadFixture(__filename, packageFile);
+const jsonContent = loadFixture(__filename, 'setup.py.json');
 
 const config = {
   localDir: '/tmp/github/some/repo',
diff --git a/lib/manager/pipenv/extract.spec.ts b/lib/manager/pipenv/extract.spec.ts
index 5e491d6bd3eba535a3e37ab422cad6ffff983871..d302208b924b430d81ebc624fdcd1d1a06986696 100644
--- a/lib/manager/pipenv/extract.spec.ts
+++ b/lib/manager/pipenv/extract.spec.ts
@@ -1,29 +1,13 @@
-import fs from 'fs';
-import { fs as fsutil, getName } from '../../../test/util';
+import { fs as fsutil, getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
 
-const pipfile1 = fs.readFileSync(
-  'lib/manager/pipenv/__fixtures__/Pipfile1',
-  'utf8'
-);
-const pipfile2 = fs.readFileSync(
-  'lib/manager/pipenv/__fixtures__/Pipfile2',
-  'utf8'
-);
-const pipfile3 = fs.readFileSync(
-  'lib/manager/pipenv/__fixtures__/Pipfile3',
-  'utf8'
-);
-const pipfile4 = fs.readFileSync(
-  'lib/manager/pipenv/__fixtures__/Pipfile4',
-  'utf8'
-);
-const pipfile5 = fs.readFileSync(
-  'lib/manager/pipenv/__fixtures__/Pipfile5',
-  'utf8'
-);
+const pipfile1 = loadFixture(__filename, 'Pipfile1');
+const pipfile2 = loadFixture(__filename, 'Pipfile2');
+const pipfile3 = loadFixture(__filename, 'Pipfile3');
+const pipfile4 = loadFixture(__filename, 'Pipfile4');
+const pipfile5 = loadFixture(__filename, 'Pipfile5');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/poetry/artifacts.spec.ts b/lib/manager/poetry/artifacts.spec.ts
index c8a8aa9cb8f354723f7c6ffc734030758892ab92..92466cf6aae69ba3f8d1c4c7787fc06d5e5d6ec9 100644
--- a/lib/manager/poetry/artifacts.spec.ts
+++ b/lib/manager/poetry/artifacts.spec.ts
@@ -1,9 +1,8 @@
 import { exec as _exec } from 'child_process';
-import { readFileSync } from 'fs';
 import _fs from 'fs-extra';
 import { join } from 'upath';
 import { envMock, mockExecAll } from '../../../test/exec-util';
-import { mocked } from '../../../test/util';
+import { loadFixture, mocked } from '../../../test/util';
 import * as _datasource from '../../datasource';
 import { setExecConfig } from '../../util/exec';
 import { BinarySource } from '../../util/exec/common';
@@ -12,10 +11,7 @@ import * as _env from '../../util/exec/env';
 import * as _hostRules from '../../util/host-rules';
 import { updateArtifacts } from './artifacts';
 
-const pyproject10toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.10.toml',
-  'utf8'
-);
+const pyproject10toml = loadFixture(__filename, 'pyproject.10.toml');
 
 jest.mock('fs-extra');
 jest.mock('child_process');
diff --git a/lib/manager/poetry/extract.spec.ts b/lib/manager/poetry/extract.spec.ts
index 8e69b748625532f9d67f7226f15f0878fadf9cb5..5991b47a68fd3d3855babf6d0de870530fd5a6e3 100644
--- a/lib/manager/poetry/extract.spec.ts
+++ b/lib/manager/poetry/extract.spec.ts
@@ -1,65 +1,21 @@
-import { readFileSync } from 'fs';
-import { fs, getName } from '../../../test/util';
+import { fs, getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
 
-const pyproject1toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.1.toml',
-  'utf8'
-);
-
-const pyproject2toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.2.toml',
-  'utf8'
-);
-
-const pyproject3toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.3.toml',
-  'utf8'
-);
-
-const pyproject4toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.4.toml',
-  'utf8'
-);
-
-const pyproject5toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.5.toml',
-  'utf8'
-);
-
-const pyproject6toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.6.toml',
-  'utf8'
-);
-
-const pyproject7toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.7.toml',
-  'utf8'
-);
-
-const pyproject8toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.8.toml',
-  'utf8'
-);
-
-const pyproject9toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.9.toml',
-  'utf8'
-);
+const pyproject1toml = loadFixture(__filename, 'pyproject.1.toml');
+const pyproject2toml = loadFixture(__filename, 'pyproject.2.toml');
+const pyproject3toml = loadFixture(__filename, 'pyproject.3.toml');
+const pyproject4toml = loadFixture(__filename, 'pyproject.4.toml');
+const pyproject5toml = loadFixture(__filename, 'pyproject.5.toml');
+const pyproject6toml = loadFixture(__filename, 'pyproject.6.toml');
+const pyproject7toml = loadFixture(__filename, 'pyproject.7.toml');
+const pyproject8toml = loadFixture(__filename, 'pyproject.8.toml');
+const pyproject9toml = loadFixture(__filename, 'pyproject.9.toml');
 
 // pyproject.10.toml use by artifacts
-
-const pyproject11toml = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.11.toml',
-  'utf8'
-);
-
-const pyproject11tomlLock = readFileSync(
-  'lib/manager/poetry/__fixtures__/pyproject.11.toml.lock',
-  'utf8'
-);
+const pyproject11toml = loadFixture(__filename, 'pyproject.11.toml');
+const pyproject11tomlLock = loadFixture(__filename, 'pyproject.11.toml.lock');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/pre-commit/extract.spec.ts b/lib/manager/pre-commit/extract.spec.ts
index 18f4df48b1cff4caffddd5105828d9b2a8297a9f..fd9ae0b6c53e40473d9850396020b436bebbf7b1 100644
--- a/lib/manager/pre-commit/extract.spec.ts
+++ b/lib/manager/pre-commit/extract.spec.ts
@@ -1,41 +1,34 @@
-import { readFileSync } from 'fs';
-import { getName, mocked } from '../../../test/util';
+import { getName, loadFixture, mocked } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/host-rules');
 const hostRules = mocked(_hostRules);
-
 const filename = '.pre-commit.yaml';
 
-const complexPrecommitConfig = readFileSync(
-  'lib/manager/pre-commit/__fixtures__/complex.pre-commit-config.yaml',
-  'utf8'
+const complexPrecommitConfig = loadFixture(
+  __filename,
+  'complex.pre-commit-config.yaml'
 );
-
-const examplePrecommitConfig = readFileSync(
-  'lib/manager/pre-commit/__fixtures__/.pre-commit-config.yaml',
-  'utf8'
+const examplePrecommitConfig = loadFixture(
+  __filename,
+  '.pre-commit-config.yaml'
 );
-
-const emptyReposPrecommitConfig = readFileSync(
-  'lib/manager/pre-commit/__fixtures__/empty_repos.pre-commit-config.yaml',
-  'utf8'
+const emptyReposPrecommitConfig = loadFixture(
+  __filename,
+  'empty_repos.pre-commit-config.yaml'
 );
-
-const noReposPrecommitConfig = readFileSync(
-  'lib/manager/pre-commit/__fixtures__/no_repos.pre-commit-config.yaml',
-  'utf8'
+const noReposPrecommitConfig = loadFixture(
+  __filename,
+  'no_repos.pre-commit-config.yaml'
 );
-
-const invalidRepoPrecommitConfig = readFileSync(
-  'lib/manager/pre-commit/__fixtures__/invalid_repo.pre-commit-config.yaml',
-  'utf8'
+const invalidRepoPrecommitConfig = loadFixture(
+  __filename,
+  'invalid_repo.pre-commit-config.yaml'
 );
-
-const enterpriseGitPrecommitConfig = readFileSync(
-  'lib/manager/pre-commit/__fixtures__/enterprise.pre-commit-config.yaml',
-  'utf8'
+const enterpriseGitPrecommitConfig = loadFixture(
+  __filename,
+  'enterprise.pre-commit-config.yaml'
 );
 
 describe(getName(__filename), () => {
diff --git a/lib/manager/pub/extract.spec.ts b/lib/manager/pub/extract.spec.ts
index 6130772162ededb6e3af5d96571a7fdd697712a6..1b5c74a5d6c2030a49d5291c01fbd5d0f2d83880 100644
--- a/lib/manager/pub/extract.spec.ts
+++ b/lib/manager/pub/extract.spec.ts
@@ -1,16 +1,8 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
-const brokenYaml = readFileSync(
-  'lib/manager/pub/__fixtures__/update.yaml',
-  'utf8'
-);
-
-const packageFile = readFileSync(
-  'lib/manager/pub/__fixtures__/extract.yaml',
-  'utf8'
-);
+const brokenYaml = loadFixture(__filename, 'update.yaml');
+const packageFile = loadFixture(__filename, 'extract.yaml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile', () => {
diff --git a/lib/manager/regex/index.spec.ts b/lib/manager/regex/index.spec.ts
index 7d69417eeb6d54a55a07607a70dd8d26a78efad8..0f944b63a9f877a95025812efbb2dc56c58d82fd 100644
--- a/lib/manager/regex/index.spec.ts
+++ b/lib/manager/regex/index.spec.ts
@@ -1,22 +1,11 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { logger } from '../../logger';
 import type { CustomExtractConfig } from '../types';
 import { defaultConfig, extractPackageFile } from '.';
 
-const dockerfileContent = readFileSync(
-  resolve(__dirname, `./__fixtures__/Dockerfile`),
-  'utf8'
-);
-const ansibleYamlContent = readFileSync(
-  resolve(__dirname, `./__fixtures__/ansible.yml`),
-  'utf8'
-);
-const exampleJsonContent = readFileSync(
-  resolve(__dirname, `./__fixtures__/example.json`),
-  'utf8'
-);
+const dockerfileContent = loadFixture(__filename, `Dockerfile`);
+const ansibleYamlContent = loadFixture(__filename, `ansible.yml`);
+const exampleJsonContent = loadFixture(__filename, `example.json`);
 
 describe(getName(__filename), () => {
   it('has default config', () => {
diff --git a/lib/manager/sbt/extract.spec.ts b/lib/manager/sbt/extract.spec.ts
index f4f0453ed4cc41c125295708a5419bb5d0584b0a..9ddb983133263662b9a64747fb8aad1c5e87a23c 100644
--- a/lib/manager/sbt/extract.spec.ts
+++ b/lib/manager/sbt/extract.spec.ts
@@ -1,29 +1,19 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const sbt = readFileSync(
-  resolve(__dirname, `./__fixtures__/sample.sbt`),
-  'utf8'
+const sbt = loadFixture(__filename, `sample.sbt`);
+const sbtScalaVersionVariable = loadFixture(
+  __filename,
+  `scala-version-variable.sbt`
 );
-const sbtScalaVersionVariable = readFileSync(
-  resolve(__dirname, `./__fixtures__/scala-version-variable.sbt`),
-  'utf8'
+const sbtMissingScalaVersion = loadFixture(
+  __filename,
+  `missing-scala-version.sbt`
 );
-const sbtMissingScalaVersion = readFileSync(
-  resolve(__dirname, `./__fixtures__/missing-scala-version.sbt`),
-  'utf8'
-);
-
-const sbtDependencyFile = readFileSync(
-  resolve(__dirname, `./__fixtures__/dependency-file.scala`),
-  'utf8'
-);
-
-const sbtPrivateVariableDependencyFile = readFileSync(
-  resolve(__dirname, `./__fixtures__/private-variable-dependency-file.scala`),
-  'utf8'
+const sbtDependencyFile = loadFixture(__filename, `dependency-file.scala`);
+const sbtPrivateVariableDependencyFile = loadFixture(
+  __filename,
+  `private-variable-dependency-file.scala`
 );
 
 describe(getName(__filename), () => {
diff --git a/lib/manager/setup-cfg/extract.spec.ts b/lib/manager/setup-cfg/extract.spec.ts
index 97d564c32e42091d09e3c768bc8e24ff69d75162..693c3d6d0be9dcfe540ac97e276cd1ddd010d57f 100644
--- a/lib/manager/setup-cfg/extract.spec.ts
+++ b/lib/manager/setup-cfg/extract.spec.ts
@@ -1,11 +1,7 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const content = readFileSync(
-  'lib/manager/setup-cfg/__fixtures__/setup-cfg-1.txt',
-  'utf8'
-);
+const content = loadFixture(__filename, 'setup-cfg-1.txt');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/swift/index.spec.ts b/lib/manager/swift/index.spec.ts
index fcc6362a2c3ac1825dd89c06356a644cd22a799a..3c0e90918502ad64f20c20f215f547dbe7b6d402 100644
--- a/lib/manager/swift/index.spec.ts
+++ b/lib/manager/swift/index.spec.ts
@@ -1,12 +1,7 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const pkgContent = readFileSync(
-  resolve(__dirname, `./__fixtures__/SamplePackage.swift`),
-  'utf8'
-);
+const pkgContent = loadFixture(__filename, `SamplePackage.swift`);
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/terraform/extract.spec.ts b/lib/manager/terraform/extract.spec.ts
index 11f80a1817c7961efe16cb614966a46b1225b492..b617c39b8563748fa10024a4023e514d5dbe837e 100644
--- a/lib/manager/terraform/extract.spec.ts
+++ b/lib/manager/terraform/extract.spec.ts
@@ -1,13 +1,12 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const tf1 = readFileSync('lib/manager/terraform/__fixtures__/1.tf', 'utf8');
+const tf1 = loadFixture(__filename, '1.tf');
 const tf2 = `module "relative" {
   source = "../../modules/fe"
 }
 `;
-const helm = readFileSync('lib/manager/terraform/__fixtures__/helm.tf', 'utf8');
+const helm = loadFixture(__filename, 'helm.tf');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/terragrunt/extract.spec.ts b/lib/manager/terragrunt/extract.spec.ts
index 23e68f7d4e0e8091671489320b1dfe3b9e306a59..90626f785bbede613fef79382e4cb14516e1a56c 100644
--- a/lib/manager/terragrunt/extract.spec.ts
+++ b/lib/manager/terragrunt/extract.spec.ts
@@ -1,8 +1,7 @@
-import { readFileSync } from 'fs';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const tg1 = readFileSync('lib/manager/terragrunt/__fixtures__/2.hcl', 'utf8');
+const tg1 = loadFixture(__filename, '2.hcl');
 const tg2 = `terragrunt {
   source = "../../modules/fe"
 }
diff --git a/lib/manager/travis/extract.spec.ts b/lib/manager/travis/extract.spec.ts
index 08ade541405730ca23be383365e5811751c49534..8335256c0c672d3e66152ddeaeb857dbb6117b9e 100644
--- a/lib/manager/travis/extract.spec.ts
+++ b/lib/manager/travis/extract.spec.ts
@@ -1,12 +1,7 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-const invalidYAML = readFileSync(
-  resolve('lib/manager/travis/__fixtures__/invalid.yml'),
-  'utf8'
-);
+const invalidYAML = loadFixture(__filename, 'invalid.yml');
 
 describe(getName(__filename), () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/travis/update.spec.ts b/lib/manager/travis/update.spec.ts
index 518dbf613248b2c14a1b57e8854b37c438e9065d..b36897e7f4474b3b0bc4fd465eb5036e3eff6f2c 100644
--- a/lib/manager/travis/update.spec.ts
+++ b/lib/manager/travis/update.spec.ts
@@ -1,12 +1,7 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { updateDependency } from './update';
 
-const content = readFileSync(
-  resolve('lib/manager/travis/__fixtures__/travis.yml'),
-  'utf8'
-);
+const content = loadFixture(__filename, 'travis.yml');
 
 describe(getName(__filename), () => {
   describe('updateDependency', () => {
diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts
index ebcd4a20d0d65dc10f0a18c2dd09a05638d95a55..f6002def84c42c1f9d44db0cf88fcce9cf5dda91 100644
--- a/lib/platform/github/index.spec.ts
+++ b/lib/platform/github/index.spec.ts
@@ -1,7 +1,6 @@
-import fs from 'fs-extra';
 import { DateTime } from 'luxon';
 import * as httpMock from '../../../test/http-mock';
-import { getName, mocked } from '../../../test/util';
+import { getName, loadFixture, mocked } from '../../../test/util';
 import {
   REPOSITORY_NOT_FOUND,
   REPOSITORY_RENAMED,
@@ -42,13 +41,13 @@ describe(getName(__filename), () => {
     httpMock.reset();
   });
 
-  const graphqlOpenPullRequests = fs.readFileSync(
-    'lib/platform/github/__fixtures__/graphql/pullrequest-1.json',
-    'utf8'
+  const graphqlOpenPullRequests = loadFixture(
+    __filename,
+    'graphql/pullrequest-1.json'
   );
-  const graphqlClosedPullRequests = fs.readFileSync(
-    'lib/platform/github/__fixtures__/graphql/pullrequests-closed.json',
-    'utf8'
+  const graphqlClosedPullRequests = loadFixture(
+    __filename,
+    'graphql/pullrequests-closed.json'
   );
 
   describe('initPlatform()', () => {
diff --git a/lib/platform/utils/pr-body.spec.ts b/lib/platform/utils/pr-body.spec.ts
index ab0b3a7cfece7d7a689995595e50cfed7f6b68ff..873b12529919c613a9109e2d7a806ab131dffe0a 100644
--- a/lib/platform/utils/pr-body.spec.ts
+++ b/lib/platform/utils/pr-body.spec.ts
@@ -1,15 +1,9 @@
-import fs from 'fs-extra';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { smartTruncate } from './pr-body';
 
+const prBody = loadFixture(__filename, 'pr-body.txt');
+
 describe(getName(__filename), () => {
-  let prBody: string;
-  beforeAll(async () => {
-    prBody = await fs.readFile(
-      'lib/platform/utils/__fixtures__/pr-body.txt',
-      'utf8'
-    );
-  });
   describe('.smartTruncate', () => {
     it('truncates to 1000', () => {
       const body = smartTruncate(prBody, 1000);
diff --git a/lib/platform/utils/read-only-issue-body.spec.ts b/lib/platform/utils/read-only-issue-body.spec.ts
index 440d4b82acaa568e2bb2f585c52e88c27e39184d..ef98dedc3d7ef94c08463d4ee67af431621ff441 100644
--- a/lib/platform/utils/read-only-issue-body.spec.ts
+++ b/lib/platform/utils/read-only-issue-body.spec.ts
@@ -1,15 +1,9 @@
-import fs from 'fs-extra';
-import { getName } from '../../../test/util';
+import { getName, loadFixture } from '../../../test/util';
 import { readOnlyIssueBody } from './read-only-issue-body';
 
+const issueBody = loadFixture(__filename, 'issue-body.txt');
+
 describe(getName(__filename), () => {
-  let issueBody: string;
-  beforeAll(async () => {
-    issueBody = await fs.readFile(
-      'lib/platform/utils/__fixtures__/issue-body.txt',
-      'utf8'
-    );
-  });
   describe('.readOnlyIssueBody', () => {
     it('removes all checkbox formatting', () => {
       expect(readOnlyIssueBody(issueBody)).toEqual(
diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts
index 0bf06f454badb637930407978d906c67861d2fd1..125d9237d34620da8af0e7224b5023685599562f 100644
--- a/lib/workers/branch/auto-replace.spec.ts
+++ b/lib/workers/branch/auto-replace.spec.ts
@@ -1,15 +1,10 @@
-import { readFileSync } from 'fs';
-import { resolve } from 'upath';
-import { defaultConfig, getName } from '../../../test/util';
+import { defaultConfig, getName, loadFixture } from '../../../test/util';
 import { WORKER_FILE_UPDATE_FAILED } from '../../constants/error-messages';
 import { extractPackageFile } from '../../manager/html';
 import type { BranchUpgradeConfig } from '../types';
 import { doAutoReplace } from './auto-replace';
 
-const sampleHtml = readFileSync(
-  resolve(__dirname, `../../manager/html/__fixtures__/sample.html`),
-  'utf8'
-);
+const sampleHtml = loadFixture(__filename, 'sample.html', `../../manager/html`);
 
 jest.mock('../../util/fs');
 
diff --git a/lib/workers/pr/changelog/release-notes.spec.ts b/lib/workers/pr/changelog/release-notes.spec.ts
index aca57ac8c44f2b1430793643ebef321f873befc6..f28f25f667f18239f9293c9e277de1a0599af935 100644
--- a/lib/workers/pr/changelog/release-notes.spec.ts
+++ b/lib/workers/pr/changelog/release-notes.spec.ts
@@ -1,7 +1,6 @@
-import fs from 'fs-extra';
 import { DateTime } from 'luxon';
 import * as httpMock from '../../../../test/http-mock';
-import { getName, mocked } from '../../../../test/util';
+import { getName, loadFixture, mocked } from '../../../../test/util';
 import * as _hostRules from '../../../util/host-rules';
 import {
   addReleaseNotes,
@@ -16,33 +15,19 @@ jest.mock('../../../util/host-rules');
 
 const hostRules = mocked(_hostRules);
 
-const angularJsChangelogMd = fs.readFileSync(
-  'lib/workers/pr/__fixtures__/angular-js.md',
-  'utf8'
+const angularJsChangelogMd = loadFixture(__filename, 'angular-js.md', '..');
+const jestChangelogMd = loadFixture(__filename, 'jest.md', '..');
+const jsYamlChangelogMd = loadFixture(__filename, 'js-yaml.md', '..');
+const yargsChangelogMd = loadFixture(__filename, 'yargs.md', '..');
+const adapterutilsChangelogMd = loadFixture(
+  __filename,
+  'adapter-utils.md',
+  '..'
 );
-const jestChangelogMd = fs.readFileSync(
-  'lib/workers/pr/__fixtures__/jest.md',
-  'utf8'
-);
-
-const jsYamlChangelogMd = fs.readFileSync(
-  'lib/workers/pr/__fixtures__/js-yaml.md',
-  'utf8'
-);
-
-const yargsChangelogMd = fs.readFileSync(
-  'lib/workers/pr/__fixtures__/yargs.md',
-  'utf8'
-);
-
-const adapterutilsChangelogMd = fs.readFileSync(
-  'lib/workers/pr/__fixtures__/adapter-utils.md',
-  'utf8'
-);
-
-const gitterWebappChangelogMd = fs.readFileSync(
-  'lib/workers/pr/__fixtures__/gitter-webapp.md',
-  'utf8'
+const gitterWebappChangelogMd = loadFixture(
+  __filename,
+  'gitter-webapp.md',
+  '..'
 );
 
 const githubTreeResponse = {
diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts
index 67bf63f17c86fbdfe0e36a6f02ee2b8e9e492ce1..35f20a00daf67e0359976a6206fc9740569d05d2 100644
--- a/lib/workers/repository/dependency-dashboard.spec.ts
+++ b/lib/workers/repository/dependency-dashboard.spec.ts
@@ -1,10 +1,10 @@
-import fs from 'fs';
 import { ERROR, WARN } from 'bunyan';
 import { mock } from 'jest-mock-extended';
 import {
   RenovateConfig,
   getConfig,
   getName,
+  loadFixture,
   logger,
   platform,
 } from '../../../test/util';
@@ -239,10 +239,7 @@ describe(getName(__filename), () => {
         config.dependencyDashboardTitle
       );
       expect(platform.ensureIssue.mock.calls[0][0].body).toBe(
-        fs.readFileSync(
-          'lib/workers/repository/__fixtures__/master-issue_with_8_PR.txt',
-          'utf8'
-        )
+        loadFixture(__filename, 'master-issue_with_8_PR.txt')
       );
       expect(platform.getBranchPr).toHaveBeenCalledTimes(0);
       expect(platform.findPr).toHaveBeenCalledTimes(0);
@@ -282,10 +279,7 @@ describe(getName(__filename), () => {
         config.dependencyDashboardTitle
       );
       expect(platform.ensureIssue.mock.calls[0][0].body).toBe(
-        fs.readFileSync(
-          'lib/workers/repository/__fixtures__/master-issue_with_2_PR_edited.txt',
-          'utf8'
-        )
+        loadFixture(__filename, 'master-issue_with_2_PR_edited.txt')
       );
       expect(platform.getBranchPr).toHaveBeenCalledTimes(2);
       expect(platform.getBranchPr.mock.calls[0][0]).toBe('branchName1');
@@ -335,10 +329,7 @@ describe(getName(__filename), () => {
         config.dependencyDashboardTitle
       );
       expect(platform.ensureIssue.mock.calls[0][0].body).toBe(
-        fs.readFileSync(
-          'lib/workers/repository/__fixtures__/master-issue_with_3_PR_in_progress.txt',
-          'utf8'
-        )
+        loadFixture(__filename, 'master-issue_with_3_PR_in_progress.txt')
       );
       expect(platform.getBranchPr).toHaveBeenCalledTimes(3);
       expect(platform.getBranchPr.mock.calls[0][0]).toBe('branchName1');
@@ -382,10 +373,7 @@ describe(getName(__filename), () => {
         config.dependencyDashboardTitle
       );
       expect(platform.ensureIssue.mock.calls[0][0].body).toBe(
-        fs.readFileSync(
-          'lib/workers/repository/__fixtures__/master-issue_with_2_PR_closed_ignored.txt',
-          'utf8'
-        )
+        loadFixture(__filename, 'master-issue_with_2_PR_closed_ignored.txt')
       );
       expect(platform.getBranchPr).toHaveBeenCalledTimes(0);
       expect(platform.findPr).toHaveBeenCalledTimes(2);
@@ -443,10 +431,7 @@ describe(getName(__filename), () => {
         config.dependencyDashboardTitle
       );
       expect(platform.ensureIssue.mock.calls[0][0].body).toBe(
-        fs.readFileSync(
-          'lib/workers/repository/__fixtures__/master-issue_with_3_PR_in_approval.txt',
-          'utf8'
-        )
+        loadFixture(__filename, 'master-issue_with_3_PR_in_approval.txt')
       );
       expect(platform.findPr).toHaveBeenCalledTimes(0);
 
diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts
index 1edb6aa299597f430b7320846b2d598e900948eb..d457c3a565ee536034d9daa2e457bf973bd85878 100644
--- a/lib/workers/repository/process/lookup/index.spec.ts
+++ b/lib/workers/repository/process/lookup/index.spec.ts
@@ -1,12 +1,11 @@
 import nock from 'nock';
-import { getConfig, getName, mocked, partial } from '../../../../../test/util';
-import qJson from '../../../../config/npm/__fixtures__/01.json';
-import helmetJson from '../../../../config/npm/__fixtures__/02.json';
-import coffeelintJson from '../../../../config/npm/__fixtures__/coffeelint.json';
-import nextJson from '../../../../config/npm/__fixtures__/next.json';
-import typescriptJson from '../../../../config/npm/__fixtures__/typescript.json';
-import vueJson from '../../../../config/npm/__fixtures__/vue.json';
-import webpackJson from '../../../../config/npm/__fixtures__/webpack.json';
+import {
+  getConfig,
+  getName,
+  loadJsonFixture,
+  mocked,
+  partial,
+} from '../../../../../test/util';
 import { CONFIG_VALIDATION } from '../../../../constants/error-messages';
 import * as datasourceDocker from '../../../../datasource/docker';
 import { id as datasourceDockerId } from '../../../../datasource/docker';
@@ -29,7 +28,25 @@ jest.mock('../../../../datasource/docker');
 jest.mock('../../../../datasource/git-refs');
 jest.mock('../../../../datasource/github-releases');
 
-qJson.latestVersion = '1.4.1';
+const fixtureRoot = '../../../../config/npm';
+const qJson = {
+  ...loadJsonFixture(__filename, '01.json', fixtureRoot),
+  latestVersion: '1.4.1',
+};
+const helmetJson = loadJsonFixture(__filename, '02.json', fixtureRoot);
+const coffeelintJson = loadJsonFixture(
+  __filename,
+  'coffeelint.json',
+  fixtureRoot
+);
+const nextJson = loadJsonFixture(__filename, 'next.json', fixtureRoot);
+const typescriptJson = loadJsonFixture(
+  __filename,
+  'typescript.json',
+  fixtureRoot
+);
+const vueJson = loadJsonFixture(__filename, 'vue.json', fixtureRoot);
+const webpackJson = loadJsonFixture(__filename, 'webpack.json', fixtureRoot);
 
 const docker = mocked(datasourceDocker) as any;
 docker.defaultRegistryUrls = ['https://index.docker.io'];
diff --git a/test/util.ts b/test/util.ts
index 06f596fb1e85e6c0e7da47851344455800285492..e45057b9d2909903d18dc39b5eef4f9178fab4e2 100644
--- a/test/util.ts
+++ b/test/util.ts
@@ -1,5 +1,7 @@
 import crypto from 'crypto';
+import { readFileSync } from 'fs';
 import { expect } from '@jest/globals';
+import upath from 'upath';
 import { getConfig } from '../lib/config/defaults';
 import type { RenovateConfig as _RenovateConfig } from '../lib/config/types';
 import * as _logger from '../lib/logger';
@@ -44,6 +46,30 @@ export function getName(file: string): string {
   return name;
 }
 
+export function loadFixture(
+  currentFile: string,
+  fixtureFile: string,
+  fixtureRoot = '.'
+): string {
+  const callerDir = upath.dirname(currentFile);
+  const fixtureAbsFile = upath.join(
+    callerDir,
+    fixtureRoot,
+    '__fixtures__',
+    fixtureFile
+  );
+  return readFileSync(fixtureAbsFile, { encoding: 'utf8' });
+}
+
+export function loadJsonFixture<T = any>(
+  currentFile: string,
+  fixtureFile: string,
+  fixtureRoot = '.'
+): T {
+  const rawFixture = loadFixture(currentFile, fixtureFile, fixtureRoot);
+  return JSON.parse(rawFixture) as T;
+}
+
 /**
  * Can be used to search and replace strings in jest snapshots.
  * @example