diff --git a/ceilometer/tests/integration/gabbi/gabbits-live/autoscaling.yaml b/ceilometer/tests/integration/gabbi/gabbits-live/autoscaling.yaml
index 437d35d..52c3cde 100644
--- a/ceilometer/tests/integration/gabbi/gabbits-live/autoscaling.yaml
+++ b/ceilometer/tests/integration/gabbi/gabbits-live/autoscaling.yaml
@@ -156,7 +156,7 @@
       redirects: true
       method: GET
       poll:
-          count: 240
+          count: 300
           delay: 1
       status: 404
 
diff --git a/ceilometer/tests/integration/hooks/post_test_hook.sh b/ceilometer/tests/integration/hooks/post_test_hook.sh
index e19cafa..3663419 100755
--- a/ceilometer/tests/integration/hooks/post_test_hook.sh
+++ b/ceilometer/tests/integration/hooks/post_test_hook.sh
@@ -30,58 +30,12 @@
     sudo chmod a+r $BASE/logs/testrepository.subunit.gz $BASE/logs/testr_results.html.gz
 }
 
-# If we're running in the gate find our keystone endpoint to give to
-# gabbi tests and do a chown. Otherwise the existing environment
-# should provide URL and TOKEN.
-if [ -d $BASE/new/devstack ]; then
-    export CEILOMETER_DIR="$BASE/new/ceilometer"
-    STACK_USER=stack
-    sudo chown -R $STACK_USER:stack $CEILOMETER_DIR
-    source $BASE/new/devstack/openrc admin admin
-    # Go to the ceilometer dir
-    cd $CEILOMETER_DIR
-fi
-
-openstack catalog list
-export AODH_SERVICE_URL=$(openstack catalog show alarming -c endpoints -f value | awk '/public/{print $2}')
-export GNOCCHI_SERVICE_URL=$(openstack catalog show metric -c endpoints -f value | awk '/public/{print $2}')
-export HEAT_SERVICE_URL=$(openstack catalog show orchestration -c endpoints -f value | awk '/public/{print $2}')
-export NOVA_SERVICE_URL=$(openstack catalog show compute -c endpoints -f value | awk '/public/{print $2}')
-export GLANCE_IMAGE_NAME=$(openstack image list | awk '/ cirros.*uec /{print $4}')
-export ADMIN_TOKEN=$(openstack token issue -c id -f value)
-
-if [ -d $BASE/new/devstack ]; then
-    # NOTE(sileht): on swift job permissions are wrong, I don't known why
-    sudo chown -R tempest:stack $BASE/new/tempest
-    sudo chown -R tempest:stack $BASE/data/tempest
-
-    # Run tests with tempest
-    cd $BASE/new/tempest
-    set +e
-    sudo -H -u tempest OS_TEST_TIMEOUT=$TEMPEST_OS_TEST_TIMEOUT tox -eall-plugin -- ceilometer.tests.tempest.scenario.test_autoscaling --concurrency=$TEMPEST_CONCURRENCY
-    TEMPEST_EXIT_CODE=$?
-    set -e
-    export_subunit_data "all-plugin"
-    if [[ $TEMPEST_EXIT_CODE != 0 ]]; then
-        # Collect and parse result
-        generate_testr_results
-        exit $TEMPEST_EXIT_CODE
-    fi
-
-    cd $CEILOMETER_DIR
-fi
-
-# Run tests with gabbi
-echo "Running telemetry integration test suite"
-set +e
-sudo -E -H -u ${STACK_USER:-${USER}} tox -eintegration
-EXIT_CODE=$?
-
-echo "* Message queue status:"
-sudo rabbitmqctl list_queues | grep -e \\.sample -e \\.info
-
-if [ $EXIT_CODE -ne 0 ] ; then
+function generate_telemetry_report(){
     set +x
+
+    echo "* Message queue status:"
+    sudo rabbitmqctl list_queues | grep -e \\.sample -e \\.info
+
     echo "* Heat stack:"
     openstack stack show integration_test
     echo "* Alarm list:"
@@ -108,13 +62,59 @@
     sudo find $GNOCCHI_DATA_DIR/measure
 
     set -x
+}
+
+function generate_reports_and_maybe_exit() {
+    local ret="$1"
+    if [[ $ret != 0 ]]; then
+        # Collect and parse result
+        generate_telemetry_report
+        generate_testr_results
+        exit $ret
+    fi
+}
+
+
+# If we're running in the gate find our keystone endpoint to give to
+# gabbi tests and do a chown. Otherwise the existing environment
+# should provide URL and TOKEN.
+if [ -d $BASE/new/devstack ]; then
+    export CEILOMETER_DIR="$BASE/new/ceilometer"
+    STACK_USER=stack
+    sudo chown -R $STACK_USER:stack $CEILOMETER_DIR
+    source $BASE/new/devstack/openrc admin admin
+    # Go to the ceilometer dir
+    cd $CEILOMETER_DIR
 fi
 
