清单 5. PHP 自动化测试代码片段
MILY: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace">$test_cnt = count($test_files); if ($test_cnt) { putenv('NO_INTERACTION=1'); verify_config(); write_information($html_output); usort($test_files, "test_sort"); $start_time = time(); if (!$html_output) { echo "Running selected tests.\n"; } else { show_start($start_time); } $test_idx = 0; run_all_tests($test_files, $environment); $end_time = time(); if ($html_output) { show_end($end_time); } if ($failed_tests_file) { fclose($failed_tests_file); } if (count($test_files) || count($test_results)) { compute_summary(); if ($html_output) { fwrite($html_file, "<hr/>\n" . get_summary(false, true)); } echo "================================================="; echo get_summary(false, false); } if ($html_output) { fclose($html_file); } if ($output_file != '' && $just_save_results) { save_or_mail_results(); } if (getenv('REPORT_EXIT_STATUS') == 1 and preg_match('/FAILED(?: |$)/', \ implode(' ', $test_results))) { exit(1); } |
在测试前,这个自动化测试的框架按照用户指定的有效测试文件数目来决定具体将有多少个测试用例,并写入 test_cnt 变量中以备计数使用。函数 verify_config() 分别用来验证和准备各种环境变量的设置及 ini 设置。函数 write_information() 将输出本次测试环境的各种信息,包括被测试 PHP 的版本号,使用的扩展( Extention ),ZEND 版本,INI 设置,测试所在的系统版本信息,以及测试时间记录。
测试用例的运行发生在函数 run_all_tests() 中调用的函数 run_test() 中。 run_test() 将具体解析测试脚本中各个段落的含义,清除所以上次测试的记录与设置将干净的测试环境准备完毕,并把各种中间文件和日志文件准备好,然后用环境变量 TEST_PHP_EXECUTABLE 指定的 PHP 可执行对象运行实际的测试语句。最后将运行后的结果和测试脚本中期待值进行比对,如果比对失败,则将结果信息一一记录到用户设置的日志文件中。
在所有的测试都运行结束后,变量 end_time 将记录测试的结束时间,并用函数 compute_summary() 计算成功的、失败的、跳过的等各种情况的测试数目,并将结果输出。
由此可以总结出,这个自动化测试的框架主要包括如下几个部分:
- 测试前的准备:包括环境准备以及测试脚本的解析等,如对上次测试遗留下的环境的清理,本次测试所必须的环境变量的读取与设置,对测试参数的解析,测试脚本名的解析,各种输出文件的准备等等。
- 测试中的脚本运行:解析测试脚本中的各个段落,组织出测试语句,执行测试语句,得到实际运行结果。
- 测试后的结果比对及输出:测试后完成实际输出结果和期待值的比对,包括各种格式化的比对和正则表达式方式的比对。按要求将结果存写入指定的文件中,并输出测试结果的总结报告。
|
PHP 自动化测试方法的应用
了解了 PHP 官方自动化测试的运作方法后,用户可以创建自己的 PHPT 测试脚本以帮助 PHP 进行函数黑盒测试。然而,应用 PHP 官方自动化测试的思想和框架搭建方法,用户还可以构建自己的自动化测试工具,以应用于其他程序开发测试中。在定制自动化测试框架时,需要注意的一些问题,而这些问题在 PHP 官方自动化测试框架中就得到了很好的解决。比如:
- 测试脚本的结构。 PHP 官方自动化测试框架只需使用一个简单的 PHPT 脚本,就可完成测试用例所有必须信息的生成。 PHPT 脚本中的段落使测试名,测试条件,测试步骤,期待值等信息一目了然,非常有利于阅读和分析。当测试人员在测试过程中需要分析某个测试的失败原因时,只需要打开对应的 PHPT 脚本就能够清楚地理解测试用例的用意以及具体测试语句。从而大大减少测试人员的分析时间和难度。而且,这种段落式的组织是具有可扩展性的。
- 测试环境的保证。在测试中,环境的“干净”与否直接影响到测试结果的准确性。好的自动化框架要力争给测试一个“干净”的环境。这里的环境包括:系统设置的环境变量,用户设置的环境变量,测试运行中可能用到的临时文件等。如果前一个测试改变了全局的环境,那么在这个环境里运行后一个测试所得到的结果就是不准确的。不准确的测试结果可能带来极高的误报率。
- 测试结果对比中的艺术。在将测试的实际输出结果和期待结果进行比对中,PHP 官方自动化测试方法巧妙地应用了正则式比对和格式比对方法。这两种方法的引入使得测试的误报率大大降低。因为如果没有正则式比对和格式比对方法,则测试人员只能将当前本次测试期待结果记录在期待值中,而这种期待值将可能成为测试脚本的硬码( hard code ),在回归测试或期待结果是随机值等情况下造成测试的误失败。
- 保留充分的日志信息。测试结束后,对于那些失败的测试,测试人员要分析失败的原因。此时,测试日志将发挥很重要的作用。充分的日志信息保留了测试失败的现场,将帮助测试人员尽快找到失败的原因并报告给开发人员。 PHP 官方自动化测试框架给予用户灵活的设置方式去选择需要的日志种类。在各种日志中,不仅将实际测试结果保留在了 “ .out ” 日志文件中,还将 “ .diff ” 留给用户。“ .diff ” 文件能帮助测试人员更快地发现期待值与实际测试结果的差别,以更快发现测试失败的问题所在。
然而,在 PHP 官方自动化测试框架中也存在一些对于用户来说不完美的地方,比如:在测试异常的情况下,不能输出完整的测试总结报告。如果测试人员需要完成一个长达十个小时的测试,而测试在第九小时发生了异常,但测试却无法给出所有跑过的测试的测试报告,这将是很恼人的。所以在自动化测试框架的实现中要考虑好测试异常情况下的处理。
结束语
PHP 官方自动化测试方法给黑盒测试人员提供了一个很好的自动化测试框架的范例。测试人员不仅可以利用 PHPT 测试脚本完善对 PHP 的测试,更可以通过学习这个范例构建自己的自动化测试框架和工具,让测试的自动化更好地服务于测试工作。
文章来源于领测软件测试网 https://www.ltesting.net/