diff --git a/server/site_tests/firmware_CgptState/firmware_CgptState.py b/server/site_tests/firmware_CgptState/firmware_CgptState.py
index a1cffd0..860cab4 100644
--- a/server/site_tests/firmware_CgptState/firmware_CgptState.py
+++ b/server/site_tests/firmware_CgptState/firmware_CgptState.py
@@ -56,8 +56,8 @@
     def run_once(self, host=None):
         self.faft_client.set_cgpt_test_step(0)
         while self.not_finished:
-            logging.info('======== Running CgptState test step %d ========' %
-                         (self.faft_client.get_cgpt_test_step() + 1))
+            logging.info('======== Running CgptState test step %d ========',
+                         self.faft_client.get_cgpt_test_step() + 1)
             self.run_faft_step({
                 'userspace_action': self.run_test_step,
                 'reboot_action': self.full_power_off_and_on,
diff --git a/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py b/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py
index b29c3cd..85f7f36 100644
--- a/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py
+++ b/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import logging, time
+import logging
 
 from autotest_lib.client.common_lib import utils
 from autotest_lib.server.cros.faftsequence import FAFTSequence
diff --git a/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py b/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py
index e863f1e..1bb37b1 100644
--- a/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py
+++ b/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py
@@ -28,7 +28,7 @@
         self.servo.set('usb_mux_sel1', 'dut_sees_usbkey')
 
         self.original_dev_boot_usb = self.faft_client.get_dev_boot_usb()
-        logging.info('Original dev_boot_usb value: %s' %
+        logging.info('Original dev_boot_usb value: %s',
                      str(self.original_dev_boot_usb))
 
 
diff --git a/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py b/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py
index b938947..618e7d7 100644
--- a/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py
+++ b/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py
@@ -38,8 +38,8 @@
 
     def ctrl_d_repeatedly(self):
         """Press Ctrl-D repeatedly."""
-        for i in range(self.CTRL_D_REPEAT_COUNT):
-            self.press_ctrl_d_()
+        for _ in range(self.CTRL_D_REPEAT_COUNT):
+            self.press_ctrl_d()
             time.sleep(self.CTRL_D_REPEAT_DELAY)
 
 
@@ -54,7 +54,7 @@
         """
         [fw_time] = self.faft_client.run_shell_command_get_output(
                 'cat /tmp/firmware-boot-time')
-        logging.info('Got firmware boot time: %s' % fw_time)
+        logging.info('Got firmware boot time: %s', fw_time)
         if fw_time:
             self.fw_time_record[tag] = float(fw_time)
         else:
@@ -71,7 +71,7 @@
         self.record_fw_boot_time('timeout_boot')
         got_timeout = (self.fw_time_record['timeout_boot'] -
                        self.fw_time_record['ctrl_d_boot'])
-        logging.info('Estimated developer firmware timeout: %s' % got_timeout)
+        logging.info('Estimated developer firmware timeout: %s', got_timeout)
 
         if (abs(got_timeout - self.delay.dev_screen_timeout) >
                 self.TIMEOUT_MARGIN):
diff --git a/server/site_tests/firmware_ECAdc/firmware_ECAdc.py b/server/site_tests/firmware_ECAdc/firmware_ECAdc.py
index 0ffe132..096634d 100644
--- a/server/site_tests/firmware_ECAdc/firmware_ECAdc.py
+++ b/server/site_tests/firmware_ECAdc/firmware_ECAdc.py
@@ -35,7 +35,7 @@
     def run_once(self, host=None):
         if not self.check_ec_capability(['adc_ectemp']):
             return
-        logging.info("Reading EC internal temperature for %d times." %
+        logging.info("Reading EC internal temperature for %d times.",
                      self.READ_COUNT)
-        for i in xrange(self.READ_COUNT):
+        for _ in xrange(self.READ_COUNT):
             self._check_read()
diff --git a/server/site_tests/firmware_ECBattery/firmware_ECBattery.py b/server/site_tests/firmware_ECBattery/firmware_ECBattery.py
index f1f29c4..fec8c51 100644
--- a/server/site_tests/firmware_ECBattery/firmware_ECBattery.py
+++ b/server/site_tests/firmware_ECBattery/firmware_ECBattery.py
@@ -48,7 +48,7 @@
                 'grep -iH --color=no "Battery" /sys/class/power_supply/*/type')
         name = re.search("/sys/class/power_supply/([^/]+)/",
                          match[0]).group(1)
-        logging.info("Battery name is %s" % name)
+        logging.info("Battery name is %s", name)
         self._battery_status = self.BATTERY_STATUS % name
         self._battery_voltage = self.BATTERY_VOLTAGE_READING % name
         self._battery_current = self.BATTERY_CURRENT_READING % name
@@ -65,8 +65,8 @@
         # Kernel gives voltage value in uV. Convert to mV here.
         kernel_reading = int(self.faft_client.run_shell_command_get_output(
                 'cat %s' % self._battery_voltage)[0]) / 1000
-        logging.info("Voltage reading from servo: %dmV" % servo_reading)
-        logging.info("Voltage reading from kernel: %dmV" % kernel_reading)
+        logging.info("Voltage reading from servo: %dmV", servo_reading)
+        logging.info("Voltage reading from kernel: %dmV", kernel_reading)
         if abs(servo_reading - kernel_reading) > self.VOLTAGE_MV_ERROR_MARGIN:
             raise error.TestFail(
                     "Voltage reading from servo (%dmV) and kernel (%dmV) "
@@ -87,8 +87,8 @@
         # Kernel gives current value in uA. Convert to mA here.
         kernel_reading = abs(int(self.faft_client.run_shell_command_get_output(
                 'cat %s' % self._battery_current)[0])) / 1000
-        logging.info("Current reading from servo: %dmA" % servo_reading)
-        logging.info("Current reading from kernel: %dmA" % kernel_reading)
+        logging.info("Current reading from servo: %dmA", servo_reading)
+        logging.info("Current reading from kernel: %dmA", kernel_reading)
         if abs(servo_reading - kernel_reading) > self.CURRENT_MA_ERROR_MARGIN:
             raise error.TestFail(
                     "Current reading from servo (%dmA) and kernel (%dmA) "
@@ -104,7 +104,7 @@
         """
         battery_temp = float(self.ec.send_command_get_output("battery",
                 ["Temp:.+\(([0-9\.]+) C\)"])[0][1])
-        logging.info("Battery temperature is %f C" % battery_temp)
+        logging.info("Battery temperature is %f C", battery_temp)
         if (battery_temp > self.BATTERY_TEMP_UPPER_BOUND or
             battery_temp < self.BATTERY_TEMP_LOWER_BOUND):
             raise error.TestFail("Abnormal battery temperature, %.2f C." %
diff --git a/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py b/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py
index f9f3830..baf564b 100644
--- a/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py
+++ b/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py
@@ -31,10 +31,10 @@
         power_press_time = float(power_press[0][1])
         firmware_resp_time = float(power_press[1][1])
         boot_time = firmware_resp_time - power_press_time
-        logging.info("EC cold boot time: %f s" % reboot_time)
+        logging.info("EC cold boot time: %f s", reboot_time)
         if reboot_time > 1.0:
             raise error.TestFail("EC cold boot time longer than 1 second.")
-        logging.info("EC boot time: %f s" % boot_time)
+        logging.info("EC boot time: %f s", boot_time)
         if boot_time > 1.0:
             raise error.TestFail("Boot time longer than 1 second.")
 
diff --git a/server/site_tests/firmware_ECCharging/firmware_ECCharging.py b/server/site_tests/firmware_ECCharging/firmware_ECCharging.py
index 37808a7..1a9c191 100644
--- a/server/site_tests/firmware_ECCharging/firmware_ECCharging.py
+++ b/server/site_tests/firmware_ECCharging/firmware_ECCharging.py
@@ -26,7 +26,7 @@
         """Get battery desired voltage value."""
         voltage = int(self.ec.send_command_get_output("battery",
                 ["V-desired:\s+0x[0-9a-f]*\s+=\s+(\d+)\s+mV"])[0][1])
-        logging.info("Battery desired voltage = %d mV" % voltage)
+        logging.info("Battery desired voltage = %d mV", voltage)
         return voltage
 
 
@@ -34,7 +34,7 @@
         """Get battery desired current value."""
         current = int(self.ec.send_command_get_output("battery",
                 ["I-desired:\s+0x[0-9a-f]*\s+=\s+(\d+)\s+mA"])[0][1])
-        logging.info("Battery desired current = %d mA" % current)
+        logging.info("Battery desired current = %d mA", current)
         return current
 
 
@@ -42,7 +42,7 @@
         """Get the actual voltage from charger to battery."""
         voltage = int(self.ec.send_command_get_output("battery",
                 ["V:\s+0x[0-9a-f]*\s+=\s+(\d+)\s+mV"])[0][1])
-        logging.info("Battery actual voltage = %d mV" % voltage)
+        logging.info("Battery actual voltage = %d mV", voltage)
         return voltage
 
 
@@ -50,7 +50,7 @@
         """Get the actual current from charger to battery."""
         current = int(self.ec.send_command_get_output("battery",
                 ["I:\s+0x[0-9a-f]*\s+=\s+([0-9-]+)\s+mA"])[0][1])
-        logging.info("Battery actual current = %d mA" % current)
+        logging.info("Battery actual current = %d mA", current)
         return current
 
 
@@ -58,7 +58,7 @@
         """Get battery charge state."""
         charge = int(self.ec.send_command_get_output("battery",
                 ["Charge:\s+(\d+)\s+"])[0][1])
-        logging.info("Battery charge = %d %%" % charge)
+        logging.info("Battery charge = %d %%", charge)
         return charge
 
 
@@ -66,7 +66,7 @@
         """Get target charging voltage set in charger."""
         voltage = int(self.ec.send_command_get_output("charger",
                 ["V_batt:\s+(\d+)\s"])[0][1])
-        logging.info("Charger target voltage = %d mV" % voltage)
+        logging.info("Charger target voltage = %d mV", voltage)
         return voltage
 
 
@@ -74,7 +74,7 @@
         """Get target charging current set in charger."""
         current = int(self.ec.send_command_get_output("charger",
                 ["I_batt:\s+(\d+)\s"])[0][1])
-        logging.info("Charger target current = %d mA" % current)
+        logging.info("Charger target current = %d mA", current)
         return current
 
 
diff --git a/server/site_tests/firmware_ECPeci/firmware_ECPeci.py b/server/site_tests/firmware_ECPeci/firmware_ECPeci.py
index 4c911ec..e41349d 100644
--- a/server/site_tests/firmware_ECPeci/firmware_ECPeci.py
+++ b/server/site_tests/firmware_ECPeci/firmware_ECPeci.py
@@ -35,7 +35,7 @@
     def run_once(self, host=None):
         if not self.check_ec_capability(['peci']):
             return
-        logging.info("Reading PECI CPU temperature for %d times." %
+        logging.info("Reading PECI CPU temperature for %d times.",
                      self.READ_COUNT)
-        for i in xrange(self.READ_COUNT):
+        for _ in xrange(self.READ_COUNT):
             self._check_read()
diff --git a/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py b/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py
index 71d1ca3..edde4ce 100644
--- a/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py
+++ b/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py
@@ -5,7 +5,6 @@
 import re
 from threading import Timer
 
-from autotest_lib.client.common_lib import error
 from autotest_lib.server.cros.faftsequence import FAFTSequence
 
 class firmware_ECPowerButton(FAFTSequence):
@@ -68,7 +67,9 @@
         by power button again.
         """
         self.servo.power_key(shutdown_powerkey_duration)
-        Timer(wake_delay, self.servo.power_key, [wake_powerkey_duration]).start()
+        Timer(wake_delay,
+              self.servo.power_key,
+              [wake_powerkey_duration]).start()
 
 
 
diff --git a/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py b/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py
index 73c1b75..5ec894f 100644
--- a/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py
+++ b/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py
@@ -3,7 +3,6 @@
 # found in the LICENSE file.
 
 import logging
-import time
 
 from autotest_lib.client.common_lib import error
 from autotest_lib.server.cros.faftsequence import FAFTSequence
@@ -38,7 +37,7 @@
           reg_ex: Acceptable "powerinfo" response. Can be a regular expression.
           timeout: Timeout range.
         """
-        logging.info('Waiting for "%s" in %d seconds.' % (reg_ex, timeout))
+        logging.info('Waiting for "%s" in %d seconds.', reg_ex, timeout)
         while timeout > 0:
             try:
                 timeout = timeout - 1
@@ -46,7 +45,7 @@
                                                 [reg_ex],
                                                 timeout=1)
                 return True
-            except:
+            except error.TestFail:
                 pass
         return False
 
diff --git a/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py b/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py
index f647429..44d9290 100644
--- a/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py
+++ b/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py
@@ -5,7 +5,6 @@
 import logging
 import time
 
-from autotest_lib.client.common_lib import error
 from autotest_lib.server.cros.faftsequence import FAFTSequence
 
 class firmware_ECSharedMem(FAFTSequence):
diff --git a/server/site_tests/firmware_ECThermal/firmware_ECThermal.py b/server/site_tests/firmware_ECThermal/firmware_ECThermal.py
index d6f27aa..a15bede 100644
--- a/server/site_tests/firmware_ECThermal/firmware_ECThermal.py
+++ b/server/site_tests/firmware_ECThermal/firmware_ECThermal.py
@@ -5,6 +5,7 @@
 import logging
 import re
 import time
+import xmlrpclib
 
 from autotest_lib.client.common_lib import error
 from autotest_lib.server.cros.faftsequence import FAFTSequence
@@ -75,7 +76,7 @@
             try:
                 lines = self.faft_client.run_shell_command_get_output(
                         'ectool thermalget %d %d' % (type_id, current_id))
-            except:
+            except xmlrpclib.Fault:
                 break
             pattern = re.compile('Threshold \d* [a-z ]* \d* is (\d*) K.')
             for line in lines:
@@ -107,7 +108,7 @@
             self.servo.set_nocheck('fan_target_rpm', "%d" % self._fan_steps[i])
             self._fan_steps[i] = int(self.servo.get('fan_target_rpm'))
 
-        logging.info("Actual fan steps: %s" % self._fan_steps)
+        logging.info("Actual fan steps: %s", self._fan_steps)
 
 
     def get_thermal_setting(self):
@@ -120,7 +121,7 @@
                 break
             self._thermal_setting.append(setting)
             type_id = type_id + 1
-        logging.info("Number of tempearture sensor types: %d" % type_id)
+        logging.info("Number of tempearture sensor types: %d", type_id)
 
         # Get the number of temperature sensors
         self._num_temp_sensor = 0
@@ -129,9 +130,9 @@
                 self.faft_client.run_shell_command('ectool temps %d' %
                                                    self._num_temp_sensor)
                 self._num_temp_sensor = self._num_temp_sensor + 1
-            except:
+            except xmlrpclib.Fault:
                 break
-        logging.info("Number of temperature sensor: %d" % self._num_temp_sensor)
+        logging.info("Number of temperature sensor: %d", self._num_temp_sensor)
 
 
     def setup(self):
@@ -208,11 +209,11 @@
             more than TEMP_MISMATCH_MARGIN.
         """
         cpu_temp_id = self._find_cpu_sensor_id()
-        logging.info("CPU temperature sensor ID is %d" % cpu_temp_id)
+        logging.info("CPU temperature sensor ID is %d", cpu_temp_id)
         ectool_cpu_temp = self._get_temp_reading(cpu_temp_id)
         servo_cpu_temp = int(self.servo.get('cpu_temp'))
-        logging.info("CPU temperature from servo: %d C" % servo_cpu_temp)
-        logging.info("CPU temperature from ectool: %d C" % ectool_cpu_temp)
+        logging.info("CPU temperature from servo: %d C", servo_cpu_temp)
+        logging.info("CPU temperature from ectool: %d C", ectool_cpu_temp)
         if abs(ectool_cpu_temp - servo_cpu_temp) > self.TEMP_MISMATCH_MARGIN:
             raise error.TestFail(
                     'CPU temperature readings from servo and ectool differ')
@@ -242,18 +243,18 @@
             self.faft_client.run_shell_command(stress_cmd % block_count)
             return None
         else:
-            logging.info("Stressing DUT with %d threads..." % thread)
+            logging.info("Stressing DUT with %d threads...", thread)
             self.faft_client.run_shell_command('pkill dd')
             stress_cmd = 'dd if=/dev/urandom of=/dev/null bs=1M &'
             # Grep for [d]d instead of dd to prevent getting the PID of grep
             # itself.
             pid_cmd = "ps -ef | grep '[d]d if=/dev/urandom' | awk '{print $2}'"
             self._stress_pid = list()
-            for i in xrange(thread):
+            for _ in xrange(thread):
                 self.faft_client.run_shell_command(stress_cmd)
             lines = self.faft_client.run_shell_command_get_output(pid_cmd)
             for line in lines:
-                logging.info("PID is %s" % line)
+                logging.info("PID is %s", line)
                 self._stress_pid.append(int(line.strip()))
             return self._stress_pid
 
@@ -284,11 +285,11 @@
             raise error.TestFail("Fan is not turned off.")
         logging.info("EC reports fan turned off.")
         cpu_temp_before = int(self.servo.get('cpu_temp'))
-        logging.info("CPU temperature before stressing is %d C" %
+        logging.info("CPU temperature before stressing is %d C",
                      cpu_temp_before)
         self._stress_dut()
         cpu_temp_after = int(self.servo.get('cpu_temp'))
-        logging.info("CPU temperature after stressing is %d C" %
+        logging.info("CPU temperature after stressing is %d C",
                      cpu_temp_after)
         if cpu_temp_after - cpu_temp_before < self.TEMP_STRESS_INCREASE:
             raise error.TestFail(
@@ -369,8 +370,8 @@
             upper_bound = self._thermal_setting[sensor_type][idx + 3]
 
         temp_reading = self._get_temp_reading(sensor_id)
-        logging.info("Sensor %d = %d C" % (sensor_id, temp_reading))
-        logging.info("  Expecting %d - %d C" % (lower_bound, upper_bound))
+        logging.info("Sensor %d = %d C", sensor_id, temp_reading)
+        logging.info("  Expecting %d - %d C", lower_bound, upper_bound)
         if temp_reading > upper_bound:
             return 0x00
         elif temp_reading < lower_bound:
@@ -392,7 +393,7 @@
         self._stress_dut(block_count=-1)
         time.sleep(self.STRESS_DELAY)
         fan_rpm = int(self.servo.get('fan_target_rpm'))
-        logging.info('Fan speed is %d RPM' % fan_rpm)
+        logging.info('Fan speed is %d RPM', fan_rpm)
         try:
             result = reduce(lambda x, y: x | y,
                             [self._check_fan_speed_per_sensor(fan_rpm, x)
diff --git a/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py b/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py
index 44fb25a..a5f9fc2 100644
--- a/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py
+++ b/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py
@@ -43,7 +43,9 @@
         ports_off_cmd = for_all_ports_cmd % 0
         ports_on_cmd = for_all_ports_cmd % 1
         cmd = ("(sleep %d; %s; sleep %d; %s)&" %
-                (self.RPC_DELAY, ports_off_cmd, self.REBOOT_DELAY, ports_on_cmd))
+                (self.RPC_DELAY, ports_off_cmd,
+                 self.REBOOT_DELAY,
+                 ports_on_cmd))
         self.faft_client.run_shell_command(cmd)
         self.kill_remote()
 
@@ -65,7 +67,7 @@
                 cnt = cnt + 1
                 limit = limit - 1
             except error.TestFail:
-                logging.info("Found %d USB ports" % cnt)
+                logging.info("Found %d USB ports", cnt)
                 return cnt
 
         # Limit reached. Probably something went wrong.
@@ -81,7 +83,7 @@
           port_count: Number of USB ports.
           timeout: Timeout range.
         """
-        logging.info('Waiting for %d USB ports to be disabled.' % port_count)
+        logging.info('Waiting for %d USB ports to be disabled.', port_count)
         while timeout > 0:
             try:
                 timeout = timeout - 1
diff --git a/server/site_tests/firmware_FAFTSetup/firmware_FAFTSetup.py b/server/site_tests/firmware_FAFTSetup/firmware_FAFTSetup.py
index afb87a9..c39a26d 100644
--- a/server/site_tests/firmware_FAFTSetup/firmware_FAFTSetup.py
+++ b/server/site_tests/firmware_FAFTSetup/firmware_FAFTSetup.py
@@ -54,7 +54,7 @@
                                             expected_output,
                                             timeout=0.2)
             return True
-        except:
+        except: # pylint: disable=W0702
             logging.error("Cannot talk to EC console.")
             logging.error(
                     "Please check there is no terminal opened on EC console.")
diff --git a/server/site_tests/firmware_ShellBall/firmware_ShellBall.py b/server/site_tests/firmware_ShellBall/firmware_ShellBall.py
index 9d0f022..e292576 100644
--- a/server/site_tests/firmware_ShellBall/firmware_ShellBall.py
+++ b/server/site_tests/firmware_ShellBall/firmware_ShellBall.py
@@ -4,7 +4,6 @@
 
 import os
 
-from autotest_lib.server import test, autotest
 from autotest_lib.server.cros.faftsequence import FAFTSequence
 
 class firmware_ShellBall(FAFTSequence):
diff --git a/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py b/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py
index 129cffe..be1a130 100644
--- a/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py
+++ b/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py
@@ -43,7 +43,7 @@
                     'ec_autest_image.bin". The ec_autest_image.bin file is '
                     'included in the firmware_from_source.tar.bz2.')
         self.arg_new_ec = dict_args['new_ec']
-        logging.info('The EC image to-be-updated is: %s' % self.arg_new_ec)
+        logging.info('The EC image to-be-updated is: %s', self.arg_new_ec)
         super(firmware_UpdateECBin, self).initialize(host, cmdline_args,
                                                      use_pyauto, use_faft)
 
diff --git a/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py b/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py
index d0be6f1..621d6e1 100644
--- a/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py
+++ b/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py
@@ -48,7 +48,7 @@
                 % (expected_ver, actual_ver, actual_tpm_fwver))
         else:
             logging.info(
-                'Update success, now datakey version is %s' % actual_ver)
+                'Update success, now datakey version is %s', actual_ver)
 
 
     def check_version_and_run_recovery(self):