-set -e
+openstack catalog list
+export AODH_SERVICE_URL=$(openstack catalog show alarming -c endpoints -f value | awk '/public/{print $2}')
+export GNOCCHI_SERVICE_URL=$(openstack catalog show metric -c endpoints -f value | awk '/public/{print $2}')
+export HEAT_SERVICE_URL=$(openstack catalog show orchestration -c endpoints -f value | awk '/public/{print $2}')
+export NOVA_SERVICE_URL=$(openstack catalog show compute -c endpoints -f value | awk '/public/{print $2}')
+export GLANCE_IMAGE_NAME=$(openstack image list | awk '/ cirros.*uec /{print $4}')
+export ADMIN_TOKEN=$(openstack token issue -c id -f value)
 
-# Collect and parse result
-if [ -n "$CEILOMETER_DIR" ]; then
+# Run tests with gabbi
+echo "Running telemetry integration test suite"
+set +e
+sudo -E -H -u ${STACK_USER:-${USER}} tox -eintegration
+EXIT_CODE=$?
+
+if [ -d $BASE/new/devstack ]; then
     export_subunit_data "integration"
-    generate_testr_results
+    generate_reports_and_maybe_exit $EXIT_CODE
+
+    # NOTE(sileht): on swift job permissions are wrong, I don't known why
+    sudo chown -R tempest:stack $BASE/new/tempest
+    sudo chown -R tempest:stack $BASE/data/tempest
+
+    # Run tests with tempest
+    cd $BASE/new/tempest
+    sudo -H -u tempest OS_TEST_TIMEOUT=$TEMPEST_OS_TEST_TIMEOUT tox -eall-plugin -- ceilometer.tests.tempest.scenario.test_autoscaling --concurrency=$TEMPEST_CONCURRENCY
+    EXIT_CODE=$?
+    export_subunit_data "all-plugin"
+    generate_reports_and_maybe_exit $EXIT_CODE
 fi
+
 exit $EXIT_CODE
diff --git a/ceilometer/tests/tempest/scenario/test_autoscaling.py b/ceilometer/tests/tempest/scenario/test_autoscaling.py
index f609363..3b0217b 100644
--- a/ceilometer/tests/tempest/scenario/test_autoscaling.py
+++ b/ceilometer/tests/tempest/scenario/test_autoscaling.py
@@ -92,15 +92,35 @@
     def _get_endpoint_for(auth, service):
         opt_section = getattr(config.CONF, service)
         endpoint_type = opt_section.endpoint_type
-        if not endpoint_type.endswith("URL"):
-            endpoint_type += "URL"
+        is_keystone_v3 = 'catalog' in auth[1]
 
-        endpoints = [e for e in auth[1]['serviceCatalog']
-                     if e['type'] == opt_section.catalog_type]
-        if not endpoints:
-            raise Exception("%s endpoint not found" %
-                            config.CONF.metric.catalog_type)
-        return endpoints[0]['endpoints'][0][endpoint_type]
+        if is_keystone_v3:
+            if endpoint_type.endswith("URL"):
+                endpoint_type = endpoint_type[:-3]
+            catalog = auth[1]['catalog']
+            endpoints = [e['endpoints'] for e in catalog
+                         if e['type'] == opt_section.catalog_type]
+            if not endpoints:
+                raise Exception("%s endpoint not found" %
+                                config.CONF.metric.catalog_type)
+            endpoints = [e['url'] for e in endpoints[0]
+                         if e['interface'] == endpoint_type]
+            if not endpoints:
+                raise Exception("%s interface not found for endpoint %s" %
+                                (endpoint_type,
+                                 config.CONF.metric.catalog_type))
+            return endpoints[0]
+
+        else:
+            if not endpoint_type.endswith("URL"):
+                endpoint_type += "URL"
+            catalog = auth[1]['serviceCatalog']
+            endpoints = [e for e in catalog
+                         if e['type'] == opt_section.catalog_type]
+            if not endpoints:
+                raise Exception("%s endpoint not found" %
+                                config.CONF.metric.catalog_type)
+            return endpoints[0]['endpoints'][0][endpoint_type]
 
     @staticmethod
     def test_fake():
