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