测试需要很长时间才能运行。例如,有一个 PHPUnit 工作的结果:
Time: 669.95 seconds, Memory: 34.00MB
OK, but incomplete, skipped, or risky tests!
Tests: 4990, Assertions: 18999, Skipped: 218.
你怎么知道时间都去哪儿了?哪些测试耗时最长?
是否可以在不安装和使用第三方实用程序的情况下获取此类信息?理想情况下,应该在测试执行之后或执行期间立即显示长测试信息,如果数据以编程方式可用则更好。越简单越好。
启动 PHPUnit 的键没有类似的东西。
在文档中,
phpunit您可以立即找到两个可供选择的常规选项:XML 日志
启用日志记录,例如,可以选择
--log-junit log.xml将日志写入 XML,包括每个测试的执行时间。文档的结构很简单,添加任何进一步的处理应该不是问题。文档中的示例日志:属性
time- 以秒为单位的执行时间。顺便说一句,检查您的
CI日志本身是否可以理解这个日志本身,或者它是否理解附近的格式,--log-teamcity或者--testdox-xml- 那里也有一个运行时。为事件添加监听器
事件
startTest是endTest为自己提供的。一般来说,一个endTest就足够了,作为第二个参数,测试执行时间已经以完成的形式传递了。并在 config 中注册
phpunit:剩下的只是决定
listener从中输出什么以及在哪里输出。更多选项可以做任何事情,但phpunit在调用后添加一点 xml 阅读器可能会更快更容易。我建议使用Allure 框架——一个用于生成开箱即用的测试报告的特殊框架,它已经包含 90% 以上的实际构建测试报告的必要功能(包括测试的分类、它们的优先级、相关指示)任务跟踪器中的错误测试、任意附件、单个步骤的记录等),包括有关测试执行时间的简单图表:
以及有关每个测试的信息:
Allure 是专门为解决这种性质的问题而创建的,所以我只是不明白开发自己的某种解决方案的意义。
要生成这样的报告,只需遵循三个步骤:
在元数据目录上下载并设置allure-cli :
结果将是一组包含在 index.html 中的应用程序的文件。打开将需要一个任意服务器(Allure 需要发出 AJAX 请求,浏览器通常不允许文件),它已经包含在 allure-cli 中:
之后,你可以在http://localhost:3333看到结果
Sergey 提出的选项接近理想,它只显示所有测试。并且有必要只看到缓慢的。
但是,这很容易解决:
在本课程中,所有测试结束后,所有耗时超过十分之二秒的测试都将发布一份报告。
在较新版本的 PHPUnit 中,您需要继承自
PHPUnit\Framework\BaseTestListener.相应地出现一个
phpunit.xml部分: