Skip to main content

查询引用文件

可以使用查询引用文件来定义要在测试中运行的查询的位置。

谁可以使用此功能?

GitHub CodeQL 在安装后按用户授权。 根据许可证限制,只能将 CodeQL 用于某些任务。 有关详细信息,请参阅“关于 CodeQL CLI”。

如果你有 GitHub Advanced Security 许可证,则可以使用 CodeQL 进行自动分析、持续集成和持续交付。 有关详细信息,请参阅“关于 GitHub 高级安全性”。

关于查询引用文件

查询引用文件是文本文件,用于定义要测试的一个查询的位置。

如果要告知 test run 子命令运行不属于测试目录的查询,请使用查询引用文件。 可通过两种方式指定要作为测试运行的查询:

  1. 使用查询引用文件指定要测试的查询的位置。 在为旨在识别真实代码库中的问题的警报和路径查询创建测试时,这非常有用。 可以创建多个测试代码目录,每个目录都侧重于查询的不同方面。 然后将查询引用文件添加到每个测试代码目录,以指定要测试的查询。
  2. 将查询直接添加到测试目录。 在显式编写查询以测试 QL 库的行为时,这些查询通常很有用。 通常,这些查询只包含对库谓词的几个调用,将它们包装在一个 select 语句中,以便测试其输出。

定义查询引用文件

每个查询引用文件 (.qlref) 都包含一行,用于定义查找一个查询的位置。 必须相对于包含查询的 CodeQL 包的根位置来定义该位置。 通常,这是包含 .qlref 的 CodeQL 包、在测试包的 dependencies 块中指定的 CodeQL 包,或 CodeQL 包的传递依赖项。

应在所有操作系统的路径中使用正斜杠,以确保系统之间的兼容性。

示例

用于测试 JavaScript 警报查询的查询引用文件:DeadAngularJSEventListener.qlref

位于 javascript/ql/test 的 CodeQL 包的 qlpack.yml 文件 https://github.com/github/codeql/blob/main/javascript/ql/test/qlpack.ymlcodeql/javascript-queries 定义为依赖项。 因此,查询引用文件定义查询相对于 codeql/javascript-queries CodeQL 包的位置:

AngularJS/DeadAngularJSEventListener.ql

有关另一个示例,请参阅“测试自定义查询”。