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