尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

用pytest为渗透工具OKadminFinder编写单元测试:参数化测试最佳实践

用pytest为渗透工具OKadminFinder编写单元测试:参数化测试最佳实践 用pytest为渗透工具OKadminFinder编写单元测试参数化测试最佳实践【免费下载链接】okadminfinder3[ Admin panel finder / Admin Login Page Finder ] ¢σ∂є∂ ву (❤-❤) 项目地址: https://gitcode.com/gh_mirrors/ok/okadminfinder3OKadminFinder 是一款用于查找网站管理面板Admin Login Page、目录和子域名的开源渗透工具支持 Tor 匿名、随机 User-Agent 与代理扫描。这篇文章以项目中真实的测试文件tests/test_url.py为例手把手演示如何用pytest为这类 Python 安全工具编写单元测试重点讲解parametrize 参数化测试的完整写法与最佳实践。一、先认识被测对象OKadminFinder 的代码结构写测试前先搞清楚测什么。OKadminFinder 的核心逻辑全部集中在一个类里文件作用okadminfinder/_classes.py核心类okadminfinder包含check_url、create_link、get_proxy等被测方法okadminfinder/okadminfinder.py命令行入口解析-u、-d、-t、-p等参数okadminfinder/LinkFile/adminpanellinks.txt内置 1000 条管理面板路径词库tests/test_url.pypytest 单元测试文件本文主角pyproject.toml项目配置其中已声明开发依赖pytest ^6.0.0关键点渗透工具的扫描过程涉及大量网络请求不适合做单元测试而 URL 校验、链接生成、代理转换这类纯逻辑函数正是单元测试的最佳目标。二、快速搭建 pytest 单元测试环境3 步即可跑通整个测试流程# 1. 获取项目源码 git clone https://gitcode.com/gh_mirrors/ok/okadminfinder3 cd okadminfinder3 # 2. 安装运行依赖 测试依赖 pip install -r requirements.txt pip install pytest # 3. 运行测试-v 显示每个用例名称 pytest tests/ -v成功时会看到类似这样的输出tests/test_url.py::test_url[https://example.com-True] PASSED tests/test_url.py::test_url[http://example.com-True] PASSED tests/test_url.py::test_bad_urls[example.com] PASSED tests/test_url.py::test_proxy[127.0.0.1:80-expected_proxies0] PASSED注意每条参数化用例都会单独列出带方括号的数据标识这正是 parametrize 的价值所在。三、pytest.mark.parametrize参数化测试的核心语法参数化测试 1 个测试函数 × N 组数据 N 个独立用例。没有参数化时你要写 4 个几乎一样的函数来验证 4 个 URL有了pytest.mark.parametrize装饰器只需要声明参数名和数据列表pytest.mark.parametrize( urls, expected_urls, [ (https://example.com, True), (http://example.com, True), ], ) def test_url(urls, expected_urls): assert okadminfinder.check_url(urls, headersNone, proxiesNone) expected_urls 三个要素装饰器第一个参数是字符串urls, expected_urls与测试函数参数一一对应第二个参数是元组列表每个元组就是一组输入 期望输出函数体只写一次断言pytest 自动为每组数据各跑一遍。四、逐段解读 OKadminFinder 的 3 个参数化测试1️⃣ test_url验证合法 URL 的连通性okadminfinder/_classes.py中的check_url方法会对目标发起请求连通返回True。测试用 4 组合法域名带/不带www、http/https确认它都能通过pytest.mark.parametrize( urls, expected_urls, [ (https://example.com, True), (http://example.com, True), (https://www.example.com, True), (http://www.example.com, True), ], ) def test_url(urls, expected_urls): assert ( okadminfinder.check_url(urls, headersNone, proxiesNone) expected_urls )⚠️ 注意该用例依赖真实网络example.com 需可访问。离线环境下它会失败这属于半集成测试提交前可在 CI 中标注或 mock。2️⃣ test_bad_urls用 pytest.raises 捕获异常路径当用户输入example.com这类不带协议的非法 URL时create_link会直接exit抛出SystemExit。测试要验证的就是错误输入 → 预期异常pytest.mark.parametrize( bad_urls, [(example.com), (www.example.com), (example)] ) def test_bad_urls(bad_urls): with pytest.raises(SystemExit): okadminfinder.create_link(bad_urls) 渗透工具面向命令行用户输入校验就是第一道防线。这类异常路径用例能尽早暴露参数解析的回归问题。3️⃣ test_proxy代理参数的格式转换get_proxy负责把用户输入的代理地址如127.0.0.1:80转换为 httpx 要求的字典结构。典型的输入 → 期望输出对照pytest.mark.parametrize( proxies,expected_proxies, [ ( 127.0.0.1:80, {http: http://127.0.0.1:80, https: http://127.0.0.1:80}, ), ], ) def test_proxy(proxies, expected_proxies): assert okadminfinder.get_proxy(proxies) expected_proxies如果将来get_proxy支持 socks 格式只需往数据列表里追加一行不用改任何测试逻辑——这就是参数化的扩展优势。五、参数化测试最佳实践清单新手照做即可✅参数命名成对出现urls, expected_urls这种输入, 期望的命名让用例失败时一眼定位问题✅数据与断言分离所有测试数据集中在装饰器的列表里函数体保持一行断言✅正常路径 异常路径都要覆盖本文 4 组合法 URL、3 组非法 URL、1 组代理配置比例均衡✅异常用pytest.raises断言不要写try/except吞掉错误✅优先测纯函数URL 校验、格式转换不依赖网络和外部服务稳定又快速✅给网络类用例加保护像test_url这类依赖网络的用例可用pytest.mark.skipif在无网环境自动跳过✅用-v观察每个参数化分支方括号里的标识如test_url[http://example.com-True]能直接告诉你挂了哪组数据。六、小结OKadminFinder 仅用不到 40 行tests/test_url.py就通过 3 个参数化测试函数覆盖了 8 个独立用例验证了渗透工具最核心的三块逻辑URL 连通性、非法输入拦截、代理格式转换。对于新手记住一句话用 parametrize 把数据抽出来把断言写一次。以后无论是维护这个管理面板查找工具还是为其他安全扫描器补测试这套模式都直接适用。【免费下载链接】okadminfinder3[ Admin panel finder / Admin Login Page Finder ] ¢σ∂є∂ ву (❤-❤) 项目地址: https://gitcode.com/gh_mirrors/ok/okadminfinder3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表