mmt-mcp 1.42.2-pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/examples/README.md +19 -0
- package/dist/examples/ai/golden_smoke/README.md +8 -0
- package/dist/examples/ai/golden_smoke/apis/echo.mmt +12 -0
- package/dist/examples/ai/golden_smoke/tests/echo-smoke.mmt +18 -0
- package/dist/examples/basic/01_simple_api/README.md +38 -0
- package/dist/examples/basic/01_simple_api/get_json.mmt +6 -0
- package/dist/examples/basic/01_simple_api/post_echo_json_body.mmt +13 -0
- package/dist/examples/basic/01_simple_api/post_echo_yaml_body.mmt +11 -0
- package/dist/examples/basic/02_simple_test/README.md +35 -0
- package/dist/examples/basic/02_simple_test/echo_test.mmt +12 -0
- package/dist/examples/basic/03_environment_variables/README.md +40 -0
- package/dist/examples/basic/03_environment_variables/get_json.mmt +6 -0
- package/dist/examples/basic/03_environment_variables/multimeter.mmt +3 -0
- package/dist/examples/basic/04_basic_suite/README.md +33 -0
- package/dist/examples/basic/04_basic_suite/suite.mmt +6 -0
- package/dist/examples/basic/04_basic_suite/tests/get_status_test.mmt +9 -0
- package/dist/examples/basic/04_basic_suite/tests/post_echo_test.mmt +12 -0
- package/dist/examples/basic/05_basic_documentation/README.md +24 -0
- package/dist/examples/basic/05_basic_documentation/api/get_user.mmt +12 -0
- package/dist/examples/basic/05_basic_documentation/document.mmt +4 -0
- package/dist/examples/examples-index.json +1559 -0
- package/dist/examples/intermediate/01_api_inputs_outputs/README.md +46 -0
- package/dist/examples/intermediate/01_api_inputs_outputs/get_dot_notation.mmt +14 -0
- package/dist/examples/intermediate/01_api_inputs_outputs/get_with_outputs.mmt +10 -0
- package/dist/examples/intermediate/01_api_inputs_outputs/post_regex_outputs.mmt +24 -0
- package/dist/examples/intermediate/01_api_inputs_outputs/post_with_inputs_outputs.mmt +20 -0
- package/dist/examples/intermediate/02_websocket/README.md +44 -0
- package/dist/examples/intermediate/02_websocket/ws_echo.mmt +11 -0
- package/dist/examples/intermediate/02_websocket/ws_json_echo.mmt +16 -0
- package/dist/examples/intermediate/03_graphql/README.md +10 -0
- package/dist/examples/intermediate/03_graphql/graphql_query.mmt +16 -0
- package/dist/examples/intermediate/03_graphql/graphql_variables.mmt +25 -0
- package/dist/examples/intermediate/04_grpc/README.md +10 -0
- package/dist/examples/intermediate/04_grpc/grpc_server_stream.mmt +15 -0
- package/dist/examples/intermediate/04_grpc/grpc_unary.mmt +13 -0
- package/dist/examples/intermediate/05_api_documentation/README.md +33 -0
- package/dist/examples/intermediate/05_api_documentation/api/get_users.mmt +13 -0
- package/dist/examples/intermediate/05_api_documentation/api/post_create_user.mmt +25 -0
- package/dist/examples/intermediate/05_api_documentation/api/ws_notifications.mmt +18 -0
- package/dist/examples/intermediate/05_api_documentation/document.mmt +17 -0
- package/dist/examples/intermediate/05_api_documentation/markdown_api/health_check.mmt +6 -0
- package/dist/examples/intermediate/05_api_documentation/markdown_api/overview.md +77 -0
- package/dist/examples/intermediate/05_api_documentation/markdown_api/search_products.mmt +15 -0
- package/dist/examples/intermediate/05_api_documentation/markdown_api/submit_order.mmt +18 -0
- package/dist/examples/intermediate/06_imports/README.md +92 -0
- package/dist/examples/intermediate/06_imports/apis/echo_api.mmt +13 -0
- package/dist/examples/intermediate/06_imports/apis/greet_api.mmt +13 -0
- package/dist/examples/intermediate/06_imports/multimeter.mmt +5 -0
- package/dist/examples/intermediate/06_imports/test_relative.mmt +15 -0
- package/dist/examples/intermediate/06_imports/test_root_import.mmt +14 -0
- package/dist/examples/intermediate/06_imports/tests/test_api.mmt +30 -0
- package/dist/examples/intermediate/07_simple_suite/README.md +56 -0
- package/dist/examples/intermediate/07_simple_suite/api/echo_api.mmt +12 -0
- package/dist/examples/intermediate/07_simple_suite/api/status_api.mmt +8 -0
- package/dist/examples/intermediate/07_simple_suite/suite_parallel.mmt +11 -0
- package/dist/examples/intermediate/07_simple_suite/suite_sequential.mmt +14 -0
- package/dist/examples/intermediate/07_simple_suite/test/echo_test.mmt +16 -0
- package/dist/examples/intermediate/07_simple_suite/test/echo_test_fail.mmt +15 -0
- package/dist/examples/intermediate/07_simple_suite/test/status_test.mmt +11 -0
- package/dist/examples/intermediate/07_simple_suite/test/status_test_fail.mmt +11 -0
- package/dist/examples/intermediate/08_chained_api_calls/README.md +58 -0
- package/dist/examples/intermediate/08_chained_api_calls/api/get_profile.mmt +15 -0
- package/dist/examples/intermediate/08_chained_api_calls/api/login.mmt +17 -0
- package/dist/examples/intermediate/08_chained_api_calls/chained_test.mmt +31 -0
- package/dist/examples/intermediate/09_csv_data_driven_test/README.md +80 -0
- package/dist/examples/intermediate/09_csv_data_driven_test/echo_api.mmt +14 -0
- package/dist/examples/intermediate/09_csv_data_driven_test/echo_csv_test.mmt +18 -0
- package/dist/examples/intermediate/10_environment_presets/README.md +58 -0
- package/dist/examples/intermediate/10_environment_presets/api/echo_env.mmt +14 -0
- package/dist/examples/intermediate/10_environment_presets/multimeter.mmt +22 -0
- package/dist/examples/intermediate/10_environment_presets/test/preset_test.mmt +14 -0
- package/dist/examples/intermediate/11_control_flow/README.md +48 -0
- package/dist/examples/intermediate/11_control_flow/api/echo.mmt +13 -0
- package/dist/examples/intermediate/11_control_flow/for_loop_test.mmt +15 -0
- package/dist/examples/intermediate/11_control_flow/if_else_test.mmt +19 -0
- package/dist/examples/intermediate/11_control_flow/repeat_delay_test.mmt +24 -0
- package/dist/examples/intermediate/12_random_values/README.md +59 -0
- package/dist/examples/intermediate/12_random_values/api/random_echo.mmt +21 -0
- package/dist/examples/intermediate/12_random_values/random_values_test.mmt +15 -0
- package/dist/examples/intermediate/13_stages_and_conditions/README.md +58 -0
- package/dist/examples/intermediate/13_stages_and_conditions/api/get_profile.mmt +13 -0
- package/dist/examples/intermediate/13_stages_and_conditions/api/get_settings.mmt +13 -0
- package/dist/examples/intermediate/13_stages_and_conditions/api/login.mmt +15 -0
- package/dist/examples/intermediate/13_stages_and_conditions/stages_test.mmt +40 -0
- package/dist/examples/intermediate/14_javascript_helpers/README.md +59 -0
- package/dist/examples/intermediate/14_javascript_helpers/api/echo.mmt +13 -0
- package/dist/examples/intermediate/14_javascript_helpers/js_test.mmt +31 -0
- package/dist/examples/intermediate/15_http_files/README.md +25 -0
- package/dist/examples/intermediate/15_http_files/import_http_in_test.mmt +8 -0
- package/dist/examples/intermediate/16_bruno_files/README.md +36 -0
- package/dist/examples/intermediate/16_bruno_files/import_bruno_in_test.mmt +18 -0
- package/dist/examples/intermediate/16_bruno_files/library/README.md +8 -0
- package/dist/examples/intermediate/17_api_authentication/README.md +35 -0
- package/dist/examples/intermediate/17_api_authentication/get_with_apikey_auth.mmt +10 -0
- package/dist/examples/intermediate/17_api_authentication/get_with_basic_auth.mmt +10 -0
- package/dist/examples/intermediate/17_api_authentication/get_with_bearer_auth.mmt +9 -0
- package/dist/examples/intermediate/18_simple_mock_server/README.md +92 -0
- package/dist/examples/intermediate/18_simple_mock_server/api/create_user.mmt +15 -0
- package/dist/examples/intermediate/18_simple_mock_server/api/get_health.mmt +9 -0
- package/dist/examples/intermediate/18_simple_mock_server/api/get_user.mmt +12 -0
- package/dist/examples/intermediate/18_simple_mock_server/api/search.mmt +11 -0
- package/dist/examples/intermediate/18_simple_mock_server/server/mock_server.mmt +46 -0
- package/dist/examples/intermediate/18_simple_mock_server/suite.mmt +12 -0
- package/dist/examples/intermediate/18_simple_mock_server/test/health_test.mmt +13 -0
- package/dist/examples/intermediate/18_simple_mock_server/test/search_test.mmt +15 -0
- package/dist/examples/intermediate/18_simple_mock_server/test/user_test.mmt +27 -0
- package/dist/examples/intermediate/19_environment_post_echo/README.md +33 -0
- package/dist/examples/intermediate/19_environment_post_echo/multimeter.mmt +4 -0
- package/dist/examples/intermediate/19_environment_post_echo/post_echo.mmt +12 -0
- package/dist/examples/intermediate/20_document_parameters/README.md +25 -0
- package/dist/examples/intermediate/20_document_parameters/api/search_users.mmt +28 -0
- package/dist/examples/intermediate/20_document_parameters/document.mmt +6 -0
- package/dist/examples/intermediate/21_manual_timeout/README.md +22 -0
- package/dist/examples/intermediate/21_manual_timeout/manual_timeout.mmt +11 -0
- package/dist/examples/intermediate/22_omit_keyword/README.md +45 -0
- package/dist/examples/intermediate/22_omit_keyword/omit_keyword.mmt +34 -0
- package/dist/examples/intermediate/22_omit_keyword/omit_keyword_test.mmt +19 -0
- package/dist/examples/intermediate/23_check_operators/README.md +31 -0
- package/dist/examples/intermediate/23_check_operators/api/sample.mmt +27 -0
- package/dist/examples/intermediate/23_check_operators/operators_test.mmt +54 -0
- package/dist/examples/intermediate/24_test_call_cache/README.md +34 -0
- package/dist/examples/intermediate/24_test_call_cache/api/login_echo.mmt +19 -0
- package/dist/examples/intermediate/24_test_call_cache/create_session.mmt +28 -0
- package/dist/examples/intermediate/24_test_call_cache/use_session_cache.mmt +41 -0
- package/dist/examples/intermediate/25_convert_to_mmt/README.md +17 -0
- package/dist/examples/intermediate/25_convert_to_mmt/bruno/README.md +5 -0
- package/dist/examples/intermediate/25_convert_to_mmt/bruno/converted/api/create-user.mmt +11 -0
- package/dist/examples/intermediate/25_convert_to_mmt/bruno/converted/tests/create-user.mmt +11 -0
- package/dist/examples/intermediate/25_convert_to_mmt/http/README.md +5 -0
- package/dist/examples/intermediate/25_convert_to_mmt/http/converted/api/ping.mmt +9 -0
- package/dist/examples/intermediate/25_convert_to_mmt/http/converted/tests/source-http.mmt +11 -0
- package/dist/examples/intermediate/25_convert_to_mmt/openapi/README.md +5 -0
- package/dist/examples/intermediate/25_convert_to_mmt/openapi/converted/api/get-sample-json.mmt +8 -0
- package/dist/examples/intermediate/25_convert_to_mmt/postman/README.md +7 -0
- package/dist/examples/intermediate/25_convert_to_mmt/postman/converted/api/ping.mmt +23 -0
- package/dist/examples/intermediate/25_convert_to_mmt/postman/converted/suites/collection.mmt +7 -0
- package/dist/examples/intermediate/25_convert_to_mmt/postman/converted/tests/collection.mmt +17 -0
- package/dist/examples/intermediate/25_convert_to_mmt/wsdl/README.md +5 -0
- package/dist/examples/intermediate/25_convert_to_mmt/wsdl/converted/api/ping.mmt +21 -0
- package/dist/examples/intermediate/26_yaml_expect_typing/README.md +21 -0
- package/dist/examples/intermediate/26_yaml_expect_typing/typing_test.mmt +29 -0
- package/dist/examples/intermediate/27_ai_judge/README.md +31 -0
- package/dist/examples/intermediate/27_ai_judge/judge_demo.mmt +33 -0
- package/dist/examples/intermediate/27_ai_judge/judges/gemini.mmt +12 -0
- package/dist/examples/intermediate/27_ai_judge/judges/ollama.mmt +8 -0
- package/dist/examples/professional/01_report_generation/README.md +87 -0
- package/dist/examples/professional/01_report_generation/api/echo.mmt +13 -0
- package/dist/examples/professional/01_report_generation/suite.mmt +12 -0
- package/dist/examples/professional/01_report_generation/test/fail_test.mmt +11 -0
- package/dist/examples/professional/01_report_generation/test/pass_test.mmt +17 -0
- package/dist/examples/professional/02_tls_certificates/README.md +113 -0
- package/dist/examples/professional/02_tls_certificates/api/secure_echo.mmt +13 -0
- package/dist/examples/professional/02_tls_certificates/env.mmt +17 -0
- package/dist/examples/professional/02_tls_certificates/tls_test.mmt +12 -0
- package/dist/examples/professional/03_load_test/README.md +39 -0
- package/dist/examples/professional/03_load_test/echo_api.mmt +12 -0
- package/dist/examples/professional/03_load_test/echo_test.mmt +14 -0
- package/dist/examples/professional/03_load_test/loadtest.mmt +15 -0
- package/dist/examples/professional/04_convert_to_mmt/README.md +30 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/README.md +8 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/basic-auth-check.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/bearer-auth-check.mmt +12 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/cache-headers.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/delayed-response.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-anything-alias.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-delete.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-get-with-query.mmt +10 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-post-body.mmt +13 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-put-body.mmt +14 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/get-sample-html.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/get-sample-json.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/get-sample-xml.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/method-match-get.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/random-bytes.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/redirect-twice.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-client-ip.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-cookies.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-request-headers.mmt +10 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-status-200.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-status-404.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/service-help.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/set-cookie.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/basic-auth-check.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/bearer-auth-check.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/cache-headers.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/delayed-response.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-anything-alias.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-delete.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-get-with-query.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-post-body.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-put-body.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/get-sample-html.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/get-sample-json.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/get-sample-xml.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/method-match-get.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/random-bytes.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/redirect-twice.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-client-ip.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-cookies.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-request-headers.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-status-200.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-status-404.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/service-help.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/set-cookie.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/http/README.md +7 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/basic-auth-check.mmt +10 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/bearer-auth-check.mmt +10 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/cache-headers.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/delayed-response.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-anything-alias.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-delete.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-get-with-query.mmt +10 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-post-body.mmt +13 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-put-body.mmt +14 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/get-sample-html.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/get-sample-json.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/get-sample-xml.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/method-match-get.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/random-bytes.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/redirect-twice.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-client-ip.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-cookies.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-request-headers.mmt +10 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-status-200.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-status-404.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/service-help.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/api/set-cookie.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/http/converted/tests/source-http.mmt +95 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/README.md +8 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/basic-auth-check.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/bearer-auth-check.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/cache-headers.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/delayed-response.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-anything-alias.mmt +13 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-delete.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-get-with-query.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-post-body.mmt +36 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-put-body.mmt +25 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/get-sample-html.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/get-sample-json.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/get-sample-xml.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/method-match.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/random-bytes.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/redirect-n-times.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-client-ip.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-cookies.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-request-headers.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-status-code.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/service-help.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/set-cookie.mmt +9 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/README.md +8 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/auth/basic-auth-check.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/auth/bearer-auth-check.mmt +10 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-anything-alias.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-delete.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-get-with-query.mmt +8 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-post-body.mmt +13 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-put-body.mmt +14 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/return-client-ip.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/return-cookies.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/return-request-headers.mmt +8 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/set-cookie.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/get-sample-html.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/get-sample-json.mmt +28 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/get-sample-xml.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/random-bytes.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/service-help.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/cache-headers.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/delayed-response.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/method-match-get.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/redirect-twice.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/return-status-200.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/return-status-404.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/multimeter.mmt +11 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/auth.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/collection.mmt +15 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/echo.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/inspect.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/samples.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/status.mmt +7 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/auth.mmt +15 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/echo.mmt +27 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/inspect.mmt +23 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/samples.mmt +29 -0
- package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/status.mmt +31 -0
- package/dist/examples/professional/04_convert_to_mmt/wsdl/README.md +8 -0
- package/dist/examples/professional/04_convert_to_mmt/wsdl/converted/api/echomessage.mmt +23 -0
- package/dist/examples/professional/04_convert_to_mmt/wsdl/converted/api/getsamplexml.mmt +21 -0
- package/dist/examples/professional/04_convert_to_mmt/wsdl/converted/api/probestatus.mmt +21 -0
- package/dist/examples/professional/05_tls_mock_server/README.md +19 -0
- package/dist/examples/professional/05_tls_mock_server/api/secure_health.mmt +11 -0
- package/dist/examples/professional/05_tls_mock_server/multimeter.mmt +3 -0
- package/dist/examples/professional/05_tls_mock_server/server/mock_server.mmt +23 -0
- package/dist/examples/professional/05_tls_mock_server/test/secure_health_test.mmt +15 -0
- package/dist/examples/professional/06_mtls_mock_server/README.md +23 -0
- package/dist/examples/professional/06_mtls_mock_server/api/secure_health.mmt +11 -0
- package/dist/examples/professional/06_mtls_mock_server/multimeter.mmt +12 -0
- package/dist/examples/professional/06_mtls_mock_server/server/mock_server.mmt +24 -0
- package/dist/examples/professional/06_mtls_mock_server/test/secure_health_test.mmt +15 -0
- package/dist/examples/professional/07_mock_server_timeout/README.md +26 -0
- package/dist/examples/professional/07_mock_server_timeout/api/slow_request.mmt +10 -0
- package/dist/examples/professional/07_mock_server_timeout/server/mock_server.mmt +19 -0
- package/dist/examples/professional/07_mock_server_timeout/suite.mmt +7 -0
- package/dist/examples/professional/07_mock_server_timeout/test/slow_timeout_test.mmt +15 -0
- package/dist/examples/professional/08_external_mtls_badssl/README.md +52 -0
- package/dist/examples/professional/08_external_mtls_badssl/api/badssl_client.mmt +6 -0
- package/dist/examples/professional/08_external_mtls_badssl/badssl_mtls_test.mmt +10 -0
- package/dist/examples/professional/08_external_mtls_badssl/multimeter.mmt +13 -0
- package/dist/examples/professional/09_ci_pipelines/README.md +92 -0
- package/dist/examples/professional/09_ci_pipelines/smoke_get.mmt +9 -0
- package/dist/examples/professional/09_ci_pipelines/smoke_post.mmt +12 -0
- package/dist/examples/professional/09_ci_pipelines/suite.mmt +9 -0
- package/dist/examples/professional/10_vault_http_setenv/README.md +60 -0
- package/dist/examples/professional/10_vault_http_setenv/api/bearer_with_env_token.mmt +16 -0
- package/dist/examples/professional/10_vault_http_setenv/api/vault_kv_read.mmt +22 -0
- package/dist/examples/professional/10_vault_http_setenv/env.mmt +21 -0
- package/dist/examples/professional/10_vault_http_setenv/server/vault_kv_mock.mmt +45 -0
- package/dist/examples/professional/10_vault_http_setenv/vault_to_api_test.mmt +22 -0
- package/dist/guides/agent-workflow.md +75 -0
- package/dist/guides/general.md +64 -0
- package/dist/guides/generate-api.md +221 -0
- package/dist/guides/generate-doc.md +103 -0
- package/dist/guides/generate-env.md +147 -0
- package/dist/guides/generate-loadtest.md +55 -0
- package/dist/guides/generate-suite.md +167 -0
- package/dist/guides/generate-test-skill.md +60 -0
- package/dist/guides/generate-test.md +335 -0
- package/dist/guides/generate.md +60 -0
- package/dist/guides/golden-smoke.md +52 -0
- package/dist/guides/min/api.md +29 -0
- package/dist/guides/min/constraints.md +9 -0
- package/dist/guides/min/doc.md +17 -0
- package/dist/guides/min/env.md +26 -0
- package/dist/guides/min/loadtest.md +17 -0
- package/dist/guides/min/overview.md +25 -0
- package/dist/guides/min/suite.md +18 -0
- package/dist/guides/min/test.md +42 -0
- package/dist/guides/min/workflow.md +16 -0
- package/dist/guides/offline-agent.md +46 -0
- package/dist/server.cjs +27500 -0
- package/dist/server.js +27500 -0
- package/package.json +58 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Postman convert (basic)
|
|
2
|
+
|
|
3
|
+
`source.postman_collection.json` is a one-request collection. **Convert to MMT...** produces API, test, and suite files under `converted/`.
|
|
4
|
+
|
|
5
|
+
The converted test keeps a `js` step that checks status with Multimeter helpers (`check_`, `equals_`, step `id` `iPing`). Postman `pm.*` is not available at runtime.
|
|
6
|
+
|
|
7
|
+
See the [convert overview](../README.md) for the other formats.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type: api
|
|
2
|
+
title: Ping
|
|
3
|
+
outputs:
|
|
4
|
+
status: status
|
|
5
|
+
statusCode: status
|
|
6
|
+
id: body.id
|
|
7
|
+
name: body.name
|
|
8
|
+
description: body.description
|
|
9
|
+
version: body.version
|
|
10
|
+
url: https://test.mmt.dev/json
|
|
11
|
+
method: get
|
|
12
|
+
format: json
|
|
13
|
+
headers:
|
|
14
|
+
Accept: application/json
|
|
15
|
+
examples:
|
|
16
|
+
- name: sample json
|
|
17
|
+
outputs:
|
|
18
|
+
status: 200
|
|
19
|
+
statusCode: 200
|
|
20
|
+
id: 1
|
|
21
|
+
name: Multimeter
|
|
22
|
+
description: API testing tool
|
|
23
|
+
version: 1.0.0
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type: test
|
|
2
|
+
title: Convert Example
|
|
3
|
+
description: Generated from Postman collection folder "Convert Example".
|
|
4
|
+
tags:
|
|
5
|
+
- postman
|
|
6
|
+
import:
|
|
7
|
+
ping: ../api/ping.mmt
|
|
8
|
+
steps:
|
|
9
|
+
- call: ping
|
|
10
|
+
id: iPing
|
|
11
|
+
expect:
|
|
12
|
+
status: 200
|
|
13
|
+
debug: true
|
|
14
|
+
# Postman `pm.*` is not available — Multimeter js using the step id instead.
|
|
15
|
+
- js: |-
|
|
16
|
+
check_(equals_(iPing.status, 200), 'check', 'iPing.status == 200', 'all', 'Ping (js)');
|
|
17
|
+
console.log('Ping name:', iPing.name);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type: api
|
|
2
|
+
title: Ping
|
|
3
|
+
inputs:
|
|
4
|
+
message: string
|
|
5
|
+
url: https://test.mmt.dev/xml
|
|
6
|
+
protocol: http
|
|
7
|
+
method: post
|
|
8
|
+
format: xml
|
|
9
|
+
headers:
|
|
10
|
+
Content-Type: text/xml; charset=utf-8
|
|
11
|
+
SOAPAction: urn:Ping
|
|
12
|
+
body: |-
|
|
13
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
14
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="urn:convert">
|
|
15
|
+
<soapenv:Header/>
|
|
16
|
+
<soapenv:Body>
|
|
17
|
+
<tns:Ping>
|
|
18
|
+
<tns:message><<i:message>></tns:message>
|
|
19
|
+
</tns:Ping>
|
|
20
|
+
</soapenv:Body>
|
|
21
|
+
</soapenv:Envelope>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# YAML expect / check typing
|
|
2
|
+
|
|
3
|
+
Live example for the value-typing rules used by `expect`, `check`, and `if`:
|
|
4
|
+
|
|
5
|
+
| Written in YAML | Meaning |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `== 200` / `200` | number |
|
|
8
|
+
| `== "200"` | string `"200"` |
|
|
9
|
+
| `null` | JSON null |
|
|
10
|
+
| `"null"` | string `"null"` |
|
|
11
|
+
| `omit` | field missing / omit keyword |
|
|
12
|
+
| `"omit"` | string `"omit"` |
|
|
13
|
+
| `!= null` | present (not omitted) |
|
|
14
|
+
|
|
15
|
+
## Run
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
npx testlight run examples/intermediate/26_yaml_expect_typing/typing_test.mmt
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Related: [Omit keyword](../22_omit_keyword/README.md) · [Check operators](../23_check_operators/README.md)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
type: test
|
|
2
|
+
title: YAML expect and check typing
|
|
3
|
+
description: |-
|
|
4
|
+
Covers the typing rules that broke several examples under testlight:
|
|
5
|
+
unquoted numbers/null/omit vs quoted string literals, and != null expects.
|
|
6
|
+
steps:
|
|
7
|
+
- http: https://test.mmt.dev/echo
|
|
8
|
+
id: echo
|
|
9
|
+
method: post
|
|
10
|
+
body:
|
|
11
|
+
displayName: Alex
|
|
12
|
+
nickname: "omit"
|
|
13
|
+
bio: null
|
|
14
|
+
bioText: "null"
|
|
15
|
+
expect:
|
|
16
|
+
status: == 200
|
|
17
|
+
body.body.displayName: Alex
|
|
18
|
+
body.body.nickname: "omit"
|
|
19
|
+
body.body.bio: null
|
|
20
|
+
body.body.bioText: "null"
|
|
21
|
+
- check: ${echo.status} == 200
|
|
22
|
+
- check: ${echo.body.body.nickname} == "omit"
|
|
23
|
+
- check: ${echo.body.body.bioText} == "null"
|
|
24
|
+
- http: https://test.mmt.dev/echo?userId=1
|
|
25
|
+
id: query
|
|
26
|
+
method: get
|
|
27
|
+
expect:
|
|
28
|
+
status: == 200
|
|
29
|
+
body.query.userId: == "1"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# AI Judge
|
|
2
|
+
|
|
3
|
+
Demonstrates `type: judge` with a `judge` step using soft **`expect`** and hard **`require`** (one report box).
|
|
4
|
+
|
|
5
|
+
The demo imports both judges and runs **Gemini**. Change `judge: gemini` to `judge: ollama` to use the local engine.
|
|
6
|
+
|
|
7
|
+
## Setup (Gemini — default)
|
|
8
|
+
|
|
9
|
+
1. Create an API key at [Google AI Studio](https://aistudio.google.com/apikey).
|
|
10
|
+
2. Set `api_key` in a `type: env` file or the Environment panel, then Reload.
|
|
11
|
+
|
|
12
|
+
## Setup (Ollama)
|
|
13
|
+
|
|
14
|
+
1. Install and run [Ollama](https://ollama.com/) on `http://127.0.0.1:11434`.
|
|
15
|
+
2. Pull a model matching `model:` in `judges/ollama.mmt`, e.g. `ollama pull qwen2.5-coder:7b`.
|
|
16
|
+
|
|
17
|
+
## Files
|
|
18
|
+
|
|
19
|
+
| File | Role |
|
|
20
|
+
|------|------|
|
|
21
|
+
| `judges/gemini.mmt` | Judge resource (`engine: google`, used by the demo) |
|
|
22
|
+
| `judges/ollama.mmt` | Judge resource (`engine: ollama`) |
|
|
23
|
+
| `judge_demo.mmt` | Test with context / expect / require |
|
|
24
|
+
|
|
25
|
+
## Run
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx testlight run examples/intermediate/27_ai_judge/judge_demo.mmt
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Without a live engine, unit tests in `core` mock the HTTP layer; this example needs Gemini or Ollama.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
type: test
|
|
2
|
+
title: AI judge demo
|
|
3
|
+
description: |
|
|
4
|
+
Evaluates a sample reply with soft expect and hard require
|
|
5
|
+
(one report box). Uses Gemini by default; switch the judge step
|
|
6
|
+
to ollama for a local model — see README.md.
|
|
7
|
+
import:
|
|
8
|
+
gemini: ./judges/gemini.mmt
|
|
9
|
+
ollama: ./judges/ollama.mmt
|
|
10
|
+
steps:
|
|
11
|
+
- const:
|
|
12
|
+
reply: "Yes. Under our policy you may return the item within 30 days of purchase."
|
|
13
|
+
expected: "The customer can return the product within 30 days."
|
|
14
|
+
policy: "Returns accepted within 30 days of purchase with receipt."
|
|
15
|
+
|
|
16
|
+
- judge: gemini
|
|
17
|
+
id: j1
|
|
18
|
+
title: Return-policy reply quality
|
|
19
|
+
context:
|
|
20
|
+
actual: ${reply}
|
|
21
|
+
expected: ${expected}
|
|
22
|
+
policy: ${policy}
|
|
23
|
+
expect:
|
|
24
|
+
answerRelevance: 0.75
|
|
25
|
+
semanticSimilarity: 0.75
|
|
26
|
+
criteria:
|
|
27
|
+
- The response should answer whether a return is allowed.
|
|
28
|
+
- The response should be concise.
|
|
29
|
+
require:
|
|
30
|
+
contextFaithfulness: 0.50
|
|
31
|
+
semanticSimilarity: 0.50
|
|
32
|
+
|
|
33
|
+
- print: "judge passed=${j1.passed}"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type: judge
|
|
2
|
+
title: Gemini quality judge
|
|
3
|
+
engine: google
|
|
4
|
+
model: gemini-3.5-flash-lite
|
|
5
|
+
url: https://generativelanguage.googleapis.com/v1beta
|
|
6
|
+
auth:
|
|
7
|
+
type: api-key
|
|
8
|
+
header: x-goog-api-key
|
|
9
|
+
value: e:api_key
|
|
10
|
+
options:
|
|
11
|
+
temperature: 0
|
|
12
|
+
timeout: 30s
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Report Generation
|
|
2
|
+
|
|
3
|
+
Demonstrates how to generate **test reports** in JUnit XML, HTML, Markdown, and MMT YAML formats — both via CLI flags and via the suite `export` field.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
01_report_generation/
|
|
9
|
+
├── api/
|
|
10
|
+
│ └── echo.mmt # Simple echo API
|
|
11
|
+
├── test/
|
|
12
|
+
│ ├── pass_test.mmt # A test that passes
|
|
13
|
+
│ └── fail_test.mmt # A test with a deliberate failure (for demo)
|
|
14
|
+
├── suite.mmt # Suite with export field for auto-report
|
|
15
|
+
├── reports/ # Generated reports appear here
|
|
16
|
+
└── README.md
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Files
|
|
20
|
+
|
|
21
|
+
| File | Description |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `api/echo.mmt` | Echo API used by both tests |
|
|
24
|
+
| `test/pass_test.mmt` | Calls the echo API and asserts status 200 — should pass |
|
|
25
|
+
| `test/fail_test.mmt` | Calls the echo API and checks for status 999 — deliberately fails |
|
|
26
|
+
| `suite.mmt` | Suite with `export` field that auto-generates JUnit XML and HTML reports |
|
|
27
|
+
|
|
28
|
+
## Report formats
|
|
29
|
+
|
|
30
|
+
| Format | Flag | Default file | Description |
|
|
31
|
+
|--------|------|--------------|-------------|
|
|
32
|
+
| JUnit XML | `--report junit` | `test-results.xml` | CI/CD standard (GitHub Actions, Jenkins, etc.) |
|
|
33
|
+
| HTML | `--report html` | `test-results.html` | Self-contained page with pass/fail indicators |
|
|
34
|
+
| Markdown | `--report md` | `test-results.md` | GitHub-flavored tables, great for PRs |
|
|
35
|
+
| MMT YAML | `--report mmt` | `test-results.mmt` | Native format, can be viewed in Multimeter |
|
|
36
|
+
|
|
37
|
+
## Key concepts
|
|
38
|
+
|
|
39
|
+
- **`--report FORMAT`** — CLI flag to generate a report after a test/suite run.
|
|
40
|
+
- **`--report-file PATH`** — custom output path for the report.
|
|
41
|
+
- **Suite `export`** — list of file paths in the suite file. Reports are auto-generated after the suite completes, with the format inferred from the file extension.
|
|
42
|
+
- **`report` on checks** — controls reporting level: `all` (pass + fail), `fails` (only failures), `none` (silent).
|
|
43
|
+
|
|
44
|
+
## How to use
|
|
45
|
+
|
|
46
|
+
### In VS Code
|
|
47
|
+
|
|
48
|
+
1. Open `suite.mmt` and click **Run**.
|
|
49
|
+
2. After the run completes, click the **Export** button in the toolbar.
|
|
50
|
+
3. Choose a format (JUnit XML, HTML, Markdown, or MMT YAML).
|
|
51
|
+
|
|
52
|
+
### With the CLI
|
|
53
|
+
|
|
54
|
+
Run the suite with automatic export (uses the `export` field):
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
npx testlight run examples/professional/01_report_generation/suite.mmt
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Generate a specific report format:
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
# JUnit XML
|
|
64
|
+
npx testlight run examples/professional/01_report_generation/suite.mmt --report junit
|
|
65
|
+
|
|
66
|
+
# HTML
|
|
67
|
+
npx testlight run examples/professional/01_report_generation/suite.mmt --report html
|
|
68
|
+
|
|
69
|
+
# Markdown
|
|
70
|
+
npx testlight run examples/professional/01_report_generation/suite.mmt --report md
|
|
71
|
+
|
|
72
|
+
# MMT YAML
|
|
73
|
+
npx testlight run examples/professional/01_report_generation/suite.mmt --report mmt
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Custom output path:
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
npx testlight run examples/professional/01_report_generation/suite.mmt \
|
|
80
|
+
--report junit --report-file ./my-reports/output.xml
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Run a single test with a report:
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
npx testlight run examples/professional/01_report_generation/test/pass_test.mmt --report junit
|
|
87
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type: api
|
|
2
|
+
title: Echo API
|
|
3
|
+
description: Simple echo endpoint for report examples
|
|
4
|
+
inputs:
|
|
5
|
+
message: hello
|
|
6
|
+
outputs:
|
|
7
|
+
status_code: status
|
|
8
|
+
echoed: body.body.message
|
|
9
|
+
url: https://test.mmt.dev/echo
|
|
10
|
+
method: post
|
|
11
|
+
format: json
|
|
12
|
+
body:
|
|
13
|
+
message: i:message
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type: suite
|
|
2
|
+
title: Report Generation Suite
|
|
3
|
+
description: Runs passing and failing tests to demonstrate report output
|
|
4
|
+
tags:
|
|
5
|
+
- example
|
|
6
|
+
- reports
|
|
7
|
+
export:
|
|
8
|
+
- ./reports/results.xml
|
|
9
|
+
- ./reports/results.html
|
|
10
|
+
items:
|
|
11
|
+
- test/pass_test.mmt
|
|
12
|
+
- test/fail_test.mmt
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type: test
|
|
2
|
+
title: Passing Test
|
|
3
|
+
description: A test that should pass
|
|
4
|
+
import:
|
|
5
|
+
echo: ../api/echo.mmt
|
|
6
|
+
steps:
|
|
7
|
+
- call: echo
|
|
8
|
+
id: result
|
|
9
|
+
inputs:
|
|
10
|
+
message: pass test
|
|
11
|
+
expect:
|
|
12
|
+
status_code: 200
|
|
13
|
+
- assert:
|
|
14
|
+
actual: ${result.status_code}
|
|
15
|
+
operator: ==
|
|
16
|
+
expected: 200
|
|
17
|
+
report: all
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# TLS Certificates
|
|
2
|
+
|
|
3
|
+
Demonstrates how to configure **CA certificates** and **client certificates (mTLS)** in an environment file for secure HTTPS API calls.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
02_tls_certificates/
|
|
9
|
+
├── env.mmt # Environment file with certificates section
|
|
10
|
+
├── api/
|
|
11
|
+
│ └── secure_echo.mmt # API that uses <<e:api_url>> (HTTPS)
|
|
12
|
+
├── certs/ # Place your certificate files here
|
|
13
|
+
│ ├── ca.crt # CA certificate (not included — add your own)
|
|
14
|
+
│ ├── client.crt # Client certificate for mTLS (PEM)
|
|
15
|
+
│ ├── client.key # Client private key for mTLS (PEM)
|
|
16
|
+
│ └── client.p12 # Optional PKCS#12 bundle instead of cert + key
|
|
17
|
+
├── tls_test.mmt # Test that calls the secure API
|
|
18
|
+
└── README.md
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Files
|
|
22
|
+
|
|
23
|
+
| File | Description |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `env.mmt` | Environment file with `certificates` section — CA paths and client cert config |
|
|
26
|
+
| `api/secure_echo.mmt` | API using `<<e:api_url>>` to call an HTTPS endpoint |
|
|
27
|
+
| `tls_test.mmt` | Test that calls the secure API with certificate config |
|
|
28
|
+
|
|
29
|
+
## Certificate configuration
|
|
30
|
+
|
|
31
|
+
The `certificates` section in `env.mmt` has two parts:
|
|
32
|
+
|
|
33
|
+
### CA certificates
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
certificates:
|
|
37
|
+
server_ca: "./certs/ca.crt"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Add a path to your CA PEM file. This is used to trust custom certificate authorities (e.g., internal company CAs).
|
|
41
|
+
|
|
42
|
+
### Client certificates (mTLS)
|
|
43
|
+
|
|
44
|
+
Use either PEM `cert` + `key`, or a PKCS#12 bundle in `pfx` (`.p12` or `.pfx`):
|
|
45
|
+
|
|
46
|
+
```yaml
|
|
47
|
+
certificates:
|
|
48
|
+
clients:
|
|
49
|
+
- name: "Example API"
|
|
50
|
+
host: "*.example.com"
|
|
51
|
+
cert: "./certs/client.crt"
|
|
52
|
+
key: "./certs/client.key"
|
|
53
|
+
passphrase_env: "CLIENT_CERT_PASS"
|
|
54
|
+
- name: "Example API PKCS#12"
|
|
55
|
+
host: "*.internal.example.com"
|
|
56
|
+
pfx: "./certs/client.p12"
|
|
57
|
+
passphrase_env: "CLIENT_CERT_PASS"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
| Field | Description |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `name` | Display name for the certificate |
|
|
63
|
+
| `host` | Host pattern to match (e.g., `*.api.example.com` or `*` for all) |
|
|
64
|
+
| `cert` | Path to client certificate file (PEM) |
|
|
65
|
+
| `key` | Path to private key file (PEM) |
|
|
66
|
+
| `pfx` | Path to PKCS#12 bundle (`.p12` or `.pfx`) — alternative to `cert` + `key` |
|
|
67
|
+
| `passphrase_env` | Environment variable name containing the key or bundle passphrase |
|
|
68
|
+
| `passphrase_plain` | Plain text passphrase (avoid in shared configs) |
|
|
69
|
+
|
|
70
|
+
## Enable/disable settings (VS Code workspace)
|
|
71
|
+
|
|
72
|
+
These are managed via the UI, not in the YAML file:
|
|
73
|
+
|
|
74
|
+
| Setting | Default | Description |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| CA Enabled | `false` | Enable custom CA certificates |
|
|
77
|
+
| Client Enabled | `true` | Enable/disable individual client certs |
|
|
78
|
+
|
|
79
|
+
## Supported formats
|
|
80
|
+
|
|
81
|
+
- **PEM:** `.pem`, `.crt`, `.cer`, `.key` for `server_ca`, `cert`, and `key`
|
|
82
|
+
- **PKCS#12:** `.p12` or `.pfx` for `pfx` (client bundle)
|
|
83
|
+
|
|
84
|
+
Working PKCS#12 samples live next to the PEM files in `06_mtls_mock_server` and `08_external_mtls_badssl`. Current Node runtimes need AES-based PKCS#12; older RC2/3DES bundles fail with `Unsupported PKCS12 PFX data`. Re-export if needed:
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
openssl pkcs12 -export \
|
|
88
|
+
-in client.crt -inkey client.key \
|
|
89
|
+
-out client.p12 \
|
|
90
|
+
-keypbe AES-256-CBC -certpbe AES-256-CBC -macalg sha256
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## How to use
|
|
94
|
+
|
|
95
|
+
### In VS Code
|
|
96
|
+
|
|
97
|
+
1. Place your certificate files in the `certs/` folder.
|
|
98
|
+
2. Open the `env.mmt` file and switch to the **Certificates** tab to configure paths and toggle settings.
|
|
99
|
+
3. Set the environment in the **Environment** panel.
|
|
100
|
+
4. Open `tls_test.mmt` and click **Run**.
|
|
101
|
+
|
|
102
|
+
### With the CLI
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
# Set passphrase via environment variable
|
|
106
|
+
export CLIENT_CERT_PASS="secret123"
|
|
107
|
+
|
|
108
|
+
# Run the test with the env file
|
|
109
|
+
npx testlight run examples/professional/02_tls_certificates/tls_test.mmt \
|
|
110
|
+
--env-file examples/professional/02_tls_certificates/env.mmt
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> **Note:** This example uses `https://test.mmt.dev/echo` which does not require client certificates. To test mTLS, point `api_url` at your own server that requires client certs.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type: api
|
|
2
|
+
title: Secure API Call
|
|
3
|
+
description: Calls an HTTPS endpoint (certificates configured via env file)
|
|
4
|
+
inputs:
|
|
5
|
+
message: hello secure
|
|
6
|
+
outputs:
|
|
7
|
+
status_code: status
|
|
8
|
+
echoed: body.body.message
|
|
9
|
+
url: <<e:api_url>>/echo
|
|
10
|
+
method: post
|
|
11
|
+
format: json
|
|
12
|
+
body:
|
|
13
|
+
message: i:message
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type: env
|
|
2
|
+
variables:
|
|
3
|
+
api_url:
|
|
4
|
+
- "https://test.mmt.dev"
|
|
5
|
+
|
|
6
|
+
certificates:
|
|
7
|
+
server_ca: "./certs/ca.crt"
|
|
8
|
+
clients:
|
|
9
|
+
- name: "Example API"
|
|
10
|
+
host: "*.example.com"
|
|
11
|
+
cert: "./certs/client.crt"
|
|
12
|
+
key: "./certs/client.key"
|
|
13
|
+
passphrase_env: "CLIENT_CERT_PASS"
|
|
14
|
+
- name: "Example API PKCS#12"
|
|
15
|
+
host: "*.internal.example.com"
|
|
16
|
+
pfx: "./certs/client.p12"
|
|
17
|
+
passphrase_env: "CLIENT_CERT_PASS"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type: test
|
|
2
|
+
title: TLS Certificate Test
|
|
3
|
+
description: Demonstrates making API calls with certificate configuration
|
|
4
|
+
import:
|
|
5
|
+
secureEcho: ./api/secure_echo.mmt
|
|
6
|
+
steps:
|
|
7
|
+
- call: secureEcho
|
|
8
|
+
id: result
|
|
9
|
+
inputs:
|
|
10
|
+
message: hello from TLS test
|
|
11
|
+
expect:
|
|
12
|
+
status_code: 200
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Load Test Example
|
|
2
|
+
|
|
3
|
+
This example shows a beta `type: loadtest` file that runs one normal `type: test` scenario repeatedly with concurrency, ramp-up, and report exports.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
|------|---------|
|
|
9
|
+
| `echo_api.mmt` | API request sent to the public test server |
|
|
10
|
+
| `echo_test.mmt` | Functional scenario run by each load test iteration |
|
|
11
|
+
| `loadtest.mmt` | Load test wrapper with `threads`, `repeat`, `rampup`, and `export` |
|
|
12
|
+
|
|
13
|
+
## Run from VS Code
|
|
14
|
+
|
|
15
|
+
Open `loadtest.mmt` and use the Multimeter Run action. The panel shows live load metrics while the run is active.
|
|
16
|
+
|
|
17
|
+
## Run from CLI
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
npx testlight run examples/professional/03_load_test/loadtest.mmt
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The `export` field writes reports after the run:
|
|
24
|
+
|
|
25
|
+
- `reports/echo-load.mmt` — native structured load report
|
|
26
|
+
- `reports/echo-load.html` — visual load report with charts
|
|
27
|
+
- `reports/echo-load.md` — Markdown load report with Mermaid charts
|
|
28
|
+
- `reports/echo-load.xml` — CI-compatible JUnit XML properties
|
|
29
|
+
|
|
30
|
+
You can also generate a one-off report path:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
npx testlight run examples/professional/03_load_test/loadtest.mmt --report html --report-file reports/load.html
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Learn more
|
|
37
|
+
|
|
38
|
+
- [Load Test docs](../../../docs/files/loadtest/index.md)
|
|
39
|
+
- [Reports docs](../../../docs/files/report/reference.md#load-report-kind-load)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type: api
|
|
2
|
+
title: Echo API for Load Test
|
|
3
|
+
description: Posts a message to the public test server and extracts the echoed message.
|
|
4
|
+
inputs:
|
|
5
|
+
message: load-test
|
|
6
|
+
outputs:
|
|
7
|
+
echoed_message: body.body.message
|
|
8
|
+
url: https://test.mmt.dev/echo
|
|
9
|
+
method: post
|
|
10
|
+
format: json
|
|
11
|
+
body:
|
|
12
|
+
message: i:message
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type: test
|
|
2
|
+
title: Echo Scenario
|
|
3
|
+
description: Scenario used by the load test. Each iteration calls the echo API and validates the response.
|
|
4
|
+
import:
|
|
5
|
+
echo: echo_api.mmt
|
|
6
|
+
inputs:
|
|
7
|
+
message: load-test
|
|
8
|
+
steps:
|
|
9
|
+
- call: echo
|
|
10
|
+
id: result
|
|
11
|
+
inputs:
|
|
12
|
+
message: i:message
|
|
13
|
+
expect:
|
|
14
|
+
echoed_message: <<i:message>>
|