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.
Files changed (343) hide show
  1. package/README.md +22 -0
  2. package/dist/examples/README.md +19 -0
  3. package/dist/examples/ai/golden_smoke/README.md +8 -0
  4. package/dist/examples/ai/golden_smoke/apis/echo.mmt +12 -0
  5. package/dist/examples/ai/golden_smoke/tests/echo-smoke.mmt +18 -0
  6. package/dist/examples/basic/01_simple_api/README.md +38 -0
  7. package/dist/examples/basic/01_simple_api/get_json.mmt +6 -0
  8. package/dist/examples/basic/01_simple_api/post_echo_json_body.mmt +13 -0
  9. package/dist/examples/basic/01_simple_api/post_echo_yaml_body.mmt +11 -0
  10. package/dist/examples/basic/02_simple_test/README.md +35 -0
  11. package/dist/examples/basic/02_simple_test/echo_test.mmt +12 -0
  12. package/dist/examples/basic/03_environment_variables/README.md +40 -0
  13. package/dist/examples/basic/03_environment_variables/get_json.mmt +6 -0
  14. package/dist/examples/basic/03_environment_variables/multimeter.mmt +3 -0
  15. package/dist/examples/basic/04_basic_suite/README.md +33 -0
  16. package/dist/examples/basic/04_basic_suite/suite.mmt +6 -0
  17. package/dist/examples/basic/04_basic_suite/tests/get_status_test.mmt +9 -0
  18. package/dist/examples/basic/04_basic_suite/tests/post_echo_test.mmt +12 -0
  19. package/dist/examples/basic/05_basic_documentation/README.md +24 -0
  20. package/dist/examples/basic/05_basic_documentation/api/get_user.mmt +12 -0
  21. package/dist/examples/basic/05_basic_documentation/document.mmt +4 -0
  22. package/dist/examples/examples-index.json +1559 -0
  23. package/dist/examples/intermediate/01_api_inputs_outputs/README.md +46 -0
  24. package/dist/examples/intermediate/01_api_inputs_outputs/get_dot_notation.mmt +14 -0
  25. package/dist/examples/intermediate/01_api_inputs_outputs/get_with_outputs.mmt +10 -0
  26. package/dist/examples/intermediate/01_api_inputs_outputs/post_regex_outputs.mmt +24 -0
  27. package/dist/examples/intermediate/01_api_inputs_outputs/post_with_inputs_outputs.mmt +20 -0
  28. package/dist/examples/intermediate/02_websocket/README.md +44 -0
  29. package/dist/examples/intermediate/02_websocket/ws_echo.mmt +11 -0
  30. package/dist/examples/intermediate/02_websocket/ws_json_echo.mmt +16 -0
  31. package/dist/examples/intermediate/03_graphql/README.md +10 -0
  32. package/dist/examples/intermediate/03_graphql/graphql_query.mmt +16 -0
  33. package/dist/examples/intermediate/03_graphql/graphql_variables.mmt +25 -0
  34. package/dist/examples/intermediate/04_grpc/README.md +10 -0
  35. package/dist/examples/intermediate/04_grpc/grpc_server_stream.mmt +15 -0
  36. package/dist/examples/intermediate/04_grpc/grpc_unary.mmt +13 -0
  37. package/dist/examples/intermediate/05_api_documentation/README.md +33 -0
  38. package/dist/examples/intermediate/05_api_documentation/api/get_users.mmt +13 -0
  39. package/dist/examples/intermediate/05_api_documentation/api/post_create_user.mmt +25 -0
  40. package/dist/examples/intermediate/05_api_documentation/api/ws_notifications.mmt +18 -0
  41. package/dist/examples/intermediate/05_api_documentation/document.mmt +17 -0
  42. package/dist/examples/intermediate/05_api_documentation/markdown_api/health_check.mmt +6 -0
  43. package/dist/examples/intermediate/05_api_documentation/markdown_api/overview.md +77 -0
  44. package/dist/examples/intermediate/05_api_documentation/markdown_api/search_products.mmt +15 -0
  45. package/dist/examples/intermediate/05_api_documentation/markdown_api/submit_order.mmt +18 -0
  46. package/dist/examples/intermediate/06_imports/README.md +92 -0
  47. package/dist/examples/intermediate/06_imports/apis/echo_api.mmt +13 -0
  48. package/dist/examples/intermediate/06_imports/apis/greet_api.mmt +13 -0
  49. package/dist/examples/intermediate/06_imports/multimeter.mmt +5 -0
  50. package/dist/examples/intermediate/06_imports/test_relative.mmt +15 -0
  51. package/dist/examples/intermediate/06_imports/test_root_import.mmt +14 -0
  52. package/dist/examples/intermediate/06_imports/tests/test_api.mmt +30 -0
  53. package/dist/examples/intermediate/07_simple_suite/README.md +56 -0
  54. package/dist/examples/intermediate/07_simple_suite/api/echo_api.mmt +12 -0
  55. package/dist/examples/intermediate/07_simple_suite/api/status_api.mmt +8 -0
  56. package/dist/examples/intermediate/07_simple_suite/suite_parallel.mmt +11 -0
  57. package/dist/examples/intermediate/07_simple_suite/suite_sequential.mmt +14 -0
  58. package/dist/examples/intermediate/07_simple_suite/test/echo_test.mmt +16 -0
  59. package/dist/examples/intermediate/07_simple_suite/test/echo_test_fail.mmt +15 -0
  60. package/dist/examples/intermediate/07_simple_suite/test/status_test.mmt +11 -0
  61. package/dist/examples/intermediate/07_simple_suite/test/status_test_fail.mmt +11 -0
  62. package/dist/examples/intermediate/08_chained_api_calls/README.md +58 -0
  63. package/dist/examples/intermediate/08_chained_api_calls/api/get_profile.mmt +15 -0
  64. package/dist/examples/intermediate/08_chained_api_calls/api/login.mmt +17 -0
  65. package/dist/examples/intermediate/08_chained_api_calls/chained_test.mmt +31 -0
  66. package/dist/examples/intermediate/09_csv_data_driven_test/README.md +80 -0
  67. package/dist/examples/intermediate/09_csv_data_driven_test/echo_api.mmt +14 -0
  68. package/dist/examples/intermediate/09_csv_data_driven_test/echo_csv_test.mmt +18 -0
  69. package/dist/examples/intermediate/10_environment_presets/README.md +58 -0
  70. package/dist/examples/intermediate/10_environment_presets/api/echo_env.mmt +14 -0
  71. package/dist/examples/intermediate/10_environment_presets/multimeter.mmt +22 -0
  72. package/dist/examples/intermediate/10_environment_presets/test/preset_test.mmt +14 -0
  73. package/dist/examples/intermediate/11_control_flow/README.md +48 -0
  74. package/dist/examples/intermediate/11_control_flow/api/echo.mmt +13 -0
  75. package/dist/examples/intermediate/11_control_flow/for_loop_test.mmt +15 -0
  76. package/dist/examples/intermediate/11_control_flow/if_else_test.mmt +19 -0
  77. package/dist/examples/intermediate/11_control_flow/repeat_delay_test.mmt +24 -0
  78. package/dist/examples/intermediate/12_random_values/README.md +59 -0
  79. package/dist/examples/intermediate/12_random_values/api/random_echo.mmt +21 -0
  80. package/dist/examples/intermediate/12_random_values/random_values_test.mmt +15 -0
  81. package/dist/examples/intermediate/13_stages_and_conditions/README.md +58 -0
  82. package/dist/examples/intermediate/13_stages_and_conditions/api/get_profile.mmt +13 -0
  83. package/dist/examples/intermediate/13_stages_and_conditions/api/get_settings.mmt +13 -0
  84. package/dist/examples/intermediate/13_stages_and_conditions/api/login.mmt +15 -0
  85. package/dist/examples/intermediate/13_stages_and_conditions/stages_test.mmt +40 -0
  86. package/dist/examples/intermediate/14_javascript_helpers/README.md +59 -0
  87. package/dist/examples/intermediate/14_javascript_helpers/api/echo.mmt +13 -0
  88. package/dist/examples/intermediate/14_javascript_helpers/js_test.mmt +31 -0
  89. package/dist/examples/intermediate/15_http_files/README.md +25 -0
  90. package/dist/examples/intermediate/15_http_files/import_http_in_test.mmt +8 -0
  91. package/dist/examples/intermediate/16_bruno_files/README.md +36 -0
  92. package/dist/examples/intermediate/16_bruno_files/import_bruno_in_test.mmt +18 -0
  93. package/dist/examples/intermediate/16_bruno_files/library/README.md +8 -0
  94. package/dist/examples/intermediate/17_api_authentication/README.md +35 -0
  95. package/dist/examples/intermediate/17_api_authentication/get_with_apikey_auth.mmt +10 -0
  96. package/dist/examples/intermediate/17_api_authentication/get_with_basic_auth.mmt +10 -0
  97. package/dist/examples/intermediate/17_api_authentication/get_with_bearer_auth.mmt +9 -0
  98. package/dist/examples/intermediate/18_simple_mock_server/README.md +92 -0
  99. package/dist/examples/intermediate/18_simple_mock_server/api/create_user.mmt +15 -0
  100. package/dist/examples/intermediate/18_simple_mock_server/api/get_health.mmt +9 -0
  101. package/dist/examples/intermediate/18_simple_mock_server/api/get_user.mmt +12 -0
  102. package/dist/examples/intermediate/18_simple_mock_server/api/search.mmt +11 -0
  103. package/dist/examples/intermediate/18_simple_mock_server/server/mock_server.mmt +46 -0
  104. package/dist/examples/intermediate/18_simple_mock_server/suite.mmt +12 -0
  105. package/dist/examples/intermediate/18_simple_mock_server/test/health_test.mmt +13 -0
  106. package/dist/examples/intermediate/18_simple_mock_server/test/search_test.mmt +15 -0
  107. package/dist/examples/intermediate/18_simple_mock_server/test/user_test.mmt +27 -0
  108. package/dist/examples/intermediate/19_environment_post_echo/README.md +33 -0
  109. package/dist/examples/intermediate/19_environment_post_echo/multimeter.mmt +4 -0
  110. package/dist/examples/intermediate/19_environment_post_echo/post_echo.mmt +12 -0
  111. package/dist/examples/intermediate/20_document_parameters/README.md +25 -0
  112. package/dist/examples/intermediate/20_document_parameters/api/search_users.mmt +28 -0
  113. package/dist/examples/intermediate/20_document_parameters/document.mmt +6 -0
  114. package/dist/examples/intermediate/21_manual_timeout/README.md +22 -0
  115. package/dist/examples/intermediate/21_manual_timeout/manual_timeout.mmt +11 -0
  116. package/dist/examples/intermediate/22_omit_keyword/README.md +45 -0
  117. package/dist/examples/intermediate/22_omit_keyword/omit_keyword.mmt +34 -0
  118. package/dist/examples/intermediate/22_omit_keyword/omit_keyword_test.mmt +19 -0
  119. package/dist/examples/intermediate/23_check_operators/README.md +31 -0
  120. package/dist/examples/intermediate/23_check_operators/api/sample.mmt +27 -0
  121. package/dist/examples/intermediate/23_check_operators/operators_test.mmt +54 -0
  122. package/dist/examples/intermediate/24_test_call_cache/README.md +34 -0
  123. package/dist/examples/intermediate/24_test_call_cache/api/login_echo.mmt +19 -0
  124. package/dist/examples/intermediate/24_test_call_cache/create_session.mmt +28 -0
  125. package/dist/examples/intermediate/24_test_call_cache/use_session_cache.mmt +41 -0
  126. package/dist/examples/intermediate/25_convert_to_mmt/README.md +17 -0
  127. package/dist/examples/intermediate/25_convert_to_mmt/bruno/README.md +5 -0
  128. package/dist/examples/intermediate/25_convert_to_mmt/bruno/converted/api/create-user.mmt +11 -0
  129. package/dist/examples/intermediate/25_convert_to_mmt/bruno/converted/tests/create-user.mmt +11 -0
  130. package/dist/examples/intermediate/25_convert_to_mmt/http/README.md +5 -0
  131. package/dist/examples/intermediate/25_convert_to_mmt/http/converted/api/ping.mmt +9 -0
  132. package/dist/examples/intermediate/25_convert_to_mmt/http/converted/tests/source-http.mmt +11 -0
  133. package/dist/examples/intermediate/25_convert_to_mmt/openapi/README.md +5 -0
  134. package/dist/examples/intermediate/25_convert_to_mmt/openapi/converted/api/get-sample-json.mmt +8 -0
  135. package/dist/examples/intermediate/25_convert_to_mmt/postman/README.md +7 -0
  136. package/dist/examples/intermediate/25_convert_to_mmt/postman/converted/api/ping.mmt +23 -0
  137. package/dist/examples/intermediate/25_convert_to_mmt/postman/converted/suites/collection.mmt +7 -0
  138. package/dist/examples/intermediate/25_convert_to_mmt/postman/converted/tests/collection.mmt +17 -0
  139. package/dist/examples/intermediate/25_convert_to_mmt/wsdl/README.md +5 -0
  140. package/dist/examples/intermediate/25_convert_to_mmt/wsdl/converted/api/ping.mmt +21 -0
  141. package/dist/examples/intermediate/26_yaml_expect_typing/README.md +21 -0
  142. package/dist/examples/intermediate/26_yaml_expect_typing/typing_test.mmt +29 -0
  143. package/dist/examples/intermediate/27_ai_judge/README.md +31 -0
  144. package/dist/examples/intermediate/27_ai_judge/judge_demo.mmt +33 -0
  145. package/dist/examples/intermediate/27_ai_judge/judges/gemini.mmt +12 -0
  146. package/dist/examples/intermediate/27_ai_judge/judges/ollama.mmt +8 -0
  147. package/dist/examples/professional/01_report_generation/README.md +87 -0
  148. package/dist/examples/professional/01_report_generation/api/echo.mmt +13 -0
  149. package/dist/examples/professional/01_report_generation/suite.mmt +12 -0
  150. package/dist/examples/professional/01_report_generation/test/fail_test.mmt +11 -0
  151. package/dist/examples/professional/01_report_generation/test/pass_test.mmt +17 -0
  152. package/dist/examples/professional/02_tls_certificates/README.md +113 -0
  153. package/dist/examples/professional/02_tls_certificates/api/secure_echo.mmt +13 -0
  154. package/dist/examples/professional/02_tls_certificates/env.mmt +17 -0
  155. package/dist/examples/professional/02_tls_certificates/tls_test.mmt +12 -0
  156. package/dist/examples/professional/03_load_test/README.md +39 -0
  157. package/dist/examples/professional/03_load_test/echo_api.mmt +12 -0
  158. package/dist/examples/professional/03_load_test/echo_test.mmt +14 -0
  159. package/dist/examples/professional/03_load_test/loadtest.mmt +15 -0
  160. package/dist/examples/professional/04_convert_to_mmt/README.md +30 -0
  161. package/dist/examples/professional/04_convert_to_mmt/bruno/README.md +8 -0
  162. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/basic-auth-check.mmt +9 -0
  163. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/bearer-auth-check.mmt +12 -0
  164. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/cache-headers.mmt +9 -0
  165. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/delayed-response.mmt +9 -0
  166. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-anything-alias.mmt +11 -0
  167. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-delete.mmt +9 -0
  168. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-get-with-query.mmt +10 -0
  169. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-post-body.mmt +13 -0
  170. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/echo-put-body.mmt +14 -0
  171. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/get-sample-html.mmt +9 -0
  172. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/get-sample-json.mmt +9 -0
  173. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/get-sample-xml.mmt +9 -0
  174. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/method-match-get.mmt +9 -0
  175. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/random-bytes.mmt +9 -0
  176. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/redirect-twice.mmt +9 -0
  177. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-client-ip.mmt +9 -0
  178. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-cookies.mmt +9 -0
  179. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-request-headers.mmt +10 -0
  180. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-status-200.mmt +9 -0
  181. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/return-status-404.mmt +9 -0
  182. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/service-help.mmt +9 -0
  183. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/api/set-cookie.mmt +9 -0
  184. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/basic-auth-check.mmt +11 -0
  185. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/bearer-auth-check.mmt +11 -0
  186. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/cache-headers.mmt +11 -0
  187. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/delayed-response.mmt +11 -0
  188. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-anything-alias.mmt +11 -0
  189. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-delete.mmt +11 -0
  190. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-get-with-query.mmt +11 -0
  191. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-post-body.mmt +11 -0
  192. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/echo-put-body.mmt +11 -0
  193. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/get-sample-html.mmt +11 -0
  194. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/get-sample-json.mmt +11 -0
  195. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/get-sample-xml.mmt +11 -0
  196. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/method-match-get.mmt +11 -0
  197. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/random-bytes.mmt +11 -0
  198. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/redirect-twice.mmt +11 -0
  199. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-client-ip.mmt +11 -0
  200. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-cookies.mmt +11 -0
  201. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-request-headers.mmt +11 -0
  202. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-status-200.mmt +11 -0
  203. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/return-status-404.mmt +11 -0
  204. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/service-help.mmt +11 -0
  205. package/dist/examples/professional/04_convert_to_mmt/bruno/converted/tests/set-cookie.mmt +11 -0
  206. package/dist/examples/professional/04_convert_to_mmt/http/README.md +7 -0
  207. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/basic-auth-check.mmt +10 -0
  208. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/bearer-auth-check.mmt +10 -0
  209. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/cache-headers.mmt +9 -0
  210. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/delayed-response.mmt +9 -0
  211. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-anything-alias.mmt +11 -0
  212. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-delete.mmt +9 -0
  213. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-get-with-query.mmt +10 -0
  214. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-post-body.mmt +13 -0
  215. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/echo-put-body.mmt +14 -0
  216. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/get-sample-html.mmt +9 -0
  217. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/get-sample-json.mmt +9 -0
  218. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/get-sample-xml.mmt +9 -0
  219. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/method-match-get.mmt +9 -0
  220. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/random-bytes.mmt +9 -0
  221. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/redirect-twice.mmt +9 -0
  222. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-client-ip.mmt +9 -0
  223. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-cookies.mmt +9 -0
  224. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-request-headers.mmt +10 -0
  225. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-status-200.mmt +9 -0
  226. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/return-status-404.mmt +9 -0
  227. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/service-help.mmt +9 -0
  228. package/dist/examples/professional/04_convert_to_mmt/http/converted/api/set-cookie.mmt +9 -0
  229. package/dist/examples/professional/04_convert_to_mmt/http/converted/tests/source-http.mmt +95 -0
  230. package/dist/examples/professional/04_convert_to_mmt/openapi/README.md +8 -0
  231. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/basic-auth-check.mmt +11 -0
  232. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/bearer-auth-check.mmt +11 -0
  233. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/cache-headers.mmt +7 -0
  234. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/delayed-response.mmt +7 -0
  235. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-anything-alias.mmt +13 -0
  236. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-delete.mmt +7 -0
  237. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-get-with-query.mmt +11 -0
  238. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-post-body.mmt +36 -0
  239. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/echo-put-body.mmt +25 -0
  240. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/get-sample-html.mmt +7 -0
  241. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/get-sample-json.mmt +7 -0
  242. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/get-sample-xml.mmt +7 -0
  243. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/method-match.mmt +7 -0
  244. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/random-bytes.mmt +7 -0
  245. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/redirect-n-times.mmt +7 -0
  246. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-client-ip.mmt +7 -0
  247. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-cookies.mmt +7 -0
  248. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-request-headers.mmt +7 -0
  249. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/return-status-code.mmt +7 -0
  250. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/service-help.mmt +7 -0
  251. package/dist/examples/professional/04_convert_to_mmt/openapi/converted/api/set-cookie.mmt +9 -0
  252. package/dist/examples/professional/04_convert_to_mmt/postman/README.md +8 -0
  253. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/auth/basic-auth-check.mmt +11 -0
  254. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/auth/bearer-auth-check.mmt +10 -0
  255. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-anything-alias.mmt +11 -0
  256. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-delete.mmt +7 -0
  257. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-get-with-query.mmt +8 -0
  258. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-post-body.mmt +13 -0
  259. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/echo/echo-put-body.mmt +14 -0
  260. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/return-client-ip.mmt +7 -0
  261. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/return-cookies.mmt +7 -0
  262. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/return-request-headers.mmt +8 -0
  263. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/inspect/set-cookie.mmt +7 -0
  264. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/get-sample-html.mmt +7 -0
  265. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/get-sample-json.mmt +28 -0
  266. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/get-sample-xml.mmt +7 -0
  267. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/random-bytes.mmt +7 -0
  268. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/samples/service-help.mmt +7 -0
  269. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/cache-headers.mmt +7 -0
  270. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/delayed-response.mmt +7 -0
  271. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/method-match-get.mmt +7 -0
  272. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/redirect-twice.mmt +7 -0
  273. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/return-status-200.mmt +7 -0
  274. package/dist/examples/professional/04_convert_to_mmt/postman/converted/api/status/return-status-404.mmt +7 -0
  275. package/dist/examples/professional/04_convert_to_mmt/postman/converted/multimeter.mmt +11 -0
  276. package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/auth.mmt +7 -0
  277. package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/collection.mmt +15 -0
  278. package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/echo.mmt +7 -0
  279. package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/inspect.mmt +7 -0
  280. package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/samples.mmt +7 -0
  281. package/dist/examples/professional/04_convert_to_mmt/postman/converted/suites/status.mmt +7 -0
  282. package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/auth.mmt +15 -0
  283. package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/echo.mmt +27 -0
  284. package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/inspect.mmt +23 -0
  285. package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/samples.mmt +29 -0
  286. package/dist/examples/professional/04_convert_to_mmt/postman/converted/tests/status.mmt +31 -0
  287. package/dist/examples/professional/04_convert_to_mmt/wsdl/README.md +8 -0
  288. package/dist/examples/professional/04_convert_to_mmt/wsdl/converted/api/echomessage.mmt +23 -0
  289. package/dist/examples/professional/04_convert_to_mmt/wsdl/converted/api/getsamplexml.mmt +21 -0
  290. package/dist/examples/professional/04_convert_to_mmt/wsdl/converted/api/probestatus.mmt +21 -0
  291. package/dist/examples/professional/05_tls_mock_server/README.md +19 -0
  292. package/dist/examples/professional/05_tls_mock_server/api/secure_health.mmt +11 -0
  293. package/dist/examples/professional/05_tls_mock_server/multimeter.mmt +3 -0
  294. package/dist/examples/professional/05_tls_mock_server/server/mock_server.mmt +23 -0
  295. package/dist/examples/professional/05_tls_mock_server/test/secure_health_test.mmt +15 -0
  296. package/dist/examples/professional/06_mtls_mock_server/README.md +23 -0
  297. package/dist/examples/professional/06_mtls_mock_server/api/secure_health.mmt +11 -0
  298. package/dist/examples/professional/06_mtls_mock_server/multimeter.mmt +12 -0
  299. package/dist/examples/professional/06_mtls_mock_server/server/mock_server.mmt +24 -0
  300. package/dist/examples/professional/06_mtls_mock_server/test/secure_health_test.mmt +15 -0
  301. package/dist/examples/professional/07_mock_server_timeout/README.md +26 -0
  302. package/dist/examples/professional/07_mock_server_timeout/api/slow_request.mmt +10 -0
  303. package/dist/examples/professional/07_mock_server_timeout/server/mock_server.mmt +19 -0
  304. package/dist/examples/professional/07_mock_server_timeout/suite.mmt +7 -0
  305. package/dist/examples/professional/07_mock_server_timeout/test/slow_timeout_test.mmt +15 -0
  306. package/dist/examples/professional/08_external_mtls_badssl/README.md +52 -0
  307. package/dist/examples/professional/08_external_mtls_badssl/api/badssl_client.mmt +6 -0
  308. package/dist/examples/professional/08_external_mtls_badssl/badssl_mtls_test.mmt +10 -0
  309. package/dist/examples/professional/08_external_mtls_badssl/multimeter.mmt +13 -0
  310. package/dist/examples/professional/09_ci_pipelines/README.md +92 -0
  311. package/dist/examples/professional/09_ci_pipelines/smoke_get.mmt +9 -0
  312. package/dist/examples/professional/09_ci_pipelines/smoke_post.mmt +12 -0
  313. package/dist/examples/professional/09_ci_pipelines/suite.mmt +9 -0
  314. package/dist/examples/professional/10_vault_http_setenv/README.md +60 -0
  315. package/dist/examples/professional/10_vault_http_setenv/api/bearer_with_env_token.mmt +16 -0
  316. package/dist/examples/professional/10_vault_http_setenv/api/vault_kv_read.mmt +22 -0
  317. package/dist/examples/professional/10_vault_http_setenv/env.mmt +21 -0
  318. package/dist/examples/professional/10_vault_http_setenv/server/vault_kv_mock.mmt +45 -0
  319. package/dist/examples/professional/10_vault_http_setenv/vault_to_api_test.mmt +22 -0
  320. package/dist/guides/agent-workflow.md +75 -0
  321. package/dist/guides/general.md +64 -0
  322. package/dist/guides/generate-api.md +221 -0
  323. package/dist/guides/generate-doc.md +103 -0
  324. package/dist/guides/generate-env.md +147 -0
  325. package/dist/guides/generate-loadtest.md +55 -0
  326. package/dist/guides/generate-suite.md +167 -0
  327. package/dist/guides/generate-test-skill.md +60 -0
  328. package/dist/guides/generate-test.md +335 -0
  329. package/dist/guides/generate.md +60 -0
  330. package/dist/guides/golden-smoke.md +52 -0
  331. package/dist/guides/min/api.md +29 -0
  332. package/dist/guides/min/constraints.md +9 -0
  333. package/dist/guides/min/doc.md +17 -0
  334. package/dist/guides/min/env.md +26 -0
  335. package/dist/guides/min/loadtest.md +17 -0
  336. package/dist/guides/min/overview.md +25 -0
  337. package/dist/guides/min/suite.md +18 -0
  338. package/dist/guides/min/test.md +42 -0
  339. package/dist/guides/min/workflow.md +16 -0
  340. package/dist/guides/offline-agent.md +46 -0
  341. package/dist/server.cjs +27500 -0
  342. package/dist/server.js +27500 -0
  343. package/package.json +58 -0
