def __init__(self, step): # 获取 baseurl baseurl = e.get(step['page'] + '-' + 'baseurl', True)[1] if not baseurl: self.baseurl = '' else: if not baseurl.endswith('/'): baseurl += '/' self.baseurl = baseurl self.r = requests.Session() # 获取 headers self.headers_get = e.get(step['page'] + '-' + 'headers_get', True)[1] self.headers_post = e.get(step['page'] + '-' + 'headers_post', True)[1]
def __init__(self, step): # 获取 baseurl el, baseurl = e.get(step['page'] + '-' + 'baseurl', True) if not baseurl: self.baseurl = '' else: if not baseurl.endswith('/'): baseurl += '/' self.baseurl = baseurl self.r = requests.Session() # 获取 headers el, headers = e.get(step['page'] + '-' + 'headers', True) if headers: self.r.headers.update(eval(headers))
def open(step): element = step['element'] value = e.get(element)[1] if step['data'].get('清理缓存', '') or step['data'].get('clear', ''): g.driver.delete_all_cookies() if step['data'].get('打开方式', '') == '新标签页' or step['data'].get('mode', '').lower() == 'tab': js = "window.open('%s')" % value g.driver.execute_script(js) # 判断是否打开了新的窗口,并将新窗口添加到所有窗口列表里 all_handles = g.driver.window_handles for handle in all_handles: if handle not in w.windows.values(): w.register(step, handle) else: if step['data'].get('打开方式', '') == '新浏览器' or step['data'].get('mode', '').lower() == 'browser': w.close() g.set_driver() w.init() g.driver.get(value) w.open(step) cookie = step['data'].get('cookie', '') if cookie: g.driver.add_cookie(json2dict(cookie)) co = g.driver.get_cookie(json2dict(cookie).get('name', '')) logger.info(f'cookie is add: {co}') sleep(0.5)
def locating_element(element, action='', text=''): el_location = None try: el, value = e.get(element) except: logger.exception( 'Locating the element:%s is Failure, no element in define' % element) raise Exception('Locating the element:%s is Failure, no element in define' % element) wait = WebDriverWait(g.driver, element_wait_timeout) if el['by'].lower() in ('title', 'url', 'current_url'): return None elif el['by'].lower() in ('alert'): if value.lower() in ('确认', 'accept'): g.driver.switch_to_alert().accept() elif value.lower() in ('取消', '关闭', 'cancel', 'close'): g.driver.switch_to_alert().dismiss() elif value.lower() in ('输入', 'input'): g.driver.switch_to_alert().send_keys(text) g.driver.switch_to_alert().accept() w.frame = 'Alert' return None elif action == 'CLICK': el_location = wait.until(EC.element_to_be_clickable( (getattr(By, el['by'].upper()), value))) else: el_location = wait.until(EC.presence_of_element_located( (getattr(By, el['by'].upper()), value))) return el_location
def _locating_element( element, waittime, action='', ): el_location = None try: el, value = e.get(element) except: logger.exception( 'Locating the element:%s is Failure, no element in define' % element) raise Exception( 'Locating the element:%s is Failure, no element in define' % element) wait = WebDriverWait(g.driver, waittime) if el['by'].lower() in ('title', 'url', 'current_url'): return None elif action == 'CLICK': el_location = wait.until( EC.element_to_be_clickable((getattr(By, el['by'].upper()), value))) else: logger.debug('locating the element %s' % value) el_location = wait.until( EC.presence_of_element_located((getattr(By, el['by'].upper()), value))) return el_location
def locating_element(element, action=''): el_location = None try: el, value = e.get(element) except: logger.exception( 'Locating the element:%s is Failure, no element in define' % element) raise Exception('Locating the element:%s is Failure, no element in define' % element) wait = WebDriverWait(g.driver, element_wait_timeout) if el['by'].lower() in ('title', 'url', 'current_url'): return None elif action == 'CLICK': el_location = wait.until(EC.element_to_be_clickable( (getattr(By, el['by'].upper()), value))) else: el_location = wait.until(EC.presence_of_element_located( (getattr(By, el['by'].upper()), value))) try: if g.driver.name in ('chrome', 'safari'): g.driver.execute_script( "arguments[0].scrollIntoViewIfNeeded(true)", el_location) else: g.driver.execute_script( "arguments[0].scrollIntoView(false)", el_location) except: pass return el_location
def request(kw, step): element = step['element'] el, url = e.get(element) if url.startswith('/'): url = url[1:] data = step['data'] data['headers'] = data.get('headers', '') data['data'] = data.get('data', '{}') expected = step['expected'] _status_code = data.get('status_code', '') _text = data.get('text', '') _json = data.get('json', '') expected['status_code'] = expected.get('status_code', _status_code) expected['text'] = expected.get('text', _text) expected['json'] = expected.get('json', _json) if not g.http.get(step['page']): g.http[step['page']] = Http(step) http = g.http[step['page']] logger.info('URL: \n%s' % http.baseurl + url) if data['headers']: http.r.headers.update(eval(data['headers'])) r = getattr(http.r, kw)(http.baseurl + url, data=eval(data['data'])) logger.info('Code: %s' % repr(r.status_code)) logger.info('Http result: %s' % repr(r.text)) if expected['status_code']: assert str(expected['status_code']) == str(r.status_code) if expected['text']: if expected['text'].startswith('*'): assert expected['text'][1:] in r.text else: assert expected['text'] == r.text if expected['json']: result = check(json.loads(expected['json']), r.json()) if result['result']: step['remark'] += str(result['result']) logger.info('expected result:\n%s' %result) assert result['code'] == 0 output = step['output'] if output: logger.info('output: %s' % repr(output)) for k, v in output.items(): if v == 'status_code': g.var[k] = r.status_code elif v == 'text': g.var[k] = r.text elif k == 'json': sub = output.get('json') result = check(json.loads(sub), r.json()) logger.info('output result:\n%s' %result) g.var = dict(g.var, **result['var'])
def sql(step): element = step['element'] _sql = e.get(element)[1] logger.info('SQL: %s' % repr(_sql)) # 获取连接参数 value = e.get(step['page'] + '-' + 'config')[1] arg = data_format(value) if step['page'] not in g.db.keys(): g.db[step['page']] = DB(arg) if _sql.lower().startswith('select'): row = g.db[step['page']].fetchone(_sql) logger.info('SQL result: %s' % repr(row)) if not row: raise Exception('*** Fetch None ***') else: g.db[step['page']].execute(_sql) result = {} if _sql.lower().startswith('select'): text = _sql[6:].split('FROM')[0].split('from')[0].strip() keys = dedup(text).split(',') for i, k in enumerate(keys): keys[i] = k.split(' ')[-1] result = dict(zip(keys, row)) logger.info('keys result: %s' % repr(result)) data = step['data'] if not data: data = step['expected'] if data: for key in data: sv, pv = data[key], result[key] logger.info('key: %s, expect: %s, real: %s' % (repr(key), repr(sv), repr(pv))) compare(sv, pv) output = step['output'] if output: logger.info('output: %s' % repr(output)) for key in output: g.var[key] = result[output[key]]
def sql(step): element = step['element'] el, _sql = e.get(element) logger.info('SQL: %s' % repr(_sql)) # 获取连接参数 el, value = e.get(step['page'] + '-' + 'config') arg = data_format(value) if step['page'] not in g.db.keys(): g.db[step['page']] = DB(arg) row = g.db[step['page']].fetchone(_sql) logger.info('SQL result: %s' % repr(row)) if not row: raise Exception('*** Fetch None ***') result = {} if _sql.lower().startswith('select'): keys = _sql[6:].split('FROM')[0].split('from')[0].strip().split(',') for i, k in enumerate(keys): keys[i] = k.split(' ')[-1] result = dict(zip(keys, row)) logger.info('keys result: %s' % repr(result)) data = step['data'] if data: for key in data: logger.info('key: %s, expect: %s, real: %s' % (repr(key), repr(data[key]), repr(result[key]))) if data[key].startswith('*'): assert data[key][1:] in result[key] else: assert data[key] == result[key] output = step['output'] if output: logger.info('output: %s' % repr(output)) for key in output: g.var[key] = result[output[key]]
def message(step): data = step['data'] text = data.get('text', '') element = step['element'] el, value = e.get(element) if value.lower() in ('确认', 'accept'): g.driver.switch_to_alert().accept() elif value.lower() in ('取消', '关闭', 'cancel', 'close'): g.driver.switch_to_alert().dismiss() elif value.lower() in ('输入', 'input'): g.driver.switch_to_alert().send_keys(text) g.driver.switch_to_alert().accept() logger.info('--- Switch Frame: Alert') w.frame = 'Alert'
def open(step): element = step['element'] el, value = e.get(element) if step['data'].get('清理缓存', '') or step['data'].get('cookie', ''): g.driver.delete_all_cookies() if step['data'].get('打开方式', '') == '新标签页' or step['data'].get('mode', '').lower() == 'tab': js = "window.open('%s')" % value g.driver.execute_script(js) # 判断是否打开了新的窗口,并将新窗口添加到所有窗口列表里 all_handles = g.driver.window_handles for handle in all_handles: if handle not in w.windows.values(): w.register(step, handle) else: if step['data'].get('打开方式', '') == '新浏览器' or step['data'].get('mode', '').lower() == 'browser': w.close() g.set_driver() w.init() g.driver.get(value) w.open(step) sleep(0.5)
def script(step): element = step['element'] el, value = e.get(element) g.driver.execute_script(value)
def request(kw, step): element = step['element'] url = e.get(element)[1] if url.startswith('/'): url = url[1:] data = step['data'] # 测试数据解析时,会默认添加一个 text 键,需要删除 if 'text' in data and not data['text']: data.pop('text') _data = {} _data['headers'] = json2dict(data.pop('headers', '{}')) if data.get('cookies'): data['cookies'] = json2dict(data['cookies']) if kw == 'get': _data['params'] = json2dict(data.pop('params', '{}')) or json2dict( data.pop('data', '{}')) elif kw == 'post': if data.get('text'): _data['data'] = data.pop('text') else: _data['data'] = json2dict(data.pop('data', '{}')) _data['json'] = json2dict(data.pop('json', '{}')) _data['files'] = eval(data.pop('files', 'None')) elif kw in ('put', 'patch'): _data['data'] = json2dict(data.pop('data', '{}')) for k in data: for s in ('{', '[', 'False', 'True'): if s in data[k]: try: data[k] = eval(data[k]) except: logger.warning('Try eval data failure: %s' % data[k]) break expected = step['expected'] expected['status_code'] = expected.get('status_code', None) expected['text'] = expected.get('text', None) expected['json'] = json2dict(expected.get('json', '{}')) expected['cookies'] = json2dict(expected.get('cookies', '{}')) expected['headers'] = json2dict(expected.get('headers', '{}')) timeout = float(expected.get('timeout', 10)) expected['time'] = float(expected.get('time', 0)) if not g.http.get(step['page']): g.http[step['page']] = Http(step) http = g.http[step['page']] if kw == 'post': if http.headers_post: http.r.headers.update(eval(http.headers_post)) else: if http.headers_get: http.r.headers.update(eval(http.headers_get)) logger.info('URL: %s' % http.baseurl + url) # 处理 before_send before_send = data.pop('before_send', '') if before_send: _data, data = getattr(http_handle, before_send)(kw, _data, data) else: _data, data = getattr(http_handle, 'before_send')(kw, _data, data) if _data['headers']: for k in [x for x in _data['headers']]: if not _data['headers'][k]: del http.r.headers[k] del _data['headers'][k] http.r.headers.update(_data['headers']) if kw == 'get': r = getattr(http.r, kw)(http.baseurl + url, params=_data['params'], timeout=timeout, **data) if _data['params']: logger.info(f'PARAMS: {_data["params"]}') elif kw == 'post': r = getattr(http.r, kw)(http.baseurl + url, data=_data['data'], json=_data['json'], files=_data['files'], timeout=timeout, **data) logger.info(f'BODY: {r.request.body}') elif kw in ('put', 'patch'): r = getattr(http.r, kw)(http.baseurl + url, data=_data['data'], timeout=timeout, **data) logger.info(f'BODY: {r.request.body}') elif kw in ('delete', 'options'): r = getattr(http.r, kw)(http.baseurl + url, timeout=timeout, **data) logger.info('status_code: %s' % repr(r.status_code)) try: # json 响应 logger.info('response json: %s' % repr(r.json())) except: # 其他响应 logger.info('response text: %s' % repr(r.text)) response = { 'status_code': r.status_code, 'headers': r.headers, '_cookies': r.cookies, 'content': r.content, 'text': r.text } try: response['cookies'] = requests.utils.dict_from_cookiejar(r.cookies) except: response['cookies'] = r.cookies try: j = r.json() response['json'] = j except: response['json'] = {} # 处理 after_receive after_receive = expected.pop('after_receive', '') if after_receive: response = getattr(http_handle, after_receive)(response) else: response = getattr(http_handle, 'after_receive')(response) var = {} # 存储所有输出变量 if expected['status_code']: if str(expected['status_code']) != str(response['status_code']): raise Exception( f'status_code | EXPECTED:{repr(expected["status_code"])}, REAL:{repr(response["status_code"])}' ) if expected['text']: if expected['text'].startswith('*'): if expected['text'][1:] not in response['text']: raise Exception( f'text | EXPECTED:{repr(expected["text"])}, REAL:{repr(response["text"])}' ) else: if expected['text'] == response['text']: raise Exception( f'text | EXPECTED:{repr(expected["text"])}, REAL:{repr(response["text"])}' ) if expected['headers']: result = check(expected['headers'], response['headers']) logger.info('headers check result: %s' % result) if result['code'] != 0: raise Exception( f'headers | EXPECTED:{repr(expected["headers"])}, REAL:{repr(response["headers"])}, RESULT: {result}' ) elif result['var']: var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('headers var: %s' % (repr(result['var']))) if expected['cookies']: logger.info('response cookies: %s' % response['cookies']) result = check(expected['cookies'], response['cookies']) logger.info('cookies check result: %s' % result) if result['code'] != 0: raise Exception( f'cookies | EXPECTED:{repr(expected["cookies"])}, REAL:{repr(response["cookies"])}, RESULT: {result}' ) elif result['var']: var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('cookies var: %s' % (repr(result['var']))) if expected['json']: result = check(expected['json'], response['json']) logger.info('json check result: %s' % result) if result['code'] != 0: raise Exception( f'json | EXPECTED:{repr(expected["json"])}, REAL:{repr(response["json"])}, RESULT: {result}' ) elif result['var']: var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('json var: %s' % (repr(result['var']))) if expected['time']: if expected['time'] < r.elapsed.total_seconds(): raise Exception( f'time | EXPECTED:{repr(expected["time"])}, REAL:{repr(r.elapsed.total_seconds())}' ) output = step['output'] # if output: # logger.info('output: %s' % repr(output)) for k, v in output.items(): if v == 'status_code': g.var[k] = response['status_code'] logger.info('%s: %s' % (k, repr(g.var[k]))) elif v == 'text': g.var[k] = response['text'] logger.info('%s: %s' % (k, repr(g.var[k]))) elif k == 'json': sub = json2dict(output.get('json', '{}')) result = check(sub, response['json']) # logger.info('Compare json result: %s' % result) var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('json var: %s' % (repr(result['var']))) elif k == 'cookies': sub = json2dict(output.get('cookies', '{}')) result = check(sub, response['cookies']) # logger.info('Compare json result: %s' % result) var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('cookies var: %s' % (repr(result['var']))) if var: step['_output'] += '\n||output=' + str(var)
def sql(step): response = {} element = step['element'] _sql = e.get(element)[1] logger.info('SQL: %s' % repr(_sql)) # 获取连接参数 value = e.get(step['page'] + '-' + 'config')[1] arg = data_format(value) if step['page'] not in g.db.keys(): g.db[step['page']] = DB(arg) if _sql.lower().startswith('select'): row = g.db[step['page']].fetchone(_sql) logger.info('SQL response: %s' % repr(row)) if not row: raise Exception('*** Fetch None ***') elif _sql.lower().startswith('db.'): _sql_ = _sql.split('.', 2) collection = _sql_[1] sql = _sql_[2] response = g.db[step['page']].mongo(collection, sql) if response: logger.info('find result: %s' % repr(response)) else: g.db[step['page']].execute(_sql) if _sql.lower().startswith('select'): text = _sql[6:].split('FROM')[0].split('from')[0].strip() keys = dedup(text).split(',') for i, k in enumerate(keys): keys[i] = k.split(' ')[-1] response = dict(zip(keys, row)) logger.info('select result: %s' % repr(response)) expected = step['data'] if not expected: expected = step['expected'] if 'json' in expected: expected['json'] = json2dict(expected.get('json', '{}')) result = check(expected.pop('json'), response['json']) logger.info('json check result: %s' % result) if result['code'] != 0: raise Exception(f'json | EXPECTED:{repr(expected["json"])}, REAL:{repr(response["json"])}, RESULT: {result}') elif result['var']: var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('json var: %s' % (repr(result['var']))) if expected: for key in expected: sv, pv = expected[key], response[key] logger.info('key: %s, expect: %s, real: %s' % (repr(key), repr(sv), repr(pv))) compare(sv, pv) output = step['output'] if output: _output = {} for k, v in output.items(): if k == 'json': sub = json2dict(output.get('json', '{}')) result = check(sub, response['json']) # logger.info('Compare json result: %s' % result) var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('json var: %s' % (repr(result['var']))) else: _output[k] = response[v] g.var[k] = response[v] logger.info('output: %s' % repr(_output))
def request(kw, step): element = step['element'] el, url = e.get(element) if url.startswith('/'): url = url[1:] data = step['data'] _data = {} _data['headers'] = json2dict(data.pop('headers', '{}')) if data.get('cookies'): data['cookies'] = json2dict(data['cookies']) if kw == 'get': _data['params'] = json2dict(data.pop('params', '{}')) or json2dict( data.pop('data', '{}')) elif kw == 'post': _data['data'] = json2dict(data.pop('data', '{}')) _data['json'] = json2dict(data.pop('json', '{}')) _data['files'] = eval(data.pop('files', 'None')) elif kw in ('put', 'patch'): _data['data'] = json2dict(data.pop('data', '{}')) for k in data: for s in ('{', '[', 'False', 'True'): if s in data[k]: try: data[k] = eval(data[k]) except Exception as exception: logger.warning('Try eval data fail: %s' % data[k]) break expected = step['expected'] expected['status_code'] = expected.get('status_code', None) expected['text'] = expected.get('text', None) expected['json'] = json2dict(expected.get('json', '{}')) expected['cookies'] = json2dict(expected.get('cookies', '{}')) expected['headers'] = json2dict(expected.get('headers', '{}')) if not g.http.get(step['page']): g.http[step['page']] = Http(step) http = g.http[step['page']] if kw == 'post': if http.headers_post: http.r.headers.update(eval(http.headers_post)) else: if http.headers_get: http.r.headers.update(eval(http.headers_get)) logger.info('URL: %s' % http.baseurl + url) # 处理 before_send before_send = data.pop('before_send', '') if before_send: _data, data = getattr(http_handle, before_send)(kw, _data, data) else: _data, data = getattr(http_handle, 'before_send')(kw, _data, data) if _data['headers']: for k in [x for x in _data['headers']]: if not _data['headers'][k]: del http.r.headers[k] del _data['headers'][k] http.r.headers.update(_data['headers']) if kw == 'get': r = getattr(http.r, kw)(http.baseurl + url, params=_data['params'], **data) elif kw == 'post': r = getattr(http.r, kw)(http.baseurl + url, data=_data['data'], json=_data['json'], files=_data['files'], **data) elif kw in ('put', 'patch'): r = getattr(http.r, kw)(http.baseurl + url, data=_data['data'], **data) elif kw in ('delete', 'options'): r = getattr(http.r, kw)(http.baseurl + url, **data) logger.info('status_code: %s' % repr(r.status_code)) try: # json 响应 logger.info('response json: %s' % repr(r.json())) except: # 其他响应 logger.info('response text: %s' % repr(r.text)) response = { 'status_code': r.status_code, 'headers': r.headers, '_cookies': r.cookies, 'content': r.content, 'text': r.text } try: response['cookies'] = requests.utils.dict_from_cookiejar(r.cookies) except: response['cookies'] = r.cookies try: j = r.json() response['json'] = j except: response['json'] = {} # 处理 after_receive after_receive = expected.pop('after_receive', '') if after_receive: response = getattr(http_handle, after_receive)(response) else: response = getattr(http_handle, 'after_receive')(response) if expected['status_code']: assert str(expected['status_code']) == str(response['status_code']) if expected['text']: if expected['text'].startswith('*'): assert expected['text'][1:] in response['text'] else: assert expected['text'] == response['text'] if expected['headers']: result = check(expected['headers'], response['headers']) if result['result']: step['remark'] += str(result['result']) logger.info('headers check result: %s' % result) assert result['code'] == 0 if expected['cookies']: logger.info('response cookies: %s' % response['cookies']) result = check(expected['cookies'], response['cookies']) if result['result']: step['remark'] += str(result['result']) logger.info('cookies check result: %s' % result) assert result['code'] == 0 if expected['json']: result = check(expected['json'], response['json']) if result['result']: step['remark'] += str(result['result']) logger.info('json check result: %s' % result) assert result['code'] == 0 output = step['output'] # if output: # logger.info('output: %s' % repr(output)) for k, v in output.items(): if v == 'status_code': g.var[k] = response['status_code'] logger.info('%s: %s' % (k, repr(g.var[k]))) elif v == 'text': g.var[k] = response['text'] logger.info('%s: %s' % (k, repr(g.var[k]))) elif k == 'json': sub = json2dict(output.get('json', '{}')) result = check(sub, response['json']) # logger.info('Compare json result: %s' % result) g.var = dict(g.var, **result['var']) logger.info('json var: %s' % (repr(result['var']))) elif k == 'cookies': sub = json2dict(output.get('cookies', '{}')) result = check(sub, response['cookies']) # logger.info('Compare json result: %s' % result) g.var = dict(g.var, **result['var']) logger.info('cookies var: %s' % (repr(result['var'])))
def request(kw, step): element = step['element'] el, url = e.get(element) if url.startswith('/'): url = url[1:] data = step['data'] _data = {} _data['headers'] = eval(data.pop('headers', 'None')) if kw == 'get': _data['params'] = eval(data.pop('params', 'None')) or eval( data.pop('data', 'None')) elif kw == 'post': _data['data'] = eval(data.pop('data', 'None')) _data['json'] = eval(data.pop('json', 'None')) _data['files'] = eval(data.pop('files', 'None')) elif kw in ('put', 'patch'): _data['data'] = eval(data.pop('data', 'None')) for k in data: for s in ('{', '[', 'False', 'True'): if s in data[k]: try: data[k] = eval(data[k]) except Exception as exception: logger.warning('Try eval data fail: %s' % data[k]) break expected = step['expected'] expected['status_code'] = expected.get('status_code', None) expected['text'] = expected.get('text', None) expected['json'] = expected.get('json', None) if not g.http.get(step['page']): g.http[step['page']] = Http(step) http = g.http[step['page']] if kw == 'post': if http.headers_post: http.r.headers.update(eval(http.headers_post)) else: if http.headers_get: http.r.headers.update(eval(http.headers_get)) logger.info('URL: %s' % http.baseurl + url) if _data['headers']: for k in [x for x in _data['headers']]: if not _data['headers'][k]: del http.r.headers[k] del _data['headers'][k] http.r.headers.update(_data['headers']) if kw == 'get': r = getattr(http.r, kw)(http.baseurl + url, params=_data['params'], **data) elif kw == 'post': r = getattr(http.r, kw)(http.baseurl + url, data=_data['data'], json=_data['json'], files=_data['files'], **data) elif kw in ('put', 'patch'): r = getattr(http.r, kw)(http.baseurl + url, data=_data['params'], **data) elif kw in ('delete', 'options'): r = getattr(http.r, kw)(http.baseurl + url, **data) logger.info('Code: %s' % repr(r.status_code)) logger.info('Http result: %s' % repr(r.text)) if expected['status_code']: assert str(expected['status_code']) == str(r.status_code) if expected['text']: if expected['text'].startswith('*'): assert expected['text'][1:] in r.text else: assert expected['text'] == r.text if expected['json']: result = check(json.loads(expected['json']), r.json()) if result['result']: step['remark'] += str(result['result']) logger.info('Compare json result:\n%s' % result) assert result['code'] == 0 output = step['output'] if output: logger.info('output: %s' % repr(output)) for k, v in output.items(): if v == 'status_code': g.var[k] = r.status_code elif v == 'text': g.var[k] = r.text elif k == 'json': sub = output.get('json') result = check(json.loads(sub), r.json()) logger.info('Output data:\n%s' % result) g.var = dict(g.var, **result['var'])
def open(step): element = step['elements'][0] el, value = e.get(element) g.driver.get(value) w.open(step) sleep(0.5)
def sql(step): element = step['element'] el, _sql = e.get(element) logger.info('SQL: %s' % repr(_sql)) # 获取连接参数 el, value = e.get(step['page'] + '-' + 'config') arg = data_format(value) if step['page'] not in g.db.keys(): g.db[step['page']] = DB(arg) if _sql.lower().startswith('select'): row = g.db[step['page']].fetchone(_sql) logger.info('SQL result: %s' % repr(row)) if not row: raise Exception('*** Fetch None ***') else: g.db[step['page']].execute(_sql) result = {} if _sql.lower().startswith('select'): keys = _sql[6:].split('FROM')[0].split('from')[0].strip().split(',') for i, k in enumerate(keys): keys[i] = k.split(' ')[-1] result = dict(zip(keys, row)) logger.info('keys result: %s' % repr(result)) data = step['data'] if not data: data = step['expected'] if data: for key in data: sv, pv = data[key], result[key] logger.info('key: %s, expect: %s, real: %s' % (repr(key), repr(sv), repr(pv))) compare(sv, pv) # if isinstance(sv, str): # # if sv.startswith('#'): # assert sv[1:] != str(pv) # # assert isinstance(pv, str) # # if sv.startswith('*'): # assert sv[1:] in pv # # elif sv.startswith('^'): # assert pv.startswith(sv[1:]) # # elif sv.startswith('$'): # assert pv.endswith(sv[1:]) # # elif sv.startswith('\\'): # sv = sv[1:] # # assert sv == pv # # elif isinstance(sv, int): # assert isinstance(pv, int) # assert sv == pv # # elif isinstance(sv, float): # assert absisinstance(pv, float) # assert sv == pv # # else: # assert sv == pv output = step['output'] if output: logger.info('output: %s' % repr(output)) for key in output: g.var[key] = result[output[key]]