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
830
1
Share
Пример fuzzy testing для поиска URL в тексте
Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.
Moscow Python Meetup
PRO
October 24, 2012
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №109. Георгий Дьячков (Альфа банк, Главный разработчик). Векторные базы в агентной архитектуре и как изменятся вопросы на собеседованиях в 2026
moscowdjango
PRO
0
16
Moscow Python Meetup №109. Евгений Блинов (The Mutating Company). Ближайшее будущее мутационного тестирования на Python
moscowdjango
PRO
0
15
Moscow Python Meetup №108. Воркшоп "Построение AI-агента: Говори с данными на языке бизнеса"
moscowdjango
PRO
0
54
Moscow Python Meetup №108. Gather. Inspire. Deliver.
moscowdjango
PRO
0
42
Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API
moscowdjango
PRO
0
46
Moscow Python Meetup №107. Django Blue-Green Migrations
moscowdjango
PRO
0
37
Moscow Python Meetup №107. Суперсжатые полнотекстовые индексы
moscowdjango
PRO
0
59
Moscow Python Meetup №106. Евгений Блинов (The Mutating Company, Founder). Суперфункции
moscowdjango
PRO
0
110
Moscow Python Meetup №106. Валерий Карпузов (SmartFX, Team Lead). Пиши, сокращай — Code Golf на Python
moscowdjango
PRO
0
130
Other Decks in Technology
See All in Technology
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
17k
QA組織のAI戦略とAIテスト設計システムAITASの実践
sansantech
PRO
1
310
JAWS DAYS 2026でAIの「もやっと」感が解消された話
smt7174
1
120
OpenClawでPM業務を自動化
knishioka
2
370
タスク管理も1on1も、もう「管理」じゃない - KiroとBedrock AgentCoreで変わった“判断の仕事”
yusukeshimizu
0
160
Network Firewall Proxyで 自前プロキシを消し去ることができるのか
gusandayo
0
170
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
420
LLMに何を任せ、何を任せないか
cap120
11
6.9k
PostgreSQL 18のNOT ENFORCEDな制約とDEFERRABLEの関係
yahonda
1
210
Amazon Qはアマコネで頑張っています〜 Amazon Q in Connectについて〜
yama3133
1
170
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
5
1.3k
Bref でサービスを運用している話
sgash708
0
220
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
BBQ
matthewcrist
89
10k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Leo the Paperboy
mayatellez
6
1.6k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
490
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
140
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
92
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
260
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
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%-покрытия на границах (где обычно все
самое вкусное) • Не факт, что будут выявлены критичные баги • Но... • Вы можете прогнозировать поведение программы в стресс-режиме
Применимость • Применим на стыках взаимодействия программ (форматы файлов, передача
данных, внешние события) • Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?