diff --git a/var/spack/repos/builtin/packages/atlas/package.py b/var/spack/repos/builtin/packages/atlas/package.py
index 68a91c964b7c4cf2c587875a8b22e614f07f2c8f..525701c57bb1a697bdb99fc4dc0916f7937ba1df 100644
--- a/var/spack/repos/builtin/packages/atlas/package.py
+++ b/var/spack/repos/builtin/packages/atlas/package.py
@@ -110,7 +110,8 @@ def install(self, spec, prefix):
                     make('shared_all')
 
             make("install")
-            self.install_test()
+            if self.run_tests:
+                self.install_test()
 
     @property
     def libs(self):
diff --git a/var/spack/repos/builtin/packages/cosmomc/package.py b/var/spack/repos/builtin/packages/cosmomc/package.py
index a6a4409b2541dc6105b4133856193b37334e3863..261115d5752dd1e477456bb6c448aea68458525d 100644
--- a/var/spack/repos/builtin/packages/cosmomc/package.py
+++ b/var/spack/repos/builtin/packages/cosmomc/package.py
@@ -108,7 +108,7 @@ def install(self, spec, prefix):
         else:
             wantmpi = 'BUILD=NOMPI'
             mpif90 = 'MPIF90C='
-        
+
         # Choose BLAS and LAPACK
         lapack = ("LAPACKL=%s" %
                   (spec['lapack'].libs + spec['blas'].libs).ld_flags)
@@ -158,8 +158,8 @@ def install(self, spec, prefix):
             for filename in fnmatch.filter(filenames, '*~'):
                 os.remove(os.path.join(dirpath, filename))
 
-    @on_package_attributes(run_tests=True)
     @run_after('install')
+    @on_package_attributes(run_tests=True)
     def check_install(self):
         prefix = self.prefix
         spec = self.spec
diff --git a/var/spack/repos/builtin/packages/fftw/package.py b/var/spack/repos/builtin/packages/fftw/package.py
index 555fbb91f79c15130f4a1b58179ff64645c5251e..3a283e7eb0c2896be5f962bcac4935426622658d 100644
--- a/var/spack/repos/builtin/packages/fftw/package.py
+++ b/var/spack/repos/builtin/packages/fftw/package.py
@@ -138,7 +138,8 @@ def build(self, spec, prefix):
             with working_dir('quad'):
                 make()
 
-    def check(self, spec, prefix):
+    def check(self):
+        spec = self.spec
         if '+double' in spec:
             with working_dir('double'):
                 make("check")
diff --git a/var/spack/repos/builtin/packages/hdf5-blosc/package.py b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
index eb63d08dfdc8c17c354311ab934e13403793d325..79f23d7d92f579b67a73971677056f8147e7ed5e 100644
--- a/var/spack/repos/builtin/packages/hdf5-blosc/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
@@ -111,7 +111,8 @@ def install(self, spec, prefix):
                         "-L%s" % spec["hdf5"].prefix.lib, "-lhdf5")
                 _install_shlib("libblosc_plugin", ".libs", prefix.lib)
 
-        self.check_install(spec)
+        if self.run_tests:
+            self.check_install(spec)
 
     def check_install(self, spec):
         "Build and run a small program to test the installed HDF5 Blosc plugin"
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 27ec1b3bc4b5fd2767502399774ebf93343b3067..4da24dd7f12ec25c97f2a6d3908bc0c2f3b80749 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -79,11 +79,11 @@ class Hdf5(AutotoolsPackage):
     @property
     def libs(self):
         """Hdf5 can be queried for the following parameters:
-        
+
         - "hl": high-level interface
         - "cxx": C++ APIs
         - "fortran": fortran APIs
-        
+
         :return: list of matching libraries
         """
         query_parameters = self.spec.last_query.extra_parameters
@@ -228,6 +228,7 @@ def patch_postdeps(self):
                 'libtool')
 
     @run_after('install')
+    @on_package_attributes(run_tests=True)
     def check_install(self):
         # Build and run a small program to test the installed HDF5 library
         spec = self.spec
diff --git a/var/spack/repos/builtin/packages/nfft/package.py b/var/spack/repos/builtin/packages/nfft/package.py
index a137dcf01997f8d663587173f88e606548a3140f..daedcff22f7cbc280607c7e5100c01bc1c861899 100644
--- a/var/spack/repos/builtin/packages/nfft/package.py
+++ b/var/spack/repos/builtin/packages/nfft/package.py
@@ -63,7 +63,8 @@ def build(self, spec, prefix):
             with working_dir('long-double'):
                 make()
 
-    def check(self, spec, prefix):
+    def check(self):
+        spec = self.spec
         if '+double' in spec['fftw']:
             with working_dir('double'):
                 make("check")
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index f3b1d4d23fcf03bd5a99bf74a942d6edb16b5607..647cbb121a73f193809d77821ef7b0b518dcfde6 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -123,8 +123,8 @@ def build_targets(self):
 
         return self.make_defs + targets
 
-    @on_package_attributes(run_tests=True)
     @run_after('build')
+    @on_package_attributes(run_tests=True)
     def check_build(self):
         make('tests', *self.make_defs)
 
@@ -136,8 +136,8 @@ def install_targets(self):
         ]
         return make_args + self.make_defs
 
