Best Python code snippet using refurb_python
logging_management.py
Source: logging_management.py
1#! /usr/bin/env python2# -*- mode: python; c-basic-offset: 2; indent-tabs-mode: nil; -*-3# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:4#5# Copyright (C) 2009 Sun Microsystems6# Copyright (C) 2011 Patrick Crews7#8# Authors:9#10# Jay Pipes <joinfu@sun.com>11# Monty Taylor <mordred@sun.com>12# Patrick Crews 13#14# This program is free software; you can redistribute it and/or modify15# it under the terms of the GNU General Public License as published by16# the Free Software Foundation; either version 2 of the License, or17# (at your option) any later version.18#19# This program is distributed in the hope that it will be useful,20# but WITHOUT ANY WARRANTY; without even the implied warranty of21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the22# GNU General Public License for more details.23#24# You should have received a copy of the GNU General Public License25# along with this program; if not, write to the Free Software26# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA27#28#29# This code is modified from the logging module used in the 30# drizzle-automation project - https://launchpad.net/drizzle-automation31""" Simple replacement for python logging module that doesn't suck """32import os33import time, sys34class loggingManager():35 """ Class to deal with logging36 We make a class just because we forsee ourselves being37 multi-threaded and it will be nice to have a single38 point of control for managing i/o.39 Also, this is the cleanest way I can think of to deal40 with test-reporting (again, multi-threaded and such41 """42 def __init__(self, variables):43 self.log_file = sys.stdout44 self.subunit_file = variables['subunitoutfile']45 # TODO - introduce an option to manually toggle46 # whether or not to reset or append to pre-existing file47 if os.path.exists(self.subunit_file):48 os.remove(self.subunit_file)49 self.report_fmt = '{0:<42} {1} {2:>8}'50 self.report_started = 051 self.thick_line = '='*(80 - len("20110420-105402 "))52 self.thin_line = '-'*(80- len("20110420-105402 "))53 self.verbose_flag = variables['verbose']54 self.debug_flag = variables['debug']55 self.test_debug_flag = variables['testdebug']56 def _write_message(self,level, msg):57 self.log_file.write("%s %s %s\n" % (time.strftime("%Y%m%d-%H%M%S"), level, str(msg)))58 self.log_file.flush()59 def setOutput(self,file_name):60 if file_name == 'stdout':61 self.log_file= sys.stdout62 else:63 self.log_file= open(variables['log_file'],'w+')64 def info(self,msg):65 self._write_message("INFO", msg)66 def warning(self,msg):67 self._write_message("WARNING", msg)68 def error(self,msg):69 self._write_message("ERROR", msg)70 def verbose(self,msg):71 if self.verbose_flag:72 self._write_message("VERBOSE", msg)73 def debug(self,msg):74 if self.debug_flag:75 self._write_message("DEBUG", msg)76 def test_debug(self,msg):77 if self.test_debug_flag:78 self._write_message("TEST_DEBUG", msg)79 80 def debug_class(self,codeClass):81 if self.debug_flag:82 self._write_message("DEBUG**",codeClass)83 skip_keys = ['skip_keys', 'debug', 'verbose']84 for key, item in sorted(vars(codeClass).items()):85 if key not in codeClass.skip_keys and key not in skip_keys:86 self._write_message("DEBUG**",("%s: %s" %(key, item)))87 def test_report( self, test_name, test_status88 , execution_time, additional_output = None89 , report_output = False):90 """ We use this method to deal with writing out the test report91 """92 if not self.report_started:93 self.report_started = 194 self.write_report_header()95 test_status = "[ %s ]" %(test_status)96 msg = self.report_fmt.format( test_name, test_status97 , execution_time)98 self._write_message("", msg)99 if additional_output and report_output:100 additional_output=additional_output.split('\n')101 for line in additional_output:102 line = line.strip()103 self._write_message("",line)104 def write_report_header(self):105 self.write_thick_line()106 self.test_report("TEST NAME", "RESULT", "TIME (ms)")107 self.write_thick_line()108 def write_thin_line(self):109 self._write_message("",self.thin_line)110 def write_thick_line(self):111 self._write_message("",self.thick_line)112 def subunit_start(self,test_name):113 """ We log a test being started for subunit output """114 with open(self.subunit_file,'a') as subunit_outfile:115 subunit_outfile.write("time: %sZ\n" %(time.strftime("%Y-%m-%d-%H:%M:%S")))116 subunit_outfile.write("test: %s\n" %(test_name))117 def subunit_stop(self, test_name, retcode, output):118 """ We log the return of a test appropriately:119 success, skip, failure, etc120 """121 result_map = {'pass':'success'122 ,'fail':'failure'123 }124 result = result_map[retcode]125 with open(self.subunit_file,'a') as subunit_outfile:126 subunit_outfile.write(time.strftime("time: %Y-%m-%d-%H:%M:%SZ\n"))127 if output:128 output_string = " [\n%s]\n" %(output)129 else:130 output_string = "\n" # we just want a newline if nothing here 131 subunit_outfile.write("%s: %s%s" %( result132 , test_name133 , output_string))134 ...
Check out the latest blogs from LambdaTest on this topic:
In some sense, testing can be more difficult than coding, as validating the efficiency of the test cases (i.e., the ‘goodness’ of your tests) can be much harder than validating code correctness. In practice, the tests are just executed without any validation beyond the pass/fail verdict. On the contrary, the code is (hopefully) always validated by testing. By designing and executing the test cases the result is that some tests have passed, and some others have failed. Testers do not know much about how many bugs remain in the code, nor about their bug-revealing efficiency.
Agile software development stems from a philosophy that being agile means creating and responding to change swiftly. Agile means having the ability to adapt and respond to change without dissolving into chaos. Being Agile involves teamwork built on diverse capabilities, skills, and talents. Team members include both the business and software development sides working together to produce working software that meets or exceeds customer expectations continuously.
In my last blog, I investigated both the stateless and the stateful class of model-based testing. Both have some advantages and disadvantages. You can use them for different types of systems, depending on whether a stateful solution is required or a stateless one is enough. However, a better solution is to use an aggregate technique that is appropriate for each system. Currently, the only aggregate solution is action-state testing, introduced in the book Paradigm Shift in Software Testing. This method is implemented in Harmony.
Hey everyone! We hope you had a great Hacktober. At LambdaTest, we thrive to bring you the best with each update. Our engineering and tech teams work at lightning speed to deliver you a seamless testing experience.
I routinely come across test strategy documents when working with customers. They are lengthy—100 pages or more—and packed with monotonous text that is routinely reused from one project to another. Yawn once more— the test halt and resume circumstances, the defect management procedure, entrance and exit criteria, unnecessary generic risks, and in fact, one often-used model replicates the requirements of textbook testing, from stress to systems integration.
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!