diff --git a/neutron/tests/tempest/api/test_revisions.py b/neutron/tests/tempest/api/test_revisions.py
index 4284649..b45990f 100644
--- a/neutron/tests/tempest/api/test_revisions.py
+++ b/neutron/tests/tempest/api/test_revisions.py
@@ -27,54 +27,59 @@
     @test.idempotent_id('4a26a4be-9c53-483c-bc50-b53f1db10ac6')
     def test_update_network_bumps_revision(self):
         net = self.create_network()
-        self.assertIn('revision', net)
+        self.assertIn('revision_number', net)
         updated = self.client.update_network(net['id'], name='newnet')
-        self.assertGreater(updated['network']['revision'], net['revision'])
+        self.assertGreater(updated['network']['revision_number'],
+                           net['revision_number'])
 
     @test.idempotent_id('cac7ecde-12d5-4331-9a03-420899dea077')
     def test_update_port_bumps_revision(self):
         net = self.create_network()
         port = self.create_port(net)
-        self.assertIn('revision', port)
+        self.assertIn('revision_number', port)
         updated = self.client.update_port(port['id'], name='newport')
-        self.assertGreater(updated['port']['revision'], port['revision'])
+        self.assertGreater(updated['port']['revision_number'],
+                           port['revision_number'])
 
     @test.idempotent_id('c1c4fa41-8e89-44d0-9bfc-409f3b66dc57')
     def test_update_subnet_bumps_revision(self):
         net = self.create_network()
         subnet = self.create_subnet(net)
-        self.assertIn('revision', subnet)
+        self.assertIn('revision_number', subnet)
         updated = self.client.update_subnet(subnet['id'], name='newsub')
-        self.assertGreater(updated['subnet']['revision'], subnet['revision'])
+        self.assertGreater(updated['subnet']['revision_number'],
+                           subnet['revision_number'])
 
     @test.idempotent_id('e8c5d7db-2b8d-4615-a476-6e537437c4f2')
     def test_update_subnetpool_bumps_revision(self):
         sp = self.create_subnetpool('subnetpool', default_prefixlen=24,
                                     prefixes=['10.0.0.0/8'])
-        self.assertIn('revision', sp)
+        self.assertIn('revision_number', sp)
         updated = self.admin_client.update_subnetpool(sp['id'], name='sp2')
-        self.assertGreater(updated['subnetpool']['revision'], sp['revision'])
+        self.assertGreater(updated['subnetpool']['revision_number'],
+                           sp['revision_number'])
 
     @test.idempotent_id('e8c5d7db-2b8d-4567-a326-6e123437c4d1')
     def test_update_subnet_bumps_network_revision(self):
         net = self.create_network()
         subnet = self.create_subnet(net)
         updated = self.client.show_network(net['id'])
-        self.assertGreater(updated['network']['revision'], net['revision'])
+        self.assertGreater(updated['network']['revision_number'],
+                           net['revision_number'])
         self.client.delete_subnet(subnet['id'])
         updated2 = self.client.show_network(net['id'])
-        self.assertGreater(updated2['network']['revision'],
-                           updated['network']['revision'])
+        self.assertGreater(updated2['network']['revision_number'],
+                           updated['network']['revision_number'])
 
     @test.idempotent_id('6c256f71-c929-4200-b3dc-4e1843506be5')
     @test.requires_ext(extension="security-group", service="network")
     def test_update_sg_group_bumps_revision(self):
         sg, name = self._create_security_group()
-        self.assertIn('revision', sg['security_group'])
+        self.assertIn('revision_number', sg['security_group'])
         update_body = self.client.update_security_group(
             sg['security_group']['id'], name='new_sg_name')
-        self.assertGreater(update_body['security_group']['revision'],
-                           sg['security_group']['revision'])
+        self.assertGreater(update_body['security_group']['revision_number'],
+                           sg['security_group']['revision_number'])
 
     @test.idempotent_id('6489632f-8550-4453-a674-c98849742967')
     @test.requires_ext(extension="security-group", service="network")
@@ -91,9 +96,10 @@
         # commit happens if the port is unbound. The update response should
         # be usable directly once that is fixed.
         updated2 = self.client.show_port(port['id'])
-        self.assertGreater(updated['port']['revision'], port['revision'])
-        self.assertGreater(updated2['port']['revision'],
-                           updated['port']['revision'])
+        self.assertGreater(updated['port']['revision_number'],
+                           port['revision_number'])
+        self.assertGreater(updated2['port']['revision_number'],
+                           updated['port']['revision_number'])
 
     @test.idempotent_id('29c7ab2b-d1d8-425d-8cec-fcf632960f22')
     @test.requires_ext(extension="security-group", service="network")
@@ -104,27 +110,28 @@
             protocol='tcp', direction='ingress', ethertype=self.ethertype,
             port_range_min=60, port_range_max=70)
         updated = self.client.show_security_group(sg['security_group']['id'])
-        self.assertGreater(updated['security_group']['revision'],
-                           sg['security_group']['revision'])
+        self.assertGreater(updated['security_group']['revision_number'],
+                           sg['security_group']['revision_number'])
         self.client.delete_security_group_rule(
             rule['security_group_rule']['id'])
         updated2 = self.client.show_security_group(sg['security_group']['id'])
-        self.assertGreater(updated2['security_group']['revision'],
-                           updated['security_group']['revision'])
+        self.assertGreater(updated2['security_group']['revision_number'],
+                           updated['security_group']['revision_number'])
 
     @test.idempotent_id('4a37bde9-1975-47e0-9b8c-2c9ca36415b0')
     @test.requires_ext(extension="router", service="network")
     def test_update_router_bumps_revision(self):
         subnet = self.create_subnet(self.create_network())
         router = self.create_router(router_name='test')
-        self.assertIn('revision', router)
-        rev1 = router['revision']
+        self.assertIn('revision_number', router)
+        rev1 = router['revision_number']
         router = self.client.update_router(router['id'],
                                            name='test2')['router']
-        self.assertGreater(router['revision'], rev1)
+        self.assertGreater(router['revision_number'], rev1)
         self.create_router_interface(router['id'], subnet['id'])
         updated = self.client.show_router(router['id'])['router']
-        self.assertGreater(updated['revision'], router['revision'])
+        self.assertGreater(updated['revision_number'],
+                           router['revision_number'])
 
     @test.idempotent_id('9de71ebc-f5df-4cd0-80bc-60299fce3ce9')
     @test.requires_ext(extension="router", service="network")
@@ -142,6 +149,7 @@
             port_id=port['id'],
             description='d1'
         )['floatingip']
-        self.assertIn('revision', body)
+        self.assertIn('revision_number', body)
         b2 = self.client.update_floatingip(body['id'], description='d2')
-        self.assertGreater(b2['floatingip']['revision'], body['revision'])
+        self.assertGreater(b2['floatingip']['revision_number'],
+                           body['revision_number'])
