diff --git a/openstack/db/v1/databases/fixtures.go b/openstack/db/v1/databases/fixtures.go
index d03466f..4d653ca 100644
--- a/openstack/db/v1/databases/fixtures.go
+++ b/openstack/db/v1/databases/fixtures.go
@@ -1,47 +1,21 @@
 package databases
 
-import (
-	"fmt"
-	"net/http"
-	"testing"
-
-	th "github.com/rackspace/gophercloud/testhelper"
-	fake "github.com/rackspace/gophercloud/testhelper/client"
-)
-
-func HandleCreateDBSuccessfully(t *testing.T, instanceID string) {
-	th.Mux.HandleFunc("/instances/"+instanceID+"/databases", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "POST")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		th.TestJSONRequest(t, r, `
+var createDBsReq = `
 {
-  "databases": [
-    {
-      "character_set": "utf8",
-      "collate": "utf8_general_ci",
-      "name": "testingdb"
-    },
-    {
-      "name": "sampledb"
-    }
-  ]
+	"databases": [
+		{
+			"character_set": "utf8",
+			"collate": "utf8_general_ci",
+			"name": "testingdb"
+		},
+		{
+			"name": "sampledb"
+		}
+	]
 }
-`)
+`
 
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusAccepted)
-	})
-}
-
-func HandleListDBsSuccessfully(t *testing.T, instanceID string) {
-	th.Mux.HandleFunc("/instances/"+instanceID+"/databases", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
-
-		fmt.Fprintf(w, `
+var listDBsResp = `
 {
 	"databases": [
 		{
@@ -61,16 +35,4 @@
 		}
 	]
 }
-`)
-	})
-}
-
-func HandleDeleteDBSuccessfully(t *testing.T, instanceID, dbName string) {
-	th.Mux.HandleFunc("/instances/"+instanceID+"/databases/"+dbName, func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "DELETE")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusAccepted)
-	})
-}
+`
diff --git a/openstack/db/v1/databases/requests_test.go b/openstack/db/v1/databases/requests_test.go
index 6f5edb6..11bf9c8 100644
--- a/openstack/db/v1/databases/requests_test.go
+++ b/openstack/db/v1/databases/requests_test.go
@@ -6,15 +6,20 @@
 	"github.com/rackspace/gophercloud/pagination"
 	th "github.com/rackspace/gophercloud/testhelper"
 	fake "github.com/rackspace/gophercloud/testhelper/client"
+	"github.com/rackspace/gophercloud/testhelper/fixture"
 )
 
 const instanceID = "{instanceID}"
 
+var (
+	resURL = "/instances/" + instanceID + "/databases"
+)
+
 func TestCreate(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
-	HandleCreateDBSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, resURL, "POST", createDBsReq, "", 202)
 
 	opts := BatchCreateOpts{
 		CreateOpts{Name: "testingdb", CharSet: "utf8", Collate: "utf8_general_ci"},
@@ -29,7 +34,7 @@
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
-	HandleListDBsSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, resURL, "GET", "", listDBsResp, 200)
 
 	expectedDBs := []Database{
 		Database{Name: "anotherexampledb"},
@@ -64,7 +69,7 @@
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
-	HandleDeleteDBSuccessfully(t, instanceID, "{dbName}")
+	fixture.SetupHandler(t, resURL+"/{dbName}", "DELETE", "", "", 202)
 
 	err := Delete(fake.ServiceClient(), instanceID, "{dbName}").ExtractErr()
 	th.AssertNoErr(t, err)
diff --git a/openstack/db/v1/flavors/fixtures.go b/openstack/db/v1/flavors/fixtures.go
index 653b5c8..42e2dca 100644
--- a/openstack/db/v1/flavors/fixtures.go
+++ b/openstack/db/v1/flavors/fixtures.go
@@ -1,113 +1,31 @@
 package flavors
 
-import (
-	"fmt"
-	"net/http"
-	"testing"
+import "fmt"
 
-	th "github.com/rackspace/gophercloud/testhelper"
-	fake "github.com/rackspace/gophercloud/testhelper/client"
+const flavor = `
+{
+	"id": %d,
+	"links": [
+		{
+			"href": "https://openstack.example.com/v1.0/1234/flavors/%d",
+			"rel": "self"
+		},
+		{
+			"href": "https://openstack.example.com/flavors/%d",
+			"rel": "bookmark"
+		}
+	],
+	"name": "%s",
+	"ram": %d
+}
+`
+
+var (
+	flavor1 = fmt.Sprintf(flavor, 1, 1, 1, "m1.tiny", 512)
+	flavor2 = fmt.Sprintf(flavor, 2, 2, 2, "m1.small", 1024)
+	flavor3 = fmt.Sprintf(flavor, 3, 3, 3, "m1.medium", 2048)
+	flavor4 = fmt.Sprintf(flavor, 4, 4, 4, "m1.large", 4096)
+
+	listFlavorsResp = fmt.Sprintf(`{"flavors":[%s, %s, %s, %s]}`, flavor1, flavor2, flavor3, flavor4)
+	getFlavorResp   = fmt.Sprintf(`{"flavor": %s}`, flavor1)
 )
-
-func HandleListFlavorsSuccessfully(t *testing.T) {
-	th.Mux.HandleFunc("/flavors", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
-
-		fmt.Fprintf(w, `
-{
-  "flavors": [
-    {
-      "id": 1,
-      "links": [
-        {
-          "href": "https://openstack.example.com/v1.0/1234/flavors/1",
-          "rel": "self"
-        },
-        {
-          "href": "https://openstack.example.com/flavors/1",
-          "rel": "bookmark"
-        }
-      ],
-      "name": "m1.tiny",
-      "ram": 512
-    },
-    {
-      "id": 2,
-      "links": [
-        {
-          "href": "https://openstack.example.com/v1.0/1234/flavors/2",
-          "rel": "self"
-        },
-        {
-          "href": "https://openstack.example.com/flavors/2",
-          "rel": "bookmark"
-        }
-      ],
-      "name": "m1.small",
-      "ram": 1024
-    },
-    {
-      "id": 3,
-      "links": [
-        {
-          "href": "https://openstack.example.com/v1.0/1234/flavors/3",
-          "rel": "self"
-        },
-        {
-          "href": "https://openstack.example.com/flavors/3",
-          "rel": "bookmark"
-        }
-      ],
-      "name": "m1.medium",
-      "ram": 2048
-    },
-    {
-      "id": 4,
-      "links": [
-        {
-          "href": "https://openstack.example.com/v1.0/1234/flavors/4",
-          "rel": "self"
-        },
-        {
-          "href": "https://openstack.example.com/flavors/4",
-          "rel": "bookmark"
-        }
-      ],
-      "name": "m1.large",
-      "ram": 4096
-    }
-  ]
-}
-`)
-	})
-}
-
-func HandleGetFlavorSuccessfully(t *testing.T, flavorID string) {
-	th.Mux.HandleFunc("/flavors/"+flavorID, func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
-
-		fmt.Fprintf(w, `
-{
-  "flavor": {
-    "id": 1,
-    "links": [
-      {
-        "href": "https://openstack.example.com/v1.0/1234/flavors/1",
-        "rel": "self"
-      }
-    ],
-    "name": "m1.tiny",
-    "ram": 512
-  }
-}
-`)
-	})
-}
diff --git a/openstack/db/v1/flavors/requests_test.go b/openstack/db/v1/flavors/requests_test.go
index 9ed9e59..62e5fec 100644
--- a/openstack/db/v1/flavors/requests_test.go
+++ b/openstack/db/v1/flavors/requests_test.go
@@ -7,13 +7,20 @@
 	"github.com/rackspace/gophercloud/pagination"
 	th "github.com/rackspace/gophercloud/testhelper"
 	fake "github.com/rackspace/gophercloud/testhelper/client"
+	"github.com/rackspace/gophercloud/testhelper/fixture"
+)
+
+var (
+	flavorID = "{flavorID}"
+	_baseURL = "/flavors"
+	resURL   = "/flavors/" + flavorID
 )
 
 func TestListFlavors(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
-	HandleListFlavorsSuccessfully(t)
+	fixture.SetupHandler(t, _baseURL, "GET", "", listFlavorsResp, 200)
 
 	pages := 0
 	err := List(fake.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
@@ -78,9 +85,9 @@
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
-	HandleGetFlavorSuccessfully(t, "12345")
+	fixture.SetupHandler(t, resURL, "GET", "", getFlavorResp, 200)
 
-	actual, err := Get(fake.ServiceClient(), "12345").Extract()
+	actual, err := Get(fake.ServiceClient(), flavorID).Extract()
 	th.AssertNoErr(t, err)
 
 	expected := &Flavor{
diff --git a/openstack/db/v1/instances/fixtures.go b/openstack/db/v1/instances/fixtures.go
index 0dda158..dedbfbb 100644
--- a/openstack/db/v1/instances/fixtures.go
+++ b/openstack/db/v1/instances/fixtures.go
@@ -2,45 +2,73 @@
 
 import (
 	"fmt"
-	"net/http"
-	"testing"
 
-	th "github.com/rackspace/gophercloud/testhelper"
-	fake "github.com/rackspace/gophercloud/testhelper/client"
+	"github.com/rackspace/gophercloud"
 )
 
-const singleInstanceJson = `
+const instance = `
+{
+  "created": "2014-02-13T21:47:13",
+  "datastore": {
+    "type": "mysql",
+    "version": "5.6"
+  },
+  "flavor": {
+    "id": "1",
+    "links": [
+      {
+        "href": "https://my-openstack.com/v1.0/1234/flavors/1",
+        "rel": "self"
+      },
+      {
+        "href": "https://my-openstack.com/v1.0/1234/flavors/1",
+        "rel": "bookmark"
+      }
+    ]
+  },
+  "links": [
+    {
+      "href": "https://my-openstack.com/v1.0/1234/instances/1",
+      "rel": "self"
+    }
+  ],
+  "hostname": "e09ad9a3f73309469cf1f43d11e79549caf9acf2.my-openstack.com",
+  "id": "{instanceID}",
+  "name": "json_rack_instance",
+  "status": "BUILD",
+  "updated": "2014-02-13T21:47:13",
+  "volume": {
+    "size": 2
+  }
+}
+`
+
+var createReq = `
 {
 	"instance": {
-		"created": "2014-02-13T21:47:13",
-		"datastore": {
-			"type": "mysql",
-			"version": "5.6"
-		},
-		"flavor": {
-			"id": "1",
-			"links": [
-				{
-					"href": "https://my-openstack.com/v1.0/1234/flavors/1",
-					"rel": "self"
-				},
-				{
-					"href": "https://my-openstack.com/v1.0/1234/flavors/1",
-					"rel": "bookmark"
-				}
-			]
-		},
-		"links": [
+		"databases": [
 			{
-				"href": "https://my-openstack.com/v1.0/1234/instances/1",
-				"rel": "self"
+				"character_set": "utf8",
+				"collate": "utf8_general_ci",
+				"name": "sampledb"
+			},
+			{
+				"name": "nextround"
 			}
 		],
-		"hostname": "e09ad9a3f73309469cf1f43d11e79549caf9acf2.my-openstack.com",
-		"id": "d4603f69-ec7e-4e9b-803f-600b9205576f",
+		"flavorRef": "1",
 		"name": "json_rack_instance",
-		"status": "BUILD",
-		"updated": "2014-02-13T21:47:13",
+		"users": [
+			{
+				"databases": [
+					{
+						"name": "sampledb"
+					}
+				],
+				"name": "demouser",
+				"password": "demopassword"
+			}
+		],
 		"volume": {
 			"size": 2
 		}
@@ -48,154 +76,36 @@
 }
 `
 
-func HandleCreateInstanceSuccessfully(t *testing.T) {
-	th.Mux.HandleFunc("/instances", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "POST")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+var (
+	restartReq   = `{"restart": true}`
+	resizeReq    = `{"resize": {"flavorRef": "2"}}`
+	resizeVolReq = `{"resize": {"volume": {"size": 4}}}`
+)
 
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
+var (
+	createResp        = fmt.Sprintf(`{"instance": %s}`, instance)
+	listInstancesResp = fmt.Sprintf(`{"instances":[%s]}`, instance)
+	getInstanceResp   = createResp
+	enableUserResp    = `{"user":{"name":"root","password":"secretsecret"}}`
+	isUserEnabledResp = `{"rootEnabled":true}`
+)
 
-		th.TestJSONRequest(t, r, `
-{
-  "instance": {
-    "databases": [
-      {
-        "character_set": "utf8",
-        "collate": "utf8_general_ci",
-        "name": "sampledb"
-      },
-      {
-        "name": "nextround"
-      }
-    ],
-    "flavorRef": "1",
-    "name": "json_rack_instance",
-    "users": [
-      {
-        "databases": [
-          {
-            "name": "sampledb"
-          }
-        ],
-        "name": "demouser",
-        "password": "demopassword"
-      }
-    ],
-    "volume": {
-      "size": 2
-    }
-  }
-}
-`)
-
-		fmt.Fprintf(w, singleInstanceJson)
-	})
-}
-
-func HandleListInstanceSuccessfully(t *testing.T) {
-	th.Mux.HandleFunc("/instances", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-
-		w.Header().Add("Content-Type", "application/json")
-
-		fmt.Fprintf(w, `
-{
-  "instances": [
-    {
-      "name": "xml_rack_instance",
-      "status": "ACTIVE",
-      "volume": {
-        "size": 2
-      },
-      "flavor": {
-        "id": "1",
-        "links": [
-          {
-            "href": "https://openstack.example.com/v1.0/1234/flavors/1",
-            "rel": "self"
-          },
-          {
-            "href": "https://openstack.example.com/flavors/1",
-            "rel": "bookmark"
-          }
-        ]
-      },
-      "id": "8fb081af-f237-44f5-80cc-b46be1840ca9",
-      "links": [
-        {
-          "href": "https://openstack.example.com/v1.0/1234/instances/8fb081af-f237-44f5-80cc-b46be1840ca9",
-          "rel": "self"
-        }
-      ]
-    }
-  ]
-}
-`)
-	})
-}
-
-func HandleGetInstanceSuccessfully(t *testing.T, id string) {
-	th.Mux.HandleFunc("/instances/"+id, func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-
-		w.Header().Add("Content-Type", "application/json")
-
-		fmt.Fprintf(w, singleInstanceJson)
-	})
-}
-
-func HandleDeleteInstanceSuccessfully(t *testing.T, id string) {
-	th.Mux.HandleFunc("/instances/"+id, func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "DELETE")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		w.WriteHeader(http.StatusAccepted)
-	})
-}
-
-func HandleEnableRootUserSuccessfully(t *testing.T, id string) {
-	th.Mux.HandleFunc("/instances/"+id+"/root", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "POST")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		w.WriteHeader(http.StatusOK)
-		fmt.Fprintf(w, `{"user":{"name":"root","password":"secretsecret"}}`)
-	})
-}
-
-func HandleIsRootEnabledSuccessfully(t *testing.T, id string) {
-	th.Mux.HandleFunc("/instances/"+id+"/root", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		w.WriteHeader(http.StatusOK)
-		fmt.Fprintf(w, `{"rootEnabled":true}`)
-	})
-}
-
-func HandleRestartSuccessfully(t *testing.T, id string) {
-	th.Mux.HandleFunc("/instances/"+id+"/action", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "POST")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		th.TestJSONRequest(t, r, `{"restart": true}`)
-		w.WriteHeader(http.StatusAccepted)
-	})
-}
-
-func HandleResizeInstanceSuccessfully(t *testing.T, id string) {
-	th.Mux.HandleFunc("/instances/"+id+"/action", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "POST")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		th.TestJSONRequest(t, r, `{"resize": {"flavorRef": "2"}}`)
-		w.WriteHeader(http.StatusAccepted)
-	})
-}
-
-func HandleResizeVolSuccessfully(t *testing.T, id string) {
-	th.Mux.HandleFunc("/instances/"+id+"/action", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "POST")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		th.TestJSONRequest(t, r, `{"resize": {"volume": {"size": 4}}}`)
-		w.WriteHeader(http.StatusAccepted)
-	})
+var expectedInstance = Instance{
+	Created: "2014-02-13T21:47:13",
+	Updated: "2014-02-13T21:47:13",
+	Flavor: Flavor{
+		ID: "1",
+		Links: []gophercloud.Link{
+			gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/flavors/1", Rel: "self"},
+			gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/flavors/1", Rel: "bookmark"},
+		},
+	},
+	Hostname: "e09ad9a3f73309469cf1f43d11e79549caf9acf2.my-openstack.com",
+	ID:       instanceID,
+	Links: []gophercloud.Link{
+		gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/instances/1", Rel: "self"},
+	},
+	Name:   "json_rack_instance",
+	Status: "BUILD",
+	Volume: Volume{Size: 2},
 }
diff --git a/openstack/db/v1/instances/requests_test.go b/openstack/db/v1/instances/requests_test.go
index bdda1f6..d44220d 100644
--- a/openstack/db/v1/instances/requests_test.go
+++ b/openstack/db/v1/instances/requests_test.go
@@ -3,41 +3,26 @@
 import (
 	"testing"
 
-	"github.com/rackspace/gophercloud"
 	db "github.com/rackspace/gophercloud/openstack/db/v1/databases"
 	"github.com/rackspace/gophercloud/openstack/db/v1/users"
 	"github.com/rackspace/gophercloud/pagination"
 	th "github.com/rackspace/gophercloud/testhelper"
 	fake "github.com/rackspace/gophercloud/testhelper/client"
+	"github.com/rackspace/gophercloud/testhelper/fixture"
 )
 
-var instanceID = "d4603f69-ec7e-4e9b-803f-600b9205576f"
-
-var expectedInstance = &Instance{
-	Created: "2014-02-13T21:47:13",
-	Updated: "2014-02-13T21:47:13",
-	Flavor: Flavor{
-		ID: "1",
-		Links: []gophercloud.Link{
-			gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/flavors/1", Rel: "self"},
-			gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/flavors/1", Rel: "bookmark"},
-		},
-	},
-	Hostname: "e09ad9a3f73309469cf1f43d11e79549caf9acf2.my-openstack.com",
-	ID:       instanceID,
-	Links: []gophercloud.Link{
-		gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/instances/1", Rel: "self"},
-	},
-	Name:   "json_rack_instance",
-	Status: "BUILD",
-	Volume: Volume{Size: 2},
-}
+var (
+	instanceID = "{instanceID}"
+	rootURL    = "/instances"
+	resURL     = rootURL + "/" + instanceID
+	uRootURL   = resURL + "/root"
+	aURL       = resURL + "/action"
+)
 
 func TestCreate(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleCreateInstanceSuccessfully(t)
+	fixture.SetupHandler(t, rootURL, "POST", createReq, createResp, 200)
 
 	opts := CreateOpts{
 		Name:      "json_rack_instance",
@@ -61,31 +46,13 @@
 	instance, err := Create(fake.ServiceClient(), opts).Extract()
 
 	th.AssertNoErr(t, err)
-	th.AssertDeepEquals(t, expectedInstance, instance)
+	th.AssertDeepEquals(t, &expectedInstance, instance)
 }
 
 func TestInstanceList(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleListInstanceSuccessfully(t)
-
-	expectedInstance := Instance{
-		Flavor: Flavor{
-			ID: "1",
-			Links: []gophercloud.Link{
-				gophercloud.Link{Href: "https://openstack.example.com/v1.0/1234/flavors/1", Rel: "self"},
-				gophercloud.Link{Href: "https://openstack.example.com/flavors/1", Rel: "bookmark"},
-			},
-		},
-		ID: "8fb081af-f237-44f5-80cc-b46be1840ca9",
-		Links: []gophercloud.Link{
-			gophercloud.Link{Href: "https://openstack.example.com/v1.0/1234/instances/8fb081af-f237-44f5-80cc-b46be1840ca9", Rel: "self"},
-		},
-		Name:   "xml_rack_instance",
-		Status: "ACTIVE",
-		Volume: Volume{Size: 2},
-	}
+	fixture.SetupHandler(t, rootURL, "GET", "", listInstancesResp, 200)
 
 	pages := 0
 	err := List(fake.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
@@ -96,38 +63,30 @@
 			return false, err
 		}
 
-		if len(actual) != 1 {
-			t.Fatalf("Expected 1 DB instance, got %d", len(actual))
-		}
-		th.CheckDeepEquals(t, expectedInstance, actual[0])
+		th.CheckDeepEquals(t, []Instance{expectedInstance}, actual)
 
 		return true, nil
 	})
 
 	th.AssertNoErr(t, err)
-
-	if pages != 1 {
-		t.Errorf("Expected 1 page, saw %d", pages)
-	}
+	th.AssertEquals(t, 1, pages)
 }
 
 func TestGetInstance(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleGetInstanceSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, resURL, "GET", "", getInstanceResp, 200)
 
 	instance, err := Get(fake.ServiceClient(), instanceID).Extract()
 
 	th.AssertNoErr(t, err)
-	th.AssertDeepEquals(t, instance, expectedInstance)
+	th.AssertDeepEquals(t, &expectedInstance, instance)
 }
 
 func TestDeleteInstance(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleDeleteInstanceSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, resURL, "DELETE", "", "", 202)
 
 	res := Delete(fake.ServiceClient(), instanceID)
 	th.AssertNoErr(t, res.Err)
@@ -136,12 +95,11 @@
 func TestEnableRootUser(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleEnableRootUserSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, uRootURL, "POST", "", enableUserResp, 200)
 
 	expected := &users.User{Name: "root", Password: "secretsecret"}
-
 	user, err := EnableRootUser(fake.ServiceClient(), instanceID).Extract()
+
 	th.AssertNoErr(t, err)
 	th.AssertDeepEquals(t, expected, user)
 }
@@ -149,8 +107,7 @@
 func TestIsRootEnabled(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleIsRootEnabledSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, uRootURL, "GET", "", isUserEnabledResp, 200)
 
 	isEnabled, err := IsRootEnabled(fake.ServiceClient(), instanceID)
 
@@ -161,32 +118,26 @@
 func TestRestartService(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleRestartSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, aURL, "POST", restartReq, "", 202)
 
 	res := RestartService(fake.ServiceClient(), instanceID)
-
 	th.AssertNoErr(t, res.Err)
 }
 
 func TestResizeInstance(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleResizeInstanceSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, aURL, "POST", resizeReq, "", 202)
 
 	res := ResizeInstance(fake.ServiceClient(), instanceID, "2")
-
 	th.AssertNoErr(t, res.Err)
 }
 
 func TestResizeVolume(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleResizeVolSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, aURL, "POST", resizeVolReq, "", 202)
 
 	res := ResizeVolume(fake.ServiceClient(), instanceID, 4)
-
 	th.AssertNoErr(t, res.Err)
 }
diff --git a/openstack/db/v1/users/fixtures.go b/openstack/db/v1/users/fixtures.go
index 6bada41..25b75f1 100644
--- a/openstack/db/v1/users/fixtures.go
+++ b/openstack/db/v1/users/fixtures.go
@@ -1,91 +1,21 @@
 package users
 
-import (
-	"fmt"
-	"net/http"
-	"testing"
+import "fmt"
 
-	th "github.com/rackspace/gophercloud/testhelper"
-	fake "github.com/rackspace/gophercloud/testhelper/client"
+const user1 = `
+{"databases": [{"name": "databaseA"}],"name": "dbuser3"%s}
+`
+
+const user2 = `
+{"databases": [{"name": "databaseB"},{"name": "databaseC"}],"name": "dbuser4"%s}
+`
+
+var (
+	pUser1 = fmt.Sprintf(user1, `,"password":"secretsecret"`)
+	pUser2 = fmt.Sprintf(user2, `,"password":"secretsecret"`)
 )
 
-func HandleCreateUserSuccessfully(t *testing.T, instanceID string) {
-	th.Mux.HandleFunc("/instances/"+instanceID+"/users", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "POST")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		th.TestJSONRequest(t, r, `
-{
-  "users": [
-    {
-      "databases": [
-        {
-          "name": "databaseA"
-        }
-      ],
-      "name": "dbuser3",
-      "password": "secretsecret"
-    },
-    {
-      "databases": [
-        {
-          "name": "databaseB"
-        },
-        {
-          "name": "databaseC"
-        }
-      ],
-      "name": "dbuser4",
-      "password": "secretsecret"
-    }
-  ]
-}
-`)
-
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusAccepted)
-	})
-}
-
-func HandleListUsersSuccessfully(t *testing.T, instanceID string) {
-	th.Mux.HandleFunc("/instances/"+instanceID+"/users", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-
-		w.Header().Set("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
-
-		fmt.Fprintf(w, `
-{
-	"users": [
-		{
-			"databases": [
-				{
-					"name": "databaseA"
-				}
-			],
-			"name": "dbuser3"
-		},
-		{
-			"databases": [
-				{
-					"name": "databaseB"
-				},
-				{
-					"name": "databaseC"
-				}
-			],
-			"name": "dbuser4"
-		}
-	]
-}
-`)
-	})
-}
-
-func HandleDeleteUserSuccessfully(t *testing.T, instanceID, dbName string) {
-	th.Mux.HandleFunc("/instances/"+instanceID+"/users/"+dbName, func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "DELETE")
-		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		w.WriteHeader(http.StatusAccepted)
-	})
-}
+var (
+	createReq = fmt.Sprintf(`{"users":[%s, %s]}`, pUser1, pUser2)
+	listResp  = fmt.Sprintf(`{"users":[%s, %s]}`, fmt.Sprintf(user1, ""), fmt.Sprintf(user2, ""))
+)
diff --git a/openstack/db/v1/users/requests_test.go b/openstack/db/v1/users/requests_test.go
index 00c4e58..47eccea 100644
--- a/openstack/db/v1/users/requests_test.go
+++ b/openstack/db/v1/users/requests_test.go
@@ -7,15 +7,18 @@
 	"github.com/rackspace/gophercloud/pagination"
 	th "github.com/rackspace/gophercloud/testhelper"
 	fake "github.com/rackspace/gophercloud/testhelper/client"
+	"github.com/rackspace/gophercloud/testhelper/fixture"
 )
 
-const instanceID = "{instanceID}"
+var (
+	instanceID = "{instanceID}"
+	_rootURL   = "/instances/" + instanceID + "/users"
+)
 
 func TestCreate(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleCreateUserSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, _rootURL, "POST", createReq, "", 202)
 
 	opts := BatchCreateOpts{
 		CreateOpts{
@@ -42,8 +45,7 @@
 func TestUserList(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleListUsersSuccessfully(t, instanceID)
+	fixture.SetupHandler(t, _rootURL, "GET", "", listResp, 200)
 
 	expectedUsers := []User{
 		User{
@@ -71,22 +73,17 @@
 		}
 
 		th.CheckDeepEquals(t, expectedUsers, actual)
-
 		return true, nil
 	})
 
 	th.AssertNoErr(t, err)
-
-	if pages != 1 {
-		t.Errorf("Expected 1 page, saw %d", pages)
-	}
+	th.AssertEquals(t, 1, pages)
 }
 
 func TestDeleteInstance(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-
-	HandleDeleteUserSuccessfully(t, instanceID, "{dbName}")
+	fixture.SetupHandler(t, _rootURL+"/{dbName}", "DELETE", "", "", 202)
 
 	res := Delete(fake.ServiceClient(), instanceID, "{dbName}")
 	th.AssertNoErr(t, res.Err)
