Пример #1
0
import lyrebird
from lyrebird import log
from lyrebird import application
from lyrebird.mock import context
from lyrebird.base_server import ThreadServer

from .event import event
from .on_request import on_request
from .on_request_upstream import on_request_upstream
from .on_response import on_response
from .on_response_upstream import on_response_upstream
from .encoder import encoder
from .decoder import decoder


logger = log.get_logger()

scripts_tmp_storage = {}

TYPE_EVENT = 'event'
TYPE_ON_REQUEST = 'on_request'
TYPE_ON_REQUEST_UPSTREAM = 'on_request_upstream'
TYPE_ON_RESPONSE = 'on_response'
TYPE_ON_RESPONSE_UPSTREAM = 'on_response_upstream'
TYPE_ENCODER = 'encoder'
TYPE_DECODER = 'decoder'

FUNC_MAP_HANDLERS = {
    TYPE_EVENT: event,
    TYPE_ON_REQUEST: on_request,
    TYPE_ON_REQUEST_UPSTREAM: on_request_upstream,
Пример #2
0
import os
import json
import time
import codecs
import plistlib
import tempfile
import subprocess
from pathlib import Path
from packaging import version
import lyrebird
from lyrebird.log import get_logger
from . import wda_helper

_log = get_logger()

ideviceinstaller = None
idevice_id = None
idevicescreenshot = None
ideviceinfo = None

root = os.path.dirname(__file__)
model_json = os.path.abspath(os.path.join(root, 'config/comparison_table_model.json'))
storage = lyrebird.get_plugin_storage()
screenshot_dir = os.path.abspath(os.path.join(storage, 'screenshot'))

PLIST_PATH = os.path.join(storage, 'plist')
SYSTEM_BIN = Path('/usr/local/bin')

ios_driver = wda_helper.Helper()

def check_environment():
Пример #3
0
import time
import codecs
import shutil
import datetime
import traceback
from pathlib import Path
from jinja2 import Template
from urllib.parse import urlparse
from collections import OrderedDict
from lyrebird import utils, application
from lyrebird.log import get_logger
from lyrebird.application import config
from lyrebird.mock.dm.jsonpath import jsonpath

PROP_FILE_NAME = '.lyrebird_prop'
logger = get_logger()


class DataManager:
    def __init__(self):
        self.root_path: Path = None
        self.display_data_map = {}
        self.id_map = {}
        self.activated_data = OrderedDict()
        self.activated_group = {}
        self.LEVEL_SUPER_ACTIVATED = 3
        self.clipboard = None
        self.save_to_group_id = None
        self.tmp_group = {
            'id': 'tmp_group',
            'type': 'group',
Пример #4
0
from pathlib import Path
import codecs
import json
from packaging import version
from urllib.parse import urlparse
import requests
import subprocess
import time
import shutil
import jinja2
import json
import os
from lyrebird import log as nlog

logger = nlog.get_logger()

config_template = {
    "version": "0.10.5",
    "proxy.filters": [],
    "proxy.port": 4272,
    "mock.port": 9090,
    "mock.data": "{{current_dir}}/mock_data/personal",
    "mock.proxy_headers": {
        "scheme": "MKScheme",
        "host": "MKOriginHost",
        "port": "MKOriginPort"
    }
}


class ConfigManager():
    def handle(self, handler_context: HandlerContext):
        # UI自动化等需要mock的手段orgin url 需要调用这个方法
        org_url = handler_context.get_origin_url()
        if not org_url:
            org_url = handler_context.request.url
        short_url = org_url.replace('http://', '').replace('https://',
                                                           '').split('?')[0]
        # format之后的真正PATH,处理{num}这样的情况,emit给前端,做刷新table用,同时处理成小写
        path = format_url.format_api(short_url).lower()
        # 获取handler_context.id,为前端展开看详情准备
        path_id = handler_context.id
        device_ip = handler_context.request.headers.get('lyrebird.device.ip')

        # 当请求过来的时候,base还没有init,需要进行init处理
        if not app_context.base_list:
            base_dict = BaseDataHandler().get_base_source()
            if isinstance(base_dict, Response):
                get_logger().error('API-Coverage base file is None.')
            else:
                mergeAlgorithm.first_result_handler(base_dict)

        if path in app_context.base_list:
            # merge到 context merge list中
            mergeAlgorithm.merge_handler_new(path, path_id)
            # 在base里的需要去计算下覆盖率
            mergeAlgorithm.coverage_handler()
            # path传给覆盖详情表格
            lyrebird.emit('test_data message', path, namespace='/api_coverage')
            # 如果设备信息抓取到,进行上报
            # if device_ip in app_context.info:
            report_worker(path, device_ip)

        # 如果path配置了对应的参数
        if path in list(app_context.path_param_dic.keys()):
            ulr_list = app_context.path_param_dic[path]
            flag = 0
            for item in ulr_list:
                if compare_query(item['url'], handler_context.request.url):
                    mergeAlgorithm.merge_handler_new(item['url_base'], path_id)
                    mergeAlgorithm.coverage_handler()
                    lyrebird.emit('test_data message',
                                  item['url_base'],
                                  namespace='/api_coverage')
                    # 如果设备信息抓取到,进行上报
                    # if device_ip in app_context.info:
                    report_worker(item['url_base'], device_ip)
                    flag = 1
            # 如果参数组合不存在,提取关注的字段
            if flag == 0:
                url_pgroup = ''
                params_list = []
                for item in ulr_list:
                    params_list.extend(item['params'].keys())
                # 去重
                for p in list(set(params_list)):
                    val = handler_context.request.args.get(p)
                    if url_pgroup:
                        url_pgroup = url_pgroup + '&' + str(p) + '=' + str(val)
                    else:
                        url_pgroup = path + '?' + str(p) + '=' + str(val)

                mergeAlgorithm.merge_handler_new(url_pgroup, path_id)
                mergeAlgorithm.coverage_handler()
                lyrebird.emit('test_data message',
                              url_pgroup,
                              namespace='/api_coverage')
                # 如果设备信息抓取到,进行上报
                # if device_ip in app_context.info:
                report_worker(url_pgroup, device_ip)

        # 如果不在base里,需要判断这些API是否被筛掉
        else:
            # 如果不在筛除列表内,才进行merge等一系列算法
            if not Filter().filter_all(path):
                # merge到 context merge list中
                mergeAlgorithm.merge_handler_new(path, path_id)
                # 传给api_coverage前端的socket信息
                lyrebird.emit('test_data message',
                              path,
                              namespace='/api_coverage')
                # 如果设备信息抓取到,进行上报
                # if device_ip in app_context.info:
                report_worker(path, device_ip)
            else:
                pass