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