@@ -81,10 +81,10 @@
         self._fwid = self.faft_client.retrieve_shellball_fwid()
 
         actual_ver = self.faft_client.get_firmware_datakey_version('a')
-        logging.info('Origin version is %s' % actual_ver)
+        logging.info('Origin version is %s', actual_ver)
         self._update_version = actual_ver + 1
-        logging.info('Firmware version will update to version %s'
-            % self._update_version)
+        logging.info('Firmware version will update to version %s',
+            self._update_version)
 
         self.resign_datakey_version(host)
         self.faft_client.resign_firmware(1)
diff --git a/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py b/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py
index 775070b..776e912 100644
--- a/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py
+++ b/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py
@@ -3,8 +3,6 @@
 # found in the LICENSE file.
 
 import logging
-import os
-import time
 from autotest_lib.server import utils
 from autotest_lib.server.cros.faftsequence import FAFTSequence
 from autotest_lib.client.common_lib import error
@@ -31,12 +29,12 @@
         if actual_ver != expected_ver or actual_tpm_fwver != expected_ver:
             raise error.TestFail(
                 'Firmware version should be %s,'
-                'but got (fwver, tpm_fwver) = (%s, %s).'
-                % (expected_ver, actual_ver, actual_tpm_fwver))
+                'but got (fwver, tpm_fwver) = (%s, %s).' %
+                (expected_ver, actual_ver, actual_tpm_fwver))
         else:
             logging.info(
-                'Update success, now version is %s'
-                % actual_ver)
+                'Update success, now version is %s',
+                actual_ver)
 
 
     def check_version_and_run_recovery(self):
