input: Write a function to generate a random password of length 8 characters, which contains at least one of each character type (lowercase, uppercase, digits, special characters). The function should use the defined character types and generate a random password accordingly.
  assert generate_random_password()
  assert generate_random_password()
  assert generate_random_password()
  assert generate_random_password()
  assert generate_random_password()
  
  Each assert should print a password that meets the criteria.
output: import random
  import string
  
  def generate_random_password():
      lowercase = string.ascii_lowercase
      uppercase = string.ascii_uppercase
      digits = string.digits
      special_chars = string.punctuation
      
      all_chars = lowercase + uppercase + digits + special_chars
      
      password = [
          random.choice(lowercase),
          random.choice(uppercase),
          random.choice(digits),
          random.choice(special_chars)
      ]
      
      password += random.choices(all_chars, k=4)
      
      random.shuffle(password)
      
      return ''.join(password)