MySQL8.0.26
源代码文档10bet官方网站
介绍MySQL测试框架

MySQL发行版包括一个测试套件:一组用于运行它们的测试用例和程序。

(如果您发现您的发行版中没有包含测试套件,请寻找与以及在名称中,并安装它。)这些工具构成了MySQL测试框架,它提供了一种验证MySQL服务器及其客户端程序是否按照预期运行的方法。测试用例主要由SQL语句组成,但也可以使用控制如何运行测试和验证测试结果的测试语言构造。发行版还提供了运行单元测试和创建新单元测试的工具。

本文档描述了MySQL测试框架的组件,测试程序是如何工作的,以及用于编写测试用例的语言。它还提供了开发测试用例和执行它们的教程。

为运行测试套件的应用程序命名mysql-test-run.pl.它的位置是mysql-test目录,它在源代码和二进制MySQL服务器发行版中都有。

在Windows以外的平台上,mysql-test-run.pl也可通过缩写的名称地铁在同一目录中,作为符号链接或副本。

mysql-test-run.pl应用程序启动MySQL服务器,当特定的测试用例需要不同的启动参数时,根据需要重新启动它们,并显示测试结果。对于每个测试用例,mysql-test-run.pl调用mysqltest程序(也称为“测试引擎”)来读取测试用例文件,解释测试语言构造,并向服务器发送SQL语句。

每个测试用例的输入存储在一个文件中,而运行测试的预期结果存储在另一个文件中。运行测试后,将实际结果与预期结果进行比较。

对于MySQL源代码发行版,mysql-test-run.pl位于mysql-test目录,mysqltest位于客户端目录中。的mysql-test而且客户端目录位于分发版的根目录中。

对于MySQL二进制发行版,mysql-test-run.pl位于mysql-test目录,mysqltest与其他客户机程序(如?)位于同一目录中mysqlmysqladmin安装。的位置mysql-test和其他目录取决于用于分发格式的布局。

mysql-test目录、测试用例输入文件和结果文件都存储在t而且r目录,分别。输入和结果文件具有相同的basename,这是测试名称,但是有扩展名test而且.result,分别。例如,对于名为“decimal”的测试,输入文件和结果文件是mysql-test / t / decimal.test而且mysql-test / r / decimal.result

每个测试文件被称为一个测试用例,但通常由一系列相关的测试组成。测试用例中单个语句的意外失败将导致测试用例失败。

有几种测试用例失败的方式:

  • mysqltest测试引擎检查测试输入中执行每个SQL语句的结果代码。如果失败是意料之外的,测试用例就会失败。

  • 如果错误是预期的但没有发生,测试用例可能会失败(例如,如果SQL语句在它应该失败的时候成功了)。

  • 测试用例可能因产生不正确的输出而失败。当测试运行时,它产生输出(来自的结果选择显示,以及其他语句)。的预期结果与此输出进行比较mysql-test / r目录(在具有.result后缀)。如果预期结果和实际结果不同,测试用例就会失败。的文件中写入实际的测试结果mysql-test / var / log目录与.reject后缀,和.result而且.reject提出文件进行评估。

  • 如果MySQL服务器在测试期间意外死亡,则测试用例将失败。如果发生这种情况mysqltest测试客户端通常也会报告由于断开连接而导致的失败。

  • 最后,如果MySQL服务器在测试期间写入的错误日志中包含未过滤(抑制)的警告或错误,则测试用例将失败。看到抑制错误和警告更多关于抑制警告的信息。

这种检查测试结果的方法对如何编写测试用例有一些限制。例如,结果不能包含因运行而异的信息,例如当前时间。然而,如果变化的信息对测试评估不重要,那么有一些方法可以指示测试引擎用固定的值替换输出中的那些字段。

因为测试用例主要由文本文件中的SQL语句组成,所以对用C、Java或其他语言编写的测试用例没有直接支持。这些测试不在此测试框架的范围内。但是该框架支持执行您自己的脚本并使用您自己的数据初始化它们。另外,测试用例可以执行外部程序,因此在某些方面,测试框架可以扩展到测试SQL语句以外的用途。最后,可以在测试中嵌入一小段Perl代码。这有时可用于执行超出测试语言或SQL能力的操作或执行逻辑。