def search(self, data): """ :param data: :return: """ filter = {'enable': 0} if 'team' in data and data['team']: filter.setdefault('team', data.get('team')) if 'owner' in data and data['owner']: filter.setdefault('owner', data.get('owner')) try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 results = KeywordModel.query.filter_by(**filter) \ .offset(offset).limit(limit) results = query_to_dict(results) count = KeywordModel.query.filter_by(**filter).count() return count, results
def search(self, data): """ type=team&team=team1 limit=10&skip=0&type=team NOTE: 有两种传参查询方式,需要多data做相应处理 :param data: :return: """ filter = {'enable': 0} if 'team' in data and data['team']: filter.setdefault('team', data.get('team')) if 'owner' in data and data['owner']: filter.setdefault('owner', data.get('owner')) try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 results = TeamModel.query.filter_by(**filter).order_by( TeamModel.created.desc()).offset(offset).limit(limit) results = query_to_dict(results) count = TeamModel.query.filter_by(**filter).count() return count, results
def search(self, data): """ :param data: :return: """ filter = {'enable': 0} if 'team' in data and data['team']: filter.setdefault('team', data.get('team')) if 'project' in data and data['project']: filter.setdefault('project', data.get('project')) try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 results = TaskModel.query.filter_by(**filter).order_by( TaskModel.created.desc()).offset(offset).limit(limit) results = query_to_dict(results) count = TaskModel.query.filter_by(**filter).count() return count, results
def search(self, data): """ :param data: :return: """ filter = {'enable': 0} # 如果按照id查询则返回唯一的数据或None if 'id' in data and data['id']: filter.setdefault('id', data.get('id')) result = MockModel.query.get(data['id']) count = 1 if result else 0 result = result.to_dict() if result else None return count, result try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 results = MockModel.query.filter_by(**filter).order_by( MockModel.created.desc()).offset(offset).limit(limit) results = query_to_dict(results) count = MockModel.query.filter_by(**filter).count() return count, results
def _get_summary(self): filter = {'enable': 0} summary = dict() obj = self._get_subclasses if 'TeamModel' in obj: # a = obj['TeamModel'].query.filter_by(**filter).count(distinct(obj['TeamModel'].project)) # print(a) # b = db.session.query(func.count(distinct(obj['TeamModel'].project))).scalar() # print(b) # 后续再研究更改为更优雅的写法(SQL直接查询) res = query_to_dict( obj['TeamModel'].query.filter_by(**filter).all()) team = [key['team'] for key in res] project = [key['project'] for key in res] team_count = len(set(team)) project_count = len(set(project)) summary.setdefault('team', team_count) summary.setdefault('project', project_count) if 'InterfaceModel' in obj: interface_count = obj['InterfaceModel'].query.filter_by( **filter).count() summary.setdefault('interface', interface_count) if 'VariableModel' in obj: variable_count = obj['VariableModel'].query.filter_by( **filter).count() summary.setdefault('variable', variable_count) if 'KeywordModel' in obj: keyword_count = obj['KeywordModel'].query.filter_by( **filter).count() summary.setdefault('keyword', keyword_count) if 'SuiteModel' in obj: suite_count = obj['SuiteModel'].query.filter_by(**filter).count() summary.setdefault('suite', suite_count) return summary
def _load_keywords(self, classify): """ :param classify: :return: """ filter = {'enable': 0, 'classify': classify} keywords = KeywordModel.query.filter_by(**filter).all() return query_to_dict(keywords)
def load_default_variable(self): """ :return: """ # 加载通过变量设置页面预置的变量数据。 filter = {'team': self.team, 'project': self.project} default = VariableModel.query.filter_by(**filter).all() return query_to_dict(default)
def search(self, data): """ :param data: :return: """ filter = {'enable': 0} # 如果按照id查询则返回唯一的数据或None if 'id' in data and data['id']: filter.setdefault('id', data.get('id')) result = InterfaceModel.query.get(data['id']) count = 1 if result else 0 result = result.to_dict() if result else None return count, result if 'team' in data and data['team']: filter.setdefault('team', data.get('team')) if 'project' in data and data['project']: filter.setdefault('project', data.get('project')) try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 if 'caseName' in data and data['caseName']: results = InterfaceModel.query.filter_by(**filter).filter( InterfaceModel.name.like('%' + data['caseName'] + '%') ).order_by( InterfaceModel.created.desc()).offset(offset).limit(limit) else: results = InterfaceModel.query.filter_by(**filter).order_by( InterfaceModel.created.desc()).offset(offset).limit(limit) results = query_to_dict(results) for result in results: if result['status'] == None: result['status'] = True if 'caseName' in data and data['caseName']: count = InterfaceModel.query.filter_by(**filter).filter( InterfaceModel.name.like('%' + data['caseName'] + '%')).count() else: count = InterfaceModel.query.filter_by(**filter).count() return count, results
def search(self, data): """ :param data: :return: """ filter = {'enable': 0} # 如果按照id查询则返回唯一的数据或None if ('sid' in data and data['sid']) and ('cid' in data and data['cid']): filter.setdefault('sid', data.get('sid')) filter.setdefault('cid', data.get('cid')) result = HistoryModel.query.filter( and_(HistoryModel.sid == data['sid'], HistoryModel.cid == data['cid'])).first() count = 1 if result else 0 result = result.to_dict() if result else None return count, result if 'team' in data and data['team']: filter.setdefault('team', data.get('team')) if 'project' in data and data['project']: filter.setdefault('project', data.get('project')) try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 results = HistoryModel.query.filter_by(**filter).order_by( HistoryModel.created.desc()).offset(offset).limit(limit) results = query_to_dict(results) count = HistoryModel.query.filter_by(**filter).count() return count, results
def search(self, data): """ :param data: :return: """ filter = {'enable': 0, **data} try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 results = DashboardModel.query.filter_by(**filter).order_by( DashboardModel.created.desc()).offset(offset).limit(limit) results = query_to_dict(results) count = DashboardModel.query.filter_by(**filter).count() return count, results
def search(self, data): """ :param data: :return: """ filter = {'enable': 0} if 'team' in data and data['team']: filter.setdefault('team', data.get('team')) if 'project' in data and data['project']: filter.setdefault('project', data.get('project')) try: offset = int(data.get('offset', 0)) except TypeError: offset = 0 try: limit = int(data.get('limit', 10)) except TypeError: limit = 10 results = SuiteModel.query.filter_by(**filter).order_by( SuiteModel.created.desc()).offset(offset).limit(limit) results = query_to_dict(results) # 禁用功能兼容1.0版本,历史数据为null for result in results: if result['status'] == None: result['status'] = True count = SuiteModel.query.filter_by(**filter).count() return count, results
class Executor(): def __init__(self, type='trigger', log='default'): self.variables = [] self.status = 0 self.message = 'ok' self.type = type self.start = 0 self.end = 0 self.result = {} # 记录运行状态与相关数据。 self.interface = { 'verify': 0, 'passed': 0, 'failed': 0, 'error': 0, 'sikped': 0, 'total': 0, 'percent': 0.0, } file = os.path.join(os.getcwd(), 'logs', '{}.log'.format(log)) self.logger = logging.getLogger(__name__) self.logger.setLevel(logging.DEBUG) handler = logging.FileHandler(file) handler.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(filename)s - %(funcName)s - %(lineno)d - %(message)s' ) handler.setFormatter(formatter) self.logger.addHandler(handler) def replace_variable(self, case, data): """ # 这里对请求数据进行变量替换,将变量替换为具体值。 # 变量和其值可以在"配置管理 -> 全局变量"里设置。 # 目前支持host,header与param的变量替换。 # 变量与值存储使用团队与项目进行区分,不同的团队与项目允许出现同名变量。 :param case: :param data: :return: """ self.logger.info("[{}]接口测试第1步,变量替换".format(case['name'])) filter = {'team': case.get('team'), 'project': case.get('project')} results = VariableModel.query.filter_by(**filter).all() self.logger.info("查找预定义变量,查找条件[{}]".format(filter)) variable = { 'extract': self.variables, 'trigger': data.get('variables', []), 'default': query_to_dict(results), } self.logger.info("变量查找成功,预定义变量{}".format(variable['default'])) self.logger.info("变量查找成功,触发时变量{}".format(variable['trigger'])) self.logger.info("变量查找成功,运行时变量{}".format(variable['extract'])) self.logger.info("域名替换前[{}]".format(case.get('host'))) case['host'] = derivation(case.get('host'), variable) self.logger.info("域名替换后[{}]".format(case.get('host'))) self.logger.info("路径替换前[{}]".format(case.get('path'))) case['path'] = derivation(case.get('path'), variable) self.logger.info("路径替换后[{}]".format(case.get('path'))) if 'header' in case: self.logger.info("请求头替换前[{}]".format(case.get('header'))) for header in case['header']: header['value'] = derivation(header['value'], variable) self.logger.info("请求头换后[{}]".format(case.get('header'))) if 'params' in case: self.logger.info("请求参数替换前[{}]".format(case.get('params'))) for param in case['params']: param['value'] = derivation(param['value'], variable) self.logger.info("请求参数换后[{}]".format(case.get('params'))) if 'body' in case: self.logger.info("请求体替换前[{}]".format(case.get('body'))) if case['body']['mode'] in ['formdata', 'urlencoded']: for param in case['body']['data']: param['value'] = derivation(param['value'], variable) elif case['body']['mode'] in ['file']: pass else: """ # 这是"expected string or bytes-like object"问题的一个临时解决方案。 # 原因是当body数据类型为raw,数据为json时,view层接收数据时自动将其转为 # python对象,因此这里进行derivation会报错。 """ if isinstance(case['body']['data'], (list, )): for param in case['body']['data']: param['value'] = derivation(param['value'], variable) else: case['body']['data'] = derivation(case['body']['data'], variable)