Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Пример fuzzy testing для поиска URL в тексте
Search
Moscow Python Meetup
PRO
October 24, 2012
Technology
1
760
Пример fuzzy testing для поиска URL в тексте
Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.
Moscow Python Meetup
PRO
October 24, 2012
Tweet
Share
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №96. Никита Борсов (Positive Technologies, Python Программист) Самописный PyCharm плагин для ведения словаря терминов в Python проектах
moscowdjango
PRO
0
52
Moscow Python Meetup №97. (MTS Диджитал, Ведущий Python Разработчик). Современный туллинг Python-разработчика для тестирования
moscowdjango
PRO
0
62
Moscow Python Meetup №97. Константин Крестников (Техлид команды GigaChain (SberDevices)). GigaChain: Новые инструменты для разработки агентов на примере агента техподдержки
moscowdjango
PRO
0
65
Moscow Python Meetup №97. Daniel Arango (EAFIT (Medelin, Columbia), Student). How to make a multilingual programing language in Python
moscowdjango
PRO
0
24
Moscow Python Meetup №96 Кирилл Сосновских (YADRO, Automation QA (Python). Анализируем исходный код с пользой: как облегчить работу ревьюерам и увеличить читабельность тестовой отчетности
moscowdjango
PRO
0
21
Moscow Python Meetup №96. Кирилл Гладких (Ecom.tech, Python Разработчик). Ускорение обработки данных путем миграций с Pandas на Polars
moscowdjango
PRO
0
28
Moscow Python Meetup №95. Макс Столпасов (X5 Tech, TeamLead). D в DDD — где D это доменная логика
moscowdjango
PRO
0
71
Moscow Python Meetup №95. Юлия Сухинина (АО «ГОЛЬФСТРИМ охранные системы» (МТС), Руководитель по развитию). Разработка ТГ Бота с ИИ модулем для автоматизации процесса контроля качества оформления документов
moscowdjango
PRO
0
120
Moscow Python Meetup №95 Арсен Гумин (Сбер, Руководитель направления по исследованию данных) Model-as-a-service: с нуля до enterprise ready
moscowdjango
PRO
0
61
Other Decks in Technology
See All in Technology
KMP with Crashlytics
sansantech
PRO
0
240
30分でわかる「リスクから学ぶKubernetesコンテナセキュリティ」/30min-k8s-container-sec
mochizuki875
3
450
.NET 最新アップデート ~ AI とクラウド時代のアプリモダナイゼーション
chack411
0
200
Cloudflareで実現する AIエージェント ワークフロー基盤
kmd09
0
290
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!事例のご紹介+座学②
siyuanzh09
0
110
Unsafe.BitCast のすゝめ。
nenonaninu
0
200
駆け出しリーダーとしての第一歩〜開発チームとの新しい関わり方〜 / Beginning Journey as Team Leader
kaonavi
0
120
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
1
16k
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.5k
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
140
Formal Development of Operating Systems in Rust
riru
1
420
iPadOS18でフローティングタブバーを解除してみた
sansantech
PRO
1
140
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
A better future with KSS
kneath
238
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
For a Future-Friendly Web
brad_frost
176
9.5k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
RailsConf 2023
tenderlove
29
970
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Transcript
Пример fuzz testing для поиска URL в тексте Николай Ходов
(
[email protected]
)
Fuzz testing
Условное деление
Задача • В произвольном тексте: • Найти все URL'ы
Бесплотные попытки https?://(.*?) А как же вот это?! • ya.ru
• It.s.bori.ng • vk.com/durov • Google.com/#plus-plus • //st.domain.com/?q=1 • И еще миллионы вариантов...
Пишем регулярку (https?://)?<domain>{1,3}.<TLD>(/<path>)*(?<query_string>?)(#<hashtag>?)? RFC 1738 +
Тестируем вручную • self.assertEqual(strip_links('word1 https://ya.ru word2'), 'word1 word2') • self.assertEqual(strip_links('word1
domain.arpa/test.link word2'), 'word1 word2') • self.assertEqual(strip_links('word1 ya.ru/yandsearch? sdfsdfsdf=1fsdf word2'), 'word1 word2') • self.assertEqual(strip_links('word1 naked.domain.asia word2'), 'word1 word2') • … • На 15 строке мозг усиленно отказывается что-либо придумывать.
Пусть тестирует сам компьютер! Kwh89 ydhfj 09 u ><LAKSUy236 v
Fully Random URL Текст должен остаться неизменным
Баги • Домены не могут начинаться на “-” (тире) •
RFC не последняя инстанция (//) • Разные наборы символов для query string и для пути
Надежность • Не дает 100%-покрытия на границах (где обычно все
самое вкусное) • Не факт, что будут выявлены критичные баги • Но... • Вы можете прогнозировать поведение программы в стресс-режиме
Применимость • Применим на стыках взаимодействия программ (форматы файлов, передача
данных, внешние события) • Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?