Package tlib :: Package base :: Module TestHelper |
[hide private]
[frames] | no frames]

# Source Code for Module tlib.base.TestHelper

      1  import os
      2  import socket
      3  import subprocess
      4  import pytest
      5  import logging
      6  import tempfile
      7
      8 -def tlib_folder():
      9      """
     10      Returns tlib's absolute path
     11      """
     12      file_folder = os.path.dirname(__file__)
     13      return os.path.abspath(os.path.join(file_folder, os.pardir))
     14
     15
     16 -def tlib_asset_folder():
     17      """
     18      Returns absolute path of tlib's asset folder
     19      """
     20      return os.path.abspath(os.path.join(tlib_folder(), "asset"))
     21
     22
     23 -def tlib_config_folder():
     24      """
     25      Returns absolute path of tlib's config folder
     26      """
     27      return os.path.abspath(os.path.join(tlib_folder(), "config"))
     28
     29
     30 -def tlib_template_folder():
     31      """
     32      Returns absolute path of tlib's template folder\n
     33      Template folder contains jinja templates used for generation of reports\n
     34      like screenshots
     35      """
     36      return os.path.abspath(os.path.join(tlib_folder(), "templates"))
     37
     38
     39 -def webdriver_chrome_executable():
     40      """
     41      Returns path to Chrome WebDriver executable
     42      """
     43      return os.path.join(tlib_asset_folder(), "selenium", "chromedriver.exe")
     44
     45
     46 -def webdriver_ie_executable():
     47      """
     48      Alias for webdriver_ie32_executable
     49      """
     50      return webdriver_ie32_executable();
     51
     52
     53 -def webdriver_ie32_executable():
     54      """
     55      Returns path to IE WebDriver executable
     56      """
     57      return os.path.join(tlib_asset_folder(), "selenium", "IE", "Win32_2.39.0", "IEDriverServer.exe")
     58
     59
     60 -def webdriver_ie64_executable():
     61      """
     62      Returns path to IE WebDriver executable
     63      """
     64      return os.path.join(tlib_asset_folder(), "selenium", "IE", "x64_2.39.0", "IEDriverServer.exe")
     65
     66
     67 -def android_server_apk():
     68      """
     69      Returns path to Webdriver for android
     70      """
     71      return os.path.join(tlib_asset_folder(), "selenium", "android-server-2.21.0.apk")
     72
     73
     74 -def is_valid_ip(ip):
     75      """
     76      Returns true if IP parameter is a valid IP address.\n
     77      Currently IPs in this format are valid:\n
     78      X.X.X.X\n
     79      X.X.X.X:PORT
     80
     81      @type ip: str
     82      @return: bool
     83      """
     84
     85      if ip is None:
     86          return False
     87
     88      try:
     89          (ip, port) = ip.split(":", 1)
     90      except ValueError:
     91          #There is no ':' in the string
     92          port = None
     93
     94      try:
     95          socket.inet_aton(ip)
     96      except socket.error:
     97          return False
     98
     99      if port is not None:
    100          try:
    101              return (int(port) >= 1) and (int(port) <= 65535)
    102          except ValueError:
    103              #Not a valid integer
    104              return False
    105
    106      return True
    107
    108 -def run_command(logger, command, fail_on_error=True):
    109      """
    110      Run a command and skip test if exit code is not 0
    111
    112      Example:
    113      Run 'adb devices' and don't skip test if commands returns non-zero status
    114      run_command(logger, ["adb", "devices"], fail_on_error=False)
    115
    116      @param logger: logger for debugging purposes
    117      @type logger: logging.logger
    118      @param command: Command to run
    119      @type command: list
    120      @param fail_on_error: When True, skip test if command returned a non-zero exit code
    121      @type fail_on_error: bool
    122      @rtype: list
    123      @return: Returns a list with stdout and stderr output
    124      """
    125
    126      fd_out = tempfile.NamedTemporaryFile(delete=True)
    127      #With delete = True option, the files will be automatically removed after close
    128      fd_err = tempfile.NamedTemporaryFile(delete=True)
    129      try:
    130          process = subprocess.Popen(command, stdout=fd_out, stderr=fd_err)
    131      except WindowsError as e:
    132          logger.error(r"Problem running command, skipping test.\n%s" % e)
    133          # noinspection PyUnresolvedReferences
    134          if fail_on_error:
    135              pytest.fail(r"Problem running command, skipping test.\n%s" % e)
    136
    137      # noinspection PyUnboundLocalVariable
    138      process.communicate()
    139      fd_out.seek(0)
    140      fd_err.seek(0)
    141      out = (fd_out.read(), fd_err.read())
    142      fd_out.close()
    143      fd_err.close()
    144      errcode = process.returncode
    145
    146      if (errcode != 0) and fail_on_error:
    147          logger.error(r"Program  exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out))
    148          # noinspection PyUnresolvedReferences
    149          pytest.fail(r"Program exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out))
    150
    151      return out
    152
    153 -def sort_list(l):
    154      """
    155      Sorts a list, and if the list has other objects inside, it will iterate over them
    156      @param l: list to sort
    157      @type l: list
    158      @return: sorted list
    159      @rtype: list
    160      """
    161      if type(l) is not list:
    162          pytest.fail("Parameter l is not a list")
    163
    164      for i, s in enumerate(l):
    165          if type(s) is list:
    166              l[i] = sort_list(s)
    167          if type(s) is dict:
    168              l[i] = sort_dict(s)
    169
    170      l.sort()
    171
    172      return l
    173
    174
    175 -def sort_dict(d):
    176      """
    177      Sorts a dictionary, and if the list has other objects inside, it will iterate over them
    178      @param d: dictionary to sort
    179      @type d: dict
    180      @return: sorted dictionary
    181      @rtype: dict
    182      """
    183      if type(d) is not dict:
    184          pytest.fail("Parameter d is not a dictionary")
    185
    186      for key in d.keys():
    187          if type(d[key]) is list:
    188              #Sort list
    189              d[key] = sort_list(d[key])
    190          elif type(d[key]) is dict:
    191              d[key] = sort_dict(d[key])
    192
    193      return d
    194