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  _author__ = 'Andres Osorio' 
  9   
10 -def tlib_folder():
11 """ 12 Returns tlib's absolute path 13 """ 14 file_folder = os.path.dirname(__file__) 15 return os.path.abspath(os.path.join(file_folder, os.pardir))
16 17
18 -def tlib_asset_folder():
19 """ 20 Returns absolute path of tlib's asset folder 21 """ 22 return os.path.abspath(os.path.join(tlib_folder(), "asset"))
23 24
25 -def tlib_config_folder():
26 """ 27 Returns absolute path of tlib's config folder 28 """ 29 return os.path.abspath(os.path.join(tlib_folder(), "config"))
30 31
32 -def tlib_template_folder():
33 """ 34 Returns absolute path of tlib's template folder\n 35 Template folder contains jinja templates used for generation of reports\n 36 like screenshots 37 """ 38 return os.path.abspath(os.path.join(tlib_folder(), "templates"))
39 40
41 -def webdriver_chrome_executable():
42 """ 43 Returns path to Chrome WebDriver executable 44 """ 45 return os.path.join(tlib_asset_folder(), "selenium", "chromedriver.exe")
46 47
48 -def webdriver_ie_executable():
49 """ 50 Returns path to IE WebDriver executable 51 """ 52 return os.path.join(tlib_asset_folder(), "selenium", "IEDriverServer.exe")
53 54
55 -def android_server_apk():
56 """ 57 Returns path to Webdriver for android 58 """ 59 return os.path.join(tlib_asset_folder(), "selenium", "android-server-2.21.0.apk")
60 61
62 -def is_valid_ip(ip):
63 """ 64 Returns true if IP parameter is a valid IP address.\n 65 Currently IPs in this format are valid:\n 66 X.X.X.X\n 67 X.X.X.X:PORT 68 69 @type ip: str 70 @return: bool 71 """ 72 73 if ip is None: 74 return False 75 76 try: 77 (ip, port) = ip.split(":", 1) 78 except ValueError: 79 #There is no ':' in the string 80 port = None 81 82 try: 83 socket.inet_aton(ip) 84 except socket.error: 85 return False 86 87 if port is not None: 88 try: 89 return (int(port) >= 1) and (int(port) <= 65535) 90 except ValueError: 91 #Not a valid integer 92 return False 93 94 return True
95
96 -def run_command(logger, command, fail_on_error=True):
97 """ 98 Run a command and skip test if exit code is not 0 99 100 Example: 101 Run 'adb devices' and don't skip test if commands returns non-zero status 102 run_command(logger, ["adb", "devices"], fail_on_error=False) 103 104 @param logger: logger for debugging purposes 105 @type logger: logging.logger 106 @param command: Command to run 107 @type command: list 108 @param fail_on_error: When True, skip test if command returned a non-zero exit code 109 @type fail_on_error: bool 110 @rtype: list 111 @return: Returns a list with stdout and stderr output 112 """ 113 114 fd_out = tempfile.NamedTemporaryFile(delete=True) 115 #With delete = True option, the files will be automatically removed after close 116 fd_err = tempfile.NamedTemporaryFile(delete=True) 117 try: 118 process = subprocess.Popen(command, stdout=fd_out, stderr=fd_err) 119 except WindowsError as e: 120 logger.error(r"Problem running command, skipping test.\n%s" % e) 121 # noinspection PyUnresolvedReferences 122 if fail_on_error: 123 pytest.skip(r"Problem running command, skipping test.\n%s" % e) 124 125 # noinspection PyUnboundLocalVariable 126 process.communicate() 127 fd_out.seek(0) 128 fd_err.seek(0) 129 out = (fd_out.read(), fd_err.read()) 130 fd_out.close() 131 fd_err.close() 132 errcode = process.returncode 133 134 if (errcode != 0) and fail_on_error: 135 logger.error(r"Program exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out)) 136 # noinspection PyUnresolvedReferences 137 pytest.skip(r"Program exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out)) 138 139 return out
140