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