@@ -68,10 +66,10 @@
         self._fwid = self.faft_client.retrieve_shellball_fwid()
 
         actual_ver = self.faft_client.get_firmware_version('a')
-        logging.info('Origin version is %s' % actual_ver)
+        logging.info('Origin version is %s', actual_ver)
         self._update_version = actual_ver + 1
-        logging.info('Firmware version will update to version %s'
-            % self._update_version)
+        logging.info('Firmware version will update to version %s',
+            self._update_version)
 
         self.faft_client.resign_firmware(self._update_version)
         self.faft_client.repack_firmwareupdate_shellball('test')
diff --git a/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py b/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py
index d20f287..299c06e 100644
--- a/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py
+++ b/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py
@@ -2,7 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import logging, os, time
+import logging
+import os
 from autotest_lib.server.cros.faftsequence import FAFTSequence
 from autotest_lib.client.common_lib import error
 
@@ -25,8 +26,8 @@
                 % (expected_ver, actual_ver))
         else:
             logging.info(
-                'Update success, now version is %s'
-                % actual_ver)
+                'Update success, now version is %s',
+                actual_ver)
 
 
     def resign_kernel_datakey_version(self, host):
@@ -70,10 +71,10 @@
         self.setup_dev_mode(dev_mode)
 
         actual_ver = self.faft_client.retrieve_kernel_datakey_version('b')
