diff --git a/tests/integration/api_activitypub_person_test.go b/tests/integration/api_activitypub_person_test.go
index 75578094f5..17d628a483 100644
--- a/tests/integration/api_activitypub_person_test.go
+++ b/tests/integration/api_activitypub_person_test.go
@@ -7,28 +7,28 @@ import (
 	"fmt"
 	"net/http"
 	"net/http/httptest"
-	"net/url"
 	"testing"
 
 	"code.gitea.io/gitea/models/db"
 	user_model "code.gitea.io/gitea/models/user"
 	"code.gitea.io/gitea/modules/activitypub"
 	"code.gitea.io/gitea/modules/setting"
+	"code.gitea.io/gitea/modules/test"
 	"code.gitea.io/gitea/routers"
+	"code.gitea.io/gitea/tests"
 
 	ap "github.com/go-ap/activitypub"
 	"github.com/stretchr/testify/assert"
 )
 
 func TestActivityPubPerson(t *testing.T) {
-	setting.Federation.Enabled = true
-	testWebRoutes = routers.NormalRoutes()
-	defer func() {
-		setting.Federation.Enabled = false
-		testWebRoutes = routers.NormalRoutes()
-	}()
+	defer tests.PrepareTestEnv(t)()
+	defer test.MockVariableValue(&setting.Federation.Enabled, true)()
+	defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())()
+
+	t.Run("ExistingPerson", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
 
-	onGiteaRun(t, func(*testing.T, *url.URL) {
 		userID := 2
 		username := "user2"
 		req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/activitypub/user-id/%v", userID))
@@ -56,41 +56,18 @@ func TestActivityPubPerson(t *testing.T) {
 		assert.NotNil(t, pubKeyPem)
 		assert.Regexp(t, "^-----BEGIN PUBLIC KEY-----", pubKeyPem)
 	})
-}
-
-func TestActivityPubMissingPerson(t *testing.T) {
-	setting.Federation.Enabled = true
-	testWebRoutes = routers.NormalRoutes()
-	defer func() {
-		setting.Federation.Enabled = false
-		testWebRoutes = routers.NormalRoutes()
-	}()
-
-	onGiteaRun(t, func(*testing.T, *url.URL) {
+	t.Run("MissingPerson", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
 		req := NewRequest(t, "GET", "/api/v1/activitypub/user-id/999999999")
 		resp := MakeRequest(t, req, http.StatusNotFound)
 		assert.Contains(t, resp.Body.String(), "user does not exist")
 	})
-}
+	t.Run("MissingPersonInbox", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
+		srv := httptest.NewServer(testWebRoutes)
+		defer srv.Close()
+		defer test.MockVariableValue(&setting.AppURL, srv.URL+"/")()
 
-func TestActivityPubPersonInbox(t *testing.T) {
-	setting.Federation.Enabled = true
-	testWebRoutes = routers.NormalRoutes()
-	defer func() {
-		setting.Federation.Enabled = false
-		testWebRoutes = routers.NormalRoutes()
-	}()
-
-	srv := httptest.NewServer(testWebRoutes)
-	defer srv.Close()
-
-	onGiteaRun(t, func(*testing.T, *url.URL) {
-		appURL := setting.AppURL
-		setting.AppURL = srv.URL + "/"
-		defer func() {
-			setting.Database.LogSQL = false
-			setting.AppURL = appURL
-		}()
 		username1 := "user1"
 		ctx := t.Context()
 		user1, err := user_model.GetUserByName(ctx, username1)
diff --git a/tests/integration/api_admin_org_test.go b/tests/integration/api_admin_org_test.go
index b243856127..b2d77456c4 100644
--- a/tests/integration/api_admin_org_test.go
+++ b/tests/integration/api_admin_org_test.go
@@ -5,7 +5,6 @@ package integration
 
 import (
 	"net/http"
-	"net/url"
 	"strings"
 	"testing"
 
@@ -19,10 +18,12 @@ import (
 )
 
 func TestAPIAdminOrgCreate(t *testing.T) {
-	onGiteaRun(t, func(*testing.T, *url.URL) {
-		session := loginUser(t, "user1")
-		token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteAdmin)
+	defer tests.PrepareTestEnv(t)()
+	session := loginUser(t, "user1")
+	token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteAdmin)
 
+	t.Run("CreateOrg", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
 		org := api.CreateOrgOption{
 			UserName:    "user2_org",
 			FullName:    "User2's organization",
@@ -51,13 +52,8 @@ func TestAPIAdminOrgCreate(t *testing.T) {
 			FullName:  org.FullName,
 		})
 	})
-}
-
-func TestAPIAdminOrgCreateBadVisibility(t *testing.T) {
-	onGiteaRun(t, func(*testing.T, *url.URL) {
-		session := loginUser(t, "user1")
-		token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteAdmin)
-
+	t.Run("CreateBadVisibility", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
 		org := api.CreateOrgOption{
 			UserName:    "user2_org",
 			FullName:    "User2's organization",
@@ -70,22 +66,21 @@ func TestAPIAdminOrgCreateBadVisibility(t *testing.T) {
 			AddTokenAuth(token)
 		MakeRequest(t, req, http.StatusUnprocessableEntity)
 	})
-}
-
-func TestAPIAdminOrgCreateNotAdmin(t *testing.T) {
-	defer tests.PrepareTestEnv(t)()
-	nonAdminUsername := "user2"
-	session := loginUser(t, nonAdminUsername)
-	token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeAll)
-	org := api.CreateOrgOption{
-		UserName:    "user2_org",
-		FullName:    "User2's organization",
-		Description: "This organization created by admin for user2",
-		Website:     "https://try.gitea.io",
-		Location:    "Shanghai",
-		Visibility:  "public",
-	}
-	req := NewRequestWithJSON(t, "POST", "/api/v1/admin/users/user2/orgs", &org).
-		AddTokenAuth(token)
-	MakeRequest(t, req, http.StatusForbidden)
+	t.Run("CreateNotAdmin", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
+		nonAdminUsername := "user2"
+		session := loginUser(t, nonAdminUsername)
+		token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeAll)
+		org := api.CreateOrgOption{
+			UserName:    "user2_org",
+			FullName:    "User2's organization",
+			Description: "This organization created by admin for user2",
+			Website:     "https://try.gitea.io",
+			Location:    "Shanghai",
+			Visibility:  "public",
+		}
+		req := NewRequestWithJSON(t, "POST", "/api/v1/admin/users/user2/orgs", &org).
+			AddTokenAuth(token)
+		MakeRequest(t, req, http.StatusForbidden)
+	})
 }
diff --git a/tests/integration/api_nodeinfo_test.go b/tests/integration/api_nodeinfo_test.go
index 75f8dbb4ba..916c2f1723 100644
--- a/tests/integration/api_nodeinfo_test.go
+++ b/tests/integration/api_nodeinfo_test.go
@@ -5,35 +5,31 @@ package integration
 
 import (
 	"net/http"
-	"net/url"
 	"testing"
 
 	"code.gitea.io/gitea/modules/setting"
 	api "code.gitea.io/gitea/modules/structs"
+	"code.gitea.io/gitea/modules/test"
 	"code.gitea.io/gitea/routers"
+	"code.gitea.io/gitea/tests"
 
 	"github.com/stretchr/testify/assert"
 )
 
 func TestNodeinfo(t *testing.T) {
-	setting.Federation.Enabled = true
-	testWebRoutes = routers.NormalRoutes()
-	defer func() {
-		setting.Federation.Enabled = false
-		testWebRoutes = routers.NormalRoutes()
-	}()
+	defer tests.PrepareTestEnv(t)()
+	defer test.MockVariableValue(&setting.Federation.Enabled, true)()
+	defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())()
 
-	onGiteaRun(t, func(*testing.T, *url.URL) {
-		req := NewRequest(t, "GET", "/api/v1/nodeinfo")
-		resp := MakeRequest(t, req, http.StatusOK)
-		VerifyJSONSchema(t, resp, "nodeinfo_2.1.json")
+	req := NewRequest(t, "GET", "/api/v1/nodeinfo")
+	resp := MakeRequest(t, req, http.StatusOK)
+	VerifyJSONSchema(t, resp, "nodeinfo_2.1.json")
 
-		var nodeinfo api.NodeInfo
-		DecodeJSON(t, resp, &nodeinfo)
-		assert.True(t, nodeinfo.OpenRegistrations)
-		assert.Equal(t, "gitea", nodeinfo.Software.Name)
-		assert.Equal(t, 29, nodeinfo.Usage.Users.Total)
-		assert.Equal(t, 22, nodeinfo.Usage.LocalPosts)
-		assert.Equal(t, 3, nodeinfo.Usage.LocalComments)
-	})
+	var nodeinfo api.NodeInfo
+	DecodeJSON(t, resp, &nodeinfo)
+	assert.True(t, nodeinfo.OpenRegistrations)
+	assert.Equal(t, "gitea", nodeinfo.Software.Name)
+	assert.Equal(t, 29, nodeinfo.Usage.Users.Total)
+	assert.Equal(t, 22, nodeinfo.Usage.LocalPosts)
+	assert.Equal(t, 3, nodeinfo.Usage.LocalComments)
 }
diff --git a/tests/integration/org_count_test.go b/tests/integration/org_count_test.go
index 8a33c218be..fb71e690c2 100644
--- a/tests/integration/org_count_test.go
+++ b/tests/integration/org_count_test.go
@@ -4,7 +4,6 @@
 package integration
 
 import (
-	"net/url"
 	"strings"
 	"testing"
 
@@ -14,15 +13,17 @@ import (
 	"code.gitea.io/gitea/models/unittest"
 	user_model "code.gitea.io/gitea/models/user"
 	api "code.gitea.io/gitea/modules/structs"
+	"code.gitea.io/gitea/tests"
 
 	"github.com/stretchr/testify/assert"
 )
 
 func TestOrgCounts(t *testing.T) {
-	onGiteaRun(t, testOrgCounts)
+	defer tests.PrepareTestEnv(t)()
+	testOrgCounts(t)
 }
 
-func testOrgCounts(t *testing.T, u *url.URL) {
+func testOrgCounts(t *testing.T) {
 	orgOwner := "user2"
 	orgName := "testOrg"
 	orgCollaborator := "user4"
diff --git a/tests/integration/pull_commit_test.go b/tests/integration/pull_commit_test.go
index fc111f528f..9f3b1a9ef5 100644
--- a/tests/integration/pull_commit_test.go
+++ b/tests/integration/pull_commit_test.go
@@ -8,12 +8,15 @@ import (
 	"testing"
 
 	pull_service "code.gitea.io/gitea/services/pull"
+	"code.gitea.io/gitea/tests"
 
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
 
 func TestListPullCommits(t *testing.T) {
+	defer tests.PrepareTestEnv(t)()
+
 	session := loginUser(t, "user5")
 	req := NewRequest(t, "GET", "/user2/repo1/pulls/3/commits/list")
 	resp := session.MakeRequest(t, req, http.StatusOK)
@@ -30,6 +33,7 @@ func TestListPullCommits(t *testing.T) {
 	assert.Equal(t, "4a357436d925b5c974181ff12a994538ddc5a269", pullCommitList.LastReviewCommitSha)
 
 	t.Run("CommitBlobExcerpt", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
 		req = NewRequest(t, "GET", "/user2/repo1/blob_excerpt/985f0301dba5e7b34be866819cd15ad3d8f508ee?last_left=0&last_right=0&left=2&right=2&left_hunk_size=2&right_hunk_size=2&path=README.md&style=split&direction=up")
 		resp = session.MakeRequest(t, req, http.StatusOK)
 		assert.Contains(t, resp.Body.String(), `<td class="lines-code lines-code-new"><code class="code-inner"># repo1</code>`)
diff --git a/tests/integration/user_avatar_test.go b/tests/integration/user_avatar_test.go
index caca9a3e56..7b157e6e61 100644
--- a/tests/integration/user_avatar_test.go
+++ b/tests/integration/user_avatar_test.go
@@ -10,78 +10,77 @@ import (
 	"io"
 	"mime/multipart"
 	"net/http"
-	"net/url"
 	"testing"
 
 	"code.gitea.io/gitea/models/db"
 	"code.gitea.io/gitea/models/unittest"
 	user_model "code.gitea.io/gitea/models/user"
 	"code.gitea.io/gitea/modules/avatar"
+	"code.gitea.io/gitea/tests"
 
 	"github.com/stretchr/testify/assert"
 )
 
 func TestUserAvatar(t *testing.T) {
-	onGiteaRun(t, func(t *testing.T, u *url.URL) {
-		user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) // owner of the repo3, is an org
+	defer tests.PrepareTestEnv(t)()
+	user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) // owner of the repo3, is an org
 
-		seed := user2.Email
-		if len(seed) == 0 {
-			seed = user2.Name
-		}
+	seed := user2.Email
+	if len(seed) == 0 {
+		seed = user2.Name
+	}
 
-		img, err := avatar.RandomImage([]byte(seed))
-		if err != nil {
-			assert.NoError(t, err)
-			return
-		}
+	img, err := avatar.RandomImage([]byte(seed))
+	if err != nil {
+		assert.NoError(t, err)
+		return
+	}
 
-		session := loginUser(t, "user2")
-		csrf := GetUserCSRFToken(t, session)
+	session := loginUser(t, "user2")
+	csrf := GetUserCSRFToken(t, session)
 
-		imgData := &bytes.Buffer{}
+	imgData := &bytes.Buffer{}
 
-		body := &bytes.Buffer{}
+	body := &bytes.Buffer{}
 
-		// Setup multi-part
-		writer := multipart.NewWriter(body)
-		writer.WriteField("source", "local")
-		part, err := writer.CreateFormFile("avatar", "avatar-for-testuseravatar.png")
-		if err != nil {
-			assert.NoError(t, err)
-			return
-		}
+	// Setup multi-part
+	writer := multipart.NewWriter(body)
+	writer.WriteField("source", "local")
+	part, err := writer.CreateFormFile("avatar", "avatar-for-testuseravatar.png")
+	if err != nil {
+		assert.NoError(t, err)
+		return
+	}
 
-		if err := png.Encode(imgData, img); err != nil {
-			assert.NoError(t, err)
-			return
-		}
+	if err := png.Encode(imgData, img); err != nil {
+		assert.NoError(t, err)
+		return
+	}
 
-		if _, err := io.Copy(part, imgData); err != nil {
-			assert.NoError(t, err)
-			return
-		}
+	if _, err := io.Copy(part, imgData); err != nil {
+		assert.NoError(t, err)
+		return
+	}
 
-		if err := writer.Close(); err != nil {
-			assert.NoError(t, err)
-			return
-		}
+	if err := writer.Close(); err != nil {
+		assert.NoError(t, err)
+		return
+	}
 
-		req := NewRequestWithBody(t, "POST", "/user/settings/avatar", body)
-		req.Header.Add("X-Csrf-Token", csrf)
-		req.Header.Add("Content-Type", writer.FormDataContentType())
+	req := NewRequestWithBody(t, "POST", "/user/settings/avatar", body)
+	req.Header.Add("X-Csrf-Token", csrf)
+	req.Header.Add("Content-Type", writer.FormDataContentType())
 
-		session.MakeRequest(t, req, http.StatusSeeOther)
+	session.MakeRequest(t, req, http.StatusSeeOther)
 
-		user2 = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) // owner of the repo3, is an org
+	user2 = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) // owner of the repo3, is an org
 
-		req = NewRequest(t, "GET", user2.AvatarLinkWithSize(db.DefaultContext, 0))
-		_ = session.MakeRequest(t, req, http.StatusOK)
+	req = NewRequest(t, "GET", user2.AvatarLinkWithSize(db.DefaultContext, 0))
+	_ = session.MakeRequest(t, req, http.StatusOK)
 
-		testGetAvatarRedirect(t, user2)
+	testGetAvatarRedirect(t, user2)
 
-		// Can't test if the response matches because the image is re-generated on upload but checking that this at least doesn't give a 404 should be enough.
-	})
+	// Can't test if the response matches because the image is re-generated on upload but checking that this at least doesn't give a 404 should be enough.
 }
 
 func testGetAvatarRedirect(t *testing.T, user *user_model.User) {