-    @on_package_attributes(run_tests=True)
     @run_after('install')
+    @on_package_attributes(run_tests=True)
     def check_install(self):
         spec = self.spec
         # Openblas may pass its own test but still fail to compile Lapack
diff --git a/var/spack/repos/builtin/packages/perl/package.py b/var/spack/repos/builtin/packages/perl/package.py
index 4ae140454d2cc6059f9a3db10c3878dc40ca2819..5ca5f42492da100f106bfd087a4255f9a7edaa24 100644
--- a/var/spack/repos/builtin/packages/perl/package.py
+++ b/var/spack/repos/builtin/packages/perl/package.py
@@ -47,7 +47,7 @@ class Perl(Package):  # Perl doesn't use Autotools, it should subclass Package
     # Maintenance releases (recommended)
     version('5.24.1', '765ef511b5b87a164e2531403ee16b3c', preferred=True)
     version('5.22.3', 'aa4f236dc2fc6f88b871436b8d0fda95')
-    
+
     # Misc releases that people need
     version('5.22.2', '5767e2a10dd62a46d7b57f74a90d952b')
 
@@ -98,6 +98,7 @@ def configure(self, spec, prefix):
     def build(self, spec, prefix):
         make()
 
+    @run_after('build')
     @on_package_attributes(run_tests=True)
     def test(self):
         make('test')
diff --git a/var/spack/repos/builtin/packages/pfft/package.py b/var/spack/repos/builtin/packages/pfft/package.py
index f46526be378a549f36a6c962a5b7ab8c4c026e7d..3d05a834e93bddcf194fd2c60469148dc2cbc1e5 100644
--- a/var/spack/repos/builtin/packages/pfft/package.py
+++ b/var/spack/repos/builtin/packages/pfft/package.py
@@ -67,7 +67,8 @@ def build(self, spec, prefix):
             with working_dir('long-double'):
                 make()
 
-    def check(self, spec, prefix):
+    def check(self):
+        spec = self.spec
         if '+double' in spec['fftw']:
             with working_dir('double'):
                 make("check")
diff --git a/var/spack/repos/builtin/packages/planck-likelihood/package.py b/var/spack/repos/builtin/packages/planck-likelihood/package.py
index c5c5cac6cf86f9dabf3ef907ee6c4aefbda40946..8d7b9c5e34de1e4ffb12adc1360749a860e0e9fe 100644
--- a/var/spack/repos/builtin/packages/planck-likelihood/package.py
+++ b/var/spack/repos/builtin/packages/planck-likelihood/package.py
@@ -137,8 +137,8 @@ def setup_environment(self, spack_env, run_env):
         run_env.set('CLIK_DATA', join_path(prefix, 'share', 'clik'))
         run_env.set('CLIK_PLUGIN', 'rel2015')
 
-    @on_package_attributes(run_tests=True)
     @run_after('install')
+    @on_package_attributes(run_tests=True)
     def check_install(self):
         prefix = self.prefix
         clik_example_C = Executable(join_path(prefix.bin, 'clik_example_C'))
diff --git a/var/spack/repos/builtin/packages/pnfft/package.py b/var/spack/repos/builtin/packages/pnfft/package.py
index 772bd8f195d2a544e7d7a63289fda43b25f3a012..3e56b9be4ef2b90fe9d55b0a5688c96a112cb1f6 100644
--- a/var/spack/repos/builtin/packages/pnfft/package.py
+++ b/var/spack/repos/builtin/packages/pnfft/package.py
@@ -64,7 +64,8 @@ def build(self, spec, prefix):
             with working_dir('long-double'):
                 make()
 
-    def check(self, spec, prefix):
+    def check(self):
+        spec = self.spec
         if '+double' in spec['fftw']:
             with working_dir('double'):
                 make("check")
diff --git a/var/spack/repos/builtin/packages/pocl/package.py b/var/spack/repos/builtin/packages/pocl/package.py
index b64ae228379c4398ac4fc7912f1893435191a642..b6baee7e0725fb073026978171f9b2fdf0e9482f 100644
--- a/var/spack/repos/builtin/packages/pocl/package.py
+++ b/var/spack/repos/builtin/packages/pocl/package.py
@@ -95,6 +95,7 @@ def symlink_opencl(self):
             os.symlink("OpenCL", join_path(self.prefix.include, "CL"))
 
     @run_after('install')
+    @on_package_attributes(run_tests=True)
     def check_install(self):
         # Build and run a small program to test the installed OpenCL library
         spec = self.spec
diff --git a/var/spack/repos/builtin/packages/py-yt/package.py b/var/spack/repos/builtin/packages/py-yt/package.py
index ff50c269a2a14e4f3b399f8ed7184004b07f1752..cefef2e1d38ded9b56c3530de9277629356e4ba6 100644
--- a/var/spack/repos/builtin/packages/py-yt/package.py
+++ b/var/spack/repos/builtin/packages/py-yt/package.py
@@ -78,6 +78,7 @@ def prep_yt(self):
                 rockstar_cfg.write(self.spec['rockstar'].prefix)
 
     @run_after('install')
+    @on_package_attributes(run_tests=True)
     def check_install(self):
         # The Python interpreter path can be too long for this
         # yt = Executable(join_path(prefix.bin, "yt"))