-        logging.info('Original Kernel Version of KERN-B is %s' % actual_ver)
+        logging.info('Original Kernel Version of KERN-B is %s', actual_ver)
 
         self._update_version = actual_ver + 1
-        logging.info('KERN-B will update to version %s' % self._update_version)
+        logging.info('KERN-B will update to version %s', self._update_version)
 
         self.setup_kernel('a')
         self.faft_client.setup_firmwareupdate_temp_dir()
diff --git a/server/site_tests/firmware_UpdateKernelSubkeyVersion/firmware_UpdateKernelSubkeyVersion.py b/server/site_tests/firmware_UpdateKernelSubkeyVersion/firmware_UpdateKernelSubkeyVersion.py
index 9b4a021..cebbfa1 100644
--- a/server/site_tests/firmware_UpdateKernelSubkeyVersion/firmware_UpdateKernelSubkeyVersion.py
+++ b/server/site_tests/firmware_UpdateKernelSubkeyVersion/firmware_UpdateKernelSubkeyVersion.py
@@ -39,12 +39,12 @@
         actual_ver = self.faft_client.retrieve_kernel_subkey_version('a')
         if actual_ver != expected_ver:
             raise error.TestFail(
-                    'Kernel subkey version should be %s, but got %s.'
-                    % (expected_ver, actual_ver))
+                    'Kernel subkey version should be %s, but got %s.' %
+                    (expected_ver, actual_ver))
         else:
             logging.info(
-                'Update success, now subkey version is %s'
-                % actual_ver)
+                'Update success, now subkey version is %s',
+                actual_ver)
 
 
     def run_bootok_and_recovery(self):
