多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

PyLD测试全攻略:运行W3C官方JSON-LD测试套件并生成EARL报告

PyLD测试全攻略:运行W3C官方JSON-LD测试套件并生成EARL报告 PyLD测试全攻略运行W3C官方JSON-LD测试套件并生成EARL报告【免费下载链接】pyldJSON-LD processor written in Python项目地址: https://gitcode.com/gh_mirrors/py/pyldPyLD是一个用Python编写的JSON-LD处理器支持JSON-LD 1.1规范中的展开expand、压缩compact、扁平化flatten、框架frame、归一化normalize和RDF转换等核心功能。对于新手来说PyLD测试最让人头疼的问题是如何运行W3C官方JSON-LD测试套件验证自己的环境是否正常如何生成机器可读的EARL报告用于CI或互操作性验证本文就为你一步步拆解PyLD测试的完整流程从获取测试套件到生成EARL报告一篇搞定。一、为什么PyLD测试要跑W3C官方测试套件W3C为JSON-LD规范发布了三套官方测试套件它们是判断一个JSON-LD处理器是否合规的黄金标准测试套件对应规范覆盖内容json-ld-apiJSON-LD 1.1 Processing Algorithms and APIexpand、compact、flatten、toRDF、fromRDF等json-ld-framingJSON-LD 1.1 Framingframe框架化normalizationRDF Dataset NormalizationURDNA2015、URGNA2012归一化算法PyLD在tests/runtests.py中定义了一张测试类型表TEST_TYPES把每个W3C测试条目映射到对应的PyLD API调用例如jld:ExpandTest调用jsonld.expandjld:CompactTest调用jsonld.compact。跑一遍官方套件就等于对处理器做了一次全面的体检。✅二、准备工作如何获取W3C官方JSON-LD测试套件官方测试套件以git子模块的方式存放在项目的specifications/目录下共三个子目录specifications/json-ld-api/specifications/json-ld-framing/specifications/normalization/克隆项目后如果子模块为空需要先初始化并更新它们git submodule init git submodule update也可以直接用一条命令更新到最新版本git submodule update --remote --init --recursive 如果子模块没有拉取成功PyLD测试会提示 Test dir not found。确保三个目录里都存在tests/manifest.jsonld文件测试才能正常运行。三、最快的一键运行方法pytest安装测试依赖pytest等见requirements-test.txt后在项目根目录直接执行pytestPyLD通过tests/conftest.py中的参数化机制pytest_generate_tests读取三个测试套件的清单文件manifest.jsonld自动把每个测试用例展开成一个独立的pytest用例再交给tests/test_manifests.py逐个执行。你会在输出中看到形如test_manifest_case[ExpandTest: t0001: ...]的用例名。想顺便查看代码覆盖率项目Makefile里已经写好了make test它等价于pytest --covpyld。四、如何只跑指定的JSON-LD测试套件如果你只想运行某一个套件比如只验证API相关的展开、压缩功能可以用--tests参数指定路径pytest --tests./specifications/json-ld-api/tests多个套件可以多次指定pytest --tests./specifications/json-ld-api/tests --tests./specifications/json-ld-framing/tests--tests参数既支持包含manifest.jsonld的目录也支持单个.jsonld清单文件非常灵活。五、使用原始测试运行器python tests/runtests.py除了pytest项目还保留了原生的命令行测试运行器tests/runtests.py用法同样简单python tests/runtests.py它会自动扫描specifications/下三个套件目录并开始测试。也可以手动指定测试目标python tests/runtests.py ./specifications/json-ld-api/tests它的常用参数如下参数作用-e, --earl file将EARL报告写入指定文件-b, --bail遇到第一个失败用例就立即停止-l, --loader name选择文档加载器requests或aiohttp-n, --number id只运行包含指定测试标识符的用例-v, --verbose打印详细的测试数据六、测试运行的高级技巧6.1 切换远程文档加载器部分测试用例需要远程加载文档PyLD支持两种加载器# 使用 requests 加载器默认 pytest --loaderrequests --tests./specifications/json-ld-api/tests # 使用 aiohttp 异步加载器 python tests/runtests.py -l aiohttp ./specifications/json-ld-api/tests 注意加载器的切换在tests/conftest.py的pytest_configure中完成它会把选中的加载器设置为全局默认文档加载器jsonld._default_document_loader。6.2 只跑单个测试用例调试时可以用--numberpytest或-nruntests.py按测试标识符过滤pytest --numbert0001 --tests./specifications/json-ld-api/tests6.3 失败即停止在长测试套件中想快速定位第一个问题用-bpython tests/runtests.py -b6.4 离线运行机制你可能好奇测试套件里的输入文件很多引用的是W3C的远程URL离线怎么跑答案在tests/runtests.py的LOCAL_BASES和create_document_loader中——运行器会把https://w3c.github.io/json-ld-api/tests等远程基址映射到本地文件从而实现离线、确定性的测试无需网络。七、PyLD测试覆盖了哪些功能点从tests/runtests.py的TEST_TYPES可以看到PyLD测试覆盖了9类测试jld:ExpandTest文档展开jld:CompactTest文档压缩jld:FlattenTest文档扁平化jld:FrameTest文档框架化jld:ToRDFTestJSON-LD转RDF三元组jld:FromRDFTestRDF三元组转JSON-LDjld:NormalizeTest文档归一化rdfn:Urgna2012EvalTest/rdfn:Urdna2015EvalTest两种规范化算法每个测试用例都区分正向测试jld:PositiveEvaluationTest、负向测试jld:NegativeEvaluationTest和语法测试jld:PositiveSyntaxTest。负向测试会校验库是否抛出符合规范的错误码如jsonld.JsonLdError的code字段确保错误处理行为也与规范一致。八、如何生成EARL报告关键一步EARLEvaluation and Report Language评估与报告语言是W3C制定的机器可读测试结果格式。生成EARL报告是PyLD测试最实用的能力之一常用于CI流水线或与其他实现做互操作性对比。8.1 使用pytest生成EARL报告pytest --earl./earl-report.json8.2 使用原始运行器生成EARL报告python tests/runtests.py -e ./earl-report.json运行结束后项目会在指定路径输出一个JSON-LD格式的报告文件。报告的内容由tests/runtests.py中的EarlReport类生成主要包含项目元信息软件名称、版本号从lib/pyld/__about__.py读取、许可证、开发者信息doap命名空间逐条断言每个测试用例对应一条earl:Assertion记录了测试标识符、断言时间以及结果earl:passed通过或earl:failed失败{ type: earl:Assertion, earl:test: ...#t0001, earl:result: { type: earl:TestResult, dc:date: 2026-08-19T00:00:00Z, earl:outcome: earl:passed } } 在pytest模式下EARL报告由tests/conftest.py的pytest_runtest_makereport钩子逐用例记录跳过的用例skipped不会写入报告避免污染断言结果。九、如何读懂PyLD测试结果测试输出中会看到几类状态含义如下✅passed用例通过结果与预期一致❌failed用例失败运行器会打印 EXPECTED 与 ACTUAL 的对比见assert_results_equal⏭skipped用例被跳过可能是规范版本不适用如specVersion: json-ld-1.0或已知不支持⏳pending标记为待定的用例预期失败。如果它意外通过了会报出 pending positive test passed 提醒你更新状态比较结果时PyLD测试采用顺序无关的等价比较equal_unordered数组中元素的顺序不影响判定符合JSON-LD测试套件的语义。十、总结至此你已经掌握了PyLD测试的完整链路获取套件git submodule init git submodule update一键运行pytest或python tests/runtests.py定向测试--tests指定套件--loader切换加载器生成报告--earl./earl-report.json输出EARL报告整个测试基础设施集中在tests/目录下tests/runtests.py负责清单解析与用例执行逻辑tests/conftest.py负责pytest参数化与EARL记录tests/test_manifests.py作为pytest入口把两者衔接起来。无论你是想验证环境、贡献代码还是做互操作性测试这套流程都能让你快速上手。现在就打开终端跑一次PyLD测试生成属于你的第一份EARL报告吧【免费下载链接】pyldJSON-LD processor written in Python项目地址: https://gitcode.com/gh_mirrors/py/pyld创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表