diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index ed800c5..4b9a2b0 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -3,12 +3,20 @@
     import zlib
 except ImportError:
     zlib = None
-import zipfile, os, unittest, sys, shutil, struct, io
+
+import io
+import os
+import shutil
+import struct
+import zipfile
+import unittest
+
 
 from tempfile import TemporaryFile
 from random import randint, random
+from unittest import skipUnless
 
-import test.support as support
+from test import support
 from test.support import TESTFN, run_unittest, findfile
 
 TESTFN2 = TESTFN + "2"
@@ -210,43 +218,51 @@
         for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
             self.zipIterlinesTest(f, zipfile.ZIP_STORED)
 
-    if zlib:
-        def testDeflated(self):
-            for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
-                self.zipTest(f, zipfile.ZIP_DEFLATED)
+    @skipUnless(zlib, "requires zlib")
+    def testDeflated(self):
+        for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
+            self.zipTest(f, zipfile.ZIP_DEFLATED)
 
-        def testOpenDeflated(self):
-            for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
-                self.zipOpenTest(f, zipfile.ZIP_DEFLATED)
 
-        def testRandomOpenDeflated(self):
-            for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
-                self.zipRandomOpenTest(f, zipfile.ZIP_DEFLATED)
+    @skipUnless(zlib, "requires zlib")
+    def testOpenDeflated(self):
+        for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
+            self.zipOpenTest(f, zipfile.ZIP_DEFLATED)
 
-        def testReadlineDeflated(self):
-            for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
-                self.zipReadlineTest(f, zipfile.ZIP_DEFLATED)
+    @skipUnless(zlib, "requires zlib")
+    def testRandomOpenDeflated(self):
+        for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
+            self.zipRandomOpenTest(f, zipfile.ZIP_DEFLATED)
 
-        def testReadlinesDeflated(self):
-            for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
-                self.zipReadlinesTest(f, zipfile.ZIP_DEFLATED)
+    @skipUnless(zlib, "requires zlib")
+    def testReadlineDeflated(self):
+        for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
+            self.zipReadlineTest(f, zipfile.ZIP_DEFLATED)
 
-        def testIterlinesDeflated(self):
-            for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
-                self.zipIterlinesTest(f, zipfile.ZIP_DEFLATED)
+    @skipUnless(zlib, "requires zlib")
+    def testReadlinesDeflated(self):
+        for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
+            self.zipReadlinesTest(f, zipfile.ZIP_DEFLATED)
 
-        def testLowCompression(self):
-            # Checks for cases where compressed data is larger than original
-            # Create the ZIP archive
-            zipfp = zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_DEFLATED)
-            zipfp.writestr("strfile", '12')
-            zipfp.close()
+    @skipUnless(zlib, "requires zlib")
+    def testIterlinesDeflated(self):
+        for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
+            self.zipIterlinesTest(f, zipfile.ZIP_DEFLATED)
 
-            # Get an open object for strfile
-            zipfp = zipfile.ZipFile(TESTFN2, "r", zipfile.ZIP_DEFLATED)
-            openobj = zipfp.open("strfile")
-            self.assertEqual(openobj.read(1), b'1')
-            self.assertEqual(openobj.read(1), b'2')
+    @skipUnless(zlib, "requires zlib")
+    def testLowCompression(self):
+        # Checks for cases where compressed data is larger than original
+        # Create the ZIP archive
+        zipfp = zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_DEFLATED)
+        zipfp.writestr("strfile", '12')
+        zipfp.close()
+
+        # Get an open object for strfile
+        zipfp = zipfile.ZipFile(TESTFN2, "r", zipfile.ZIP_DEFLATED)
+        openobj = zipfp.open("strfile")
+        self.assertEqual(openobj.read(1), b'1')
+        self.assertEqual(openobj.read(1), b'2')
+
 
     def testAbsoluteArcnames(self):
         zipfp = zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED)
@@ -388,8 +404,8 @@
         orig_zip.close()
 
     def tearDown(self):
-        os.remove(TESTFN)
-        os.remove(TESTFN2)
+        support.unlink(TESTFN)
+        support.unlink(TESTFN2)
 
 class TestZip64InSmallFiles(unittest.TestCase):
     # These tests test the ZIP64 functionality without using large files,
@@ -506,8 +522,8 @@
 
     def tearDown(self):
         zipfile.ZIP64_LIMIT = self._limit
-        os.remove(TESTFN)
-        os.remove(TESTFN2)
+        support.unlink(TESTFN)
+        support.unlink(TESTFN2)
 
 class PyZipFileTests(unittest.TestCase):
     def testWritePyfile(self):
@@ -1007,7 +1023,7 @@
         zipf.close()
 
     def tearDown(self):
-        os.remove(TESTFN2)
+        support.unlink(TESTFN2)
 
 class TestWithDirectory(unittest.TestCase):
     def setUp(self):
@@ -1034,7 +1050,7 @@
     def tearDown(self):
         shutil.rmtree(TESTFN2)
         if os.path.exists(TESTFN):
-            os.remove(TESTFN)
+            support.unlink(TESTFN)
 
 
 class UniversalNewlineTests(unittest.TestCase):