@@ -0,0 +1,11 @@
1
+ type: test
2
+ title: Create user
3
+ description: Generated from Bruno request "Create user".
4
+ tags:
5
+ - bruno
6
+ import:
7
+ createUser: ../api/create-user.mmt
8
+ steps:
9
+ - call: createUser
10
+ id: iCreateUser
11
+ debug: true
@@ -0,0 +1,5 @@
1
+ # HTTP convert (basic)
2
+
3
+ `source.http` is a one-request HTTP file. **Convert to MMT...** produces an API file and a test that calls it under `converted/`.
4
+
5
+ See the [convert overview](../README.md) for the other formats.
@@ -0,0 +1,9 @@
1
+ type: api
2
+ title: ping
3
+ tags:
4
+ - http
5
+ url: https://test.mmt.dev/json
6
+ method: get
7
+ format: text
8
+ headers:
9
+ Accept: application/json
@@ -0,0 +1,11 @@
1
+ type: test
2
+ title: source.http
3
+ description: Generated from HTTP request "ping".
4
+ tags:
5
+ - http
6
+ import:
7
+ ping: ../api/ping.mmt
8
+ steps:
9
+ - call: ping
10
+ id: iPing
11
+ debug: true
@@ -0,0 +1,5 @@
1
+ # OpenAPI convert (basic)
2
+
3
+ `source.openapi.yaml` is a one-operation OpenAPI spec. **Convert to MMT...** produces `converted/api/get-sample-json.mmt`.
4
+
5
+ See the [convert overview](../README.md) for the other formats.
@@ -0,0 +1,8 @@
1
+ type: api
2
+ title: Get sample JSON
3
+ url: https://test.mmt.dev/json
4
+ protocol: http
5
+ method: get
6
+ format: json
7
+ headers:
8
+ trace: demo
@@ -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,7 @@
1
+ type: suite
2
+ title: Convert Example
3
+ description: Generated from Postman collection folder "Convert Example".
4
+ tags:
5
+ - postman
6
+ items:
7
+ - ../tests/collection.mmt
@@ -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,5 @@
1
+ # WSDL convert (basic)
2
+
3
+ `source.wsdl` is a one-operation SOAP definition. **Convert to MMT...** produces `converted/api/ping.mmt`.
4
+
5
+ See the [convert overview](../README.md) for the other formats.
@@ -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,8 @@
1
+ type: judge
2
+ title: Local quality judge
3
+ engine: ollama
4
+ model: qwen2.5-coder:7b
5
+ url: http://127.0.0.1:11434
6
+ options:
7
+ temperature: 0
8
+ timeout: 120s
@@ -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,11 @@
1
+ type: test
2
+ title: Failing Test
3
+ description: A test with a deliberate check failure (for report demo)
4
+ import:
5
+ echo: ../api/echo.mmt
6
+ steps:
7
+ - call: echo
8
+ id: result
9
+ inputs:
10
+ message: fail test
11
+ - check: ${result.status_code} == 999
@@ -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>>