{"guid":"371e8a37-bac7-5209-a243-46e1811a4f57","title":"Testmark: a Markdown Convention for Test Fixtures and Data","subtitle":null,"slug":"gpn20-70-testmark-a-markdown-convention-for-test-fixtures-and-data","link":"https://cfp.gulas.ch/gpn20/talk/EYQZZS/","description":"Have you ever struggled with keeping examples and documentation up-to-date?  Do you write standards and test fixtures that need to be used in lots of languages, so you need a format everyone can agree on?  And lastly, do you use Markdown?\n\nTestmark is a simple convention for annotating code blocks in markdown so they can be loaded into your program as data.  It's great for test fixtures and executable examples.  Libraries let you treat it as a pseudofilesystem: you can put as many data hunks as you want in one file, and also update them programmatically.  The testmark parsers also carefully leave the rest of your markdown _alone_, meaning you can intersperse whatever prose and styling with your code blocks you want.\n\nIn this talk, we'll show the testmark syntax, the testmark libraries (yes, in multiple languages), and examples of testmark in the wild and the impact it had on projects that adopted it.  Also, there are extensions to testmark dedicated to blackbox testing of executables; come see those in action too!","original_language":"eng","persons":["Eric Myhre"],"tags":["gpn20","70","2022","Software \u0026 Infrastructure","gulaschprogrammiernacht","gpn","entropia"],"view_count":109,"promoted":false,"date":"2022-05-20T22:00:00.000+02:00","release_date":"2022-05-21T00:00:00.000+02:00","updated_at":"2026-03-21T15:30:07.666+01:00","length":1123,"duration":1123,"thumb_url":"https://static.media.ccc.de/media/events/gpn/gpn20/70-371e8a37-bac7-5209-a243-46e1811a4f57.jpg","poster_url":"https://static.media.ccc.de/media/events/gpn/gpn20/70-371e8a37-bac7-5209-a243-46e1811a4f57_preview.jpg","timeline_url":"https://static.media.ccc.de/media/events/gpn/gpn20/70-371e8a37-bac7-5209-a243-46e1811a4f57.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/events/gpn/gpn20/70-371e8a37-bac7-5209-a243-46e1811a4f57.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/gpn20-70-testmark-a-markdown-convention-for-test-fixtures-and-data","url":"https://api.media.ccc.de/public/events/371e8a37-bac7-5209-a243-46e1811a4f57","conference_title":"Gulaschprogrammiernacht 20","conference_url":"https://api.media.ccc.de/public/conferences/gpn20","related":[],"recordings":[{"size":156,"length":1123,"mime_type":"video/webm","language":"eng","filename":"gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_webm-hd.webm","state":"new","folder":"webm-hd","high_quality":true,"width":1920,"height":1080,"updated_at":"2022-05-21T14:45:48.587+02:00","recording_url":"https://cdn.media.ccc.de/events/gpn/gpn20/webm-hd/gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_webm-hd.webm","url":"https://api.media.ccc.de/public/recordings/59221","event_url":"https://api.media.ccc.de/public/events/371e8a37-bac7-5209-a243-46e1811a4f57","conference_url":"https://api.media.ccc.de/public/conferences/gpn20"},{"size":55,"length":1123,"mime_type":"video/webm","language":"eng","filename":"gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_webm-sd.webm","state":"new","folder":"webm-sd","high_quality":false,"width":720,"height":576,"updated_at":"2022-05-21T14:25:05.061+02:00","recording_url":"https://cdn.media.ccc.de/events/gpn/gpn20/webm-sd/gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_webm-sd.webm","url":"https://api.media.ccc.de/public/recordings/59213","event_url":"https://api.media.ccc.de/public/events/371e8a37-bac7-5209-a243-46e1811a4f57","conference_url":"https://api.media.ccc.de/public/conferences/gpn20"},{"size":10,"length":1115,"mime_type":"audio/opus","language":"eng","filename":"gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_opus.opus","state":"new","folder":"opus","high_quality":false,"width":0,"height":0,"updated_at":"2022-05-21T14:14:03.262+02:00","recording_url":"https://cdn.media.ccc.de/events/gpn/gpn20/opus/gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_opus.opus","url":"https://api.media.ccc.de/public/recordings/59212","event_url":"https://api.media.ccc.de/public/events/371e8a37-bac7-5209-a243-46e1811a4f57","conference_url":"https://api.media.ccc.de/public/conferences/gpn20"},{"size":17,"length":1115,"mime_type":"audio/mpeg","language":"eng","filename":"gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_mp3.mp3","state":"new","folder":"mp3","high_quality":false,"width":0,"height":0,"updated_at":"2022-05-21T14:13:03.834+02:00","recording_url":"https://cdn.media.ccc.de/events/gpn/gpn20/mp3/gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_mp3.mp3","url":"https://api.media.ccc.de/public/recordings/59211","event_url":"https://api.media.ccc.de/public/events/371e8a37-bac7-5209-a243-46e1811a4f57","conference_url":"https://api.media.ccc.de/public/conferences/gpn20"},{"size":36,"length":1123,"mime_type":"video/mp4","language":"eng","filename":"gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_sd.mp4","state":"new","folder":"h264-sd","high_quality":false,"width":720,"height":576,"updated_at":"2022-05-21T09:20:20.943+02:00","recording_url":"https://cdn.media.ccc.de/events/gpn/gpn20/h264-sd/gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_sd.mp4","url":"https://api.media.ccc.de/public/recordings/59169","event_url":"https://api.media.ccc.de/public/events/371e8a37-bac7-5209-a243-46e1811a4f57","conference_url":"https://api.media.ccc.de/public/conferences/gpn20"},{"size":129,"length":1123,"mime_type":"video/mp4","language":"eng","filename":"gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_hd.mp4","state":"new","folder":"h264-hd","high_quality":true,"width":1920,"height":1080,"updated_at":"2022-05-21T09:11:10.851+02:00","recording_url":"https://cdn.media.ccc.de/events/gpn/gpn20/h264-hd/gpn20-70-eng-Testmark_a_Markdown_Convention_for_Test_Fixtures_and_Data_hd.mp4","url":"https://api.media.ccc.de/public/recordings/59159","event_url":"https://api.media.ccc.de/public/events/371e8a37-bac7-5209-a243-46e1811a4f57","conference_url":"https://api.media.ccc.de/public/conferences/gpn20"}]}