コード例 #1
0
ファイル: test_run.py プロジェクト: JRubics/scanapi
    def test_when_requests_are_successful(self, mock_run_request):

        mock_run_request.side_effect = ["foo", "bar"]

        node = EndpointNode(
            {
                "endpoints": [
                    {
                        "name": "foo",
                        "requests": [
                            {"name": "First", "path": "http://foo.com/first",},
                            {
                                "name": "Second",
                                "path": "http://foo.com/second",
                            },
                        ],
                    }
                ],
                "name": "node",
                "requests": [],
            }
        )

        requests_gen = node.run()

        requests = []

        for request in requests_gen:
            requests.append(request)

        assert len(requests) == 2

        assert requests == ["foo", "bar"]
コード例 #2
0
ファイル: scan.py プロジェクト: JRubics/scanapi
def scan():
    """Caller function that tries to scans the file and write the report."""
    spec_path = settings["spec_path"]
    no_report = settings["no_report"]
    open_browser = settings["open_browser"]

    try:
        api_spec = load_config_file(spec_path)
    except FileNotFoundError as e:
        error_message = f"Could not find API spec file: {spec_path}. {str(e)}"
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)
    except EmptyConfigFileError as e:
        error_message = f"API spec file is empty. {str(e)}"
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)
    except yaml.YAMLError as e:
        error_message = "Error loading specification file."
        error_message = "{}\nPyYAML: {}".format(error_message, str(e))
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)

    try:
        root_node = EndpointNode(api_spec)
        results = root_node.run()

    except (
            InvalidKeyError,
            KeyError,
            InvalidPythonCodeError,
    ) as e:
        error_message = "Error loading API spec."
        error_message = "{} {}".format(error_message, str(e))
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)

    if no_report:
        write_without_generating_report(results)
    else:
        try:
            write_report(results)
            if open_browser:
                open_report_in_browser()
        except (BadConfigurationError, InvalidPythonCodeError) as e:
            logger.error(e)
            raise SystemExit(ExitCode.USAGE_ERROR)

    session.exit()
コード例 #3
0
def scan():
    spec_path = settings["spec_path"]

    try:
        api_spec = load_config_file(spec_path)
    except FileNotFoundError as e:
        error_message = f"Could not find API spec file: {spec_path}. {str(e)}"
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)
    except EmptyConfigFileError as e:
        error_message = f"API spec file is empty. {str(e)}"
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)
    except (yaml.YAMLError, FileFormatNotSupportedError) as e:
        logger.error(e)
        raise SystemExit(ExitCode.USAGE_ERROR)

    try:
        if API_KEY not in api_spec:
            raise MissingMandatoryKeyError({API_KEY}, ROOT_SCOPE)

        root_node = EndpointNode(api_spec[API_KEY])
        results = root_node.run()

    except (
        InvalidKeyError,
        MissingMandatoryKeyError,
        KeyError,
        InvalidPythonCodeError,
    ) as e:
        error_message = "Error loading API spec."
        error_message = "{} {}".format(error_message, str(e))
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)

    try:
        write_report(results)
    except (BadConfigurationError, InvalidPythonCodeError) as e:
        logger.error(e)
        raise SystemExit(ExitCode.USAGE_ERROR)

    session.exit()
コード例 #4
0
def scan(spec_path, output_path, config_path, reporter, template, log_level):
    """Automated Testing and Documentation for your REST API."""
    logging.basicConfig(level=log_level, format="%(message)s")
    logger = logging.getLogger(__name__)

    settings.save_preferences(
        **{
            "spec_path": spec_path,
            "output_path": output_path,
            "config_path": config_path,
            "reporter": reporter,
            "template": template,
        })

    spec_path = settings["spec_path"]

    try:
        api_spec = load_config_file(spec_path)
    except FileNotFoundError as e:
        error_message = f"Could not find API spec file: {spec_path}. {str(e)}"
        logger.error(error_message)
        return
    except EmptyConfigFileError as e:
        error_message = f"API spec file is empty. {str(e)}"
        logger.error(error_message)
        return
    except (yaml.YAMLError, FileFormatNotSupportedError) as e:
        logger.error(e)
        return

    try:
        if API_KEY not in api_spec:
            raise MissingMandatoryKeyError({API_KEY}, ROOT_SCOPE)

        root_node = EndpointNode(api_spec[API_KEY])
        Reporter(settings["output_path"], settings["reporter"],
                 settings["template"]).write(root_node.run())
    except (InvalidKeyError, MissingMandatoryKeyError, KeyError) as e:
        error_message = "Error loading API spec."
        error_message = "{} {}".format(error_message, str(e))
        logger.error(error_message)
        return
コード例 #5
0
ファイル: test_run.py プロジェクト: JRubics/scanapi
    def test_when_request_fails(self, mock_run_request, mock_session, caplog):

        mock_run_request.side_effect = ["foo", Exception("error: bar")]

        node = EndpointNode(
            {
                "endpoints": [
                    {
                        "name": "foo",
                        "requests": [
                            {"name": "First", "path": "http://foo.com/first",},
                            {
                                "name": "Second",
                                "path": "http://foo.com/second",
                            },
                        ],
                    }
                ],
                "name": "node",
                "requests": [],
            }
        )

        requests = []
        with caplog.at_level(logging.ERROR):
            requests_gen = node.run()

            for request in requests_gen:
                requests.append(request)

        assert len(requests) == 1

        assert (
            "\nError to make request `http://foo.com/second`. \nerror: bar\n"
            in caplog.text
        )

        assert mock_run_request.call_count == 2

        assert mock_session.exit_code == ExitCode.REQUEST_ERROR
コード例 #6
0
ファイル: scan.py プロジェクト: scanapi/scanapi
def scan():
    """Caller function that tries to scans the file and write the report."""
    spec_path = settings["spec_path"]

    try:
        api_spec = load_config_file(spec_path)
    except FileNotFoundError as e:
        error_message = f"Could not find API spec file: {spec_path}. {str(e)}"
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)
    except EmptyConfigFileError as e:
        error_message = f"API spec file is empty. {str(e)}"
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)
    except yaml.YAMLError as e:
        error_message = "Error loading specification file."
        error_message = "{}\nPyYAML: {}".format(error_message, str(e))
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)

    try:
        root_node = EndpointNode(api_spec)
        results = root_node.run()

    except (
            InvalidKeyError,
            KeyError,
            InvalidPythonCodeError,
    ) as e:
        error_message = "Error loading API spec."
        error_message = "{} {}".format(error_message, str(e))
        logger.error(error_message)
        raise SystemExit(ExitCode.USAGE_ERROR)

    _write(results)
    write_summary()
    session.exit()