@@ -76,10 +76,10 @@
         self._fwid = self.faft_client.retrieve_shellball_fwid()
 
         ver = self.faft_client.retrieve_kernel_subkey_version('a')
-        logging.info('Origin version is %s' % ver)
+        logging.info('Origin version is %s', ver)
         self._update_version = ver + 1
-        logging.info('Kernel subkey version will update to version %s'
-            % self._update_version)
+        logging.info('Kernel subkey version will update to version %s',
+            self._update_version)
 
         self.resign_kernel_subkey_version(host)
         self.faft_client.resign_firmware(1)
diff --git a/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py b/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py
index aff34f9..3cd89a1 100644
--- a/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py
+++ b/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import logging, time
+import logging
 from autotest_lib.server.cros.faftsequence import FAFTSequence
 from autotest_lib.client.common_lib import error
 
@@ -25,8 +25,8 @@
                 % (expected_ver, actual_ver))
         else:
             logging.info(
-                'Update success, now version is %s'
-                % actual_ver)
+                'Update success, now version is %s',
+                actual_ver)
 
 
     def modify_kernel_b_and_set_cgpt_priority(self, delta, target_dev):
@@ -48,10 +48,10 @@
         self.setup_dev_mode(dev_mode)
 
         actual_ver = self.faft_client.retrieve_kernel_version('b')
-        logging.info('Original Kernel Version of KERN-B is %s' % actual_ver)
+        logging.info('Original Kernel Version of KERN-B is %s', actual_ver)
 
         self._update_version = actual_ver + 1
-        logging.info('KERN-B will update to version %s' % self._update_version)
+        logging.info('KERN-B will update to version %s', self._update_version)
 
         self.setup_kernel('a')
 
