Php codeception夹具性能的最佳实践

Php codeception夹具性能的最佳实践,php,performance,testing,codeception,fixtures,Php,Performance,Testing,Codeception,Fixtures,此时,我的codeception测试执行了半个小时,显然,当我添加新测试时,这一时间会增加 我试图在测试中获得更好的性能,因为在推送之后,我常常忘记我推送的东西是因为测试速度慢 现在我发现我最大的问题是固定装置。这里是非常描述性的blackfire简介: 只有加载和卸载夹具需要93%的时间,但测试本身需要5%的时间 我原以为我可以在所有测试中使用一组固定装置,并在每次测试后回滚事务,但我发现,随着大量测试用例的出现,维护此类数据变得越来越困难——添加新的测试用例总是会破坏一些旧的测试 那么,有

此时,我的codeception测试执行了半个小时,显然,当我添加新测试时,这一时间会增加

我试图在测试中获得更好的性能,因为在推送之后,我常常忘记我推送的东西是因为测试速度慢

现在我发现我最大的问题是固定装置。这里是非常描述性的blackfire简介:

只有加载和卸载夹具需要93%的时间,但测试本身需要5%的时间

我原以为我可以在所有测试中使用一组固定装置,并在每次测试后回滚事务,但我发现,随着大量测试用例的出现,维护此类数据变得越来越困难——添加新的测试用例总是会破坏一些旧的测试


那么,有什么解决方案可以减少夹具所消耗的时间吗?也许可以在这里为每一组测试使用原始SQL转储?或者我应该编写一个巨大的shell脚本,将转储恢复到数据库并分别运行每组测试吗?

对此没有简单的答案。这里有一些过去对我有用的东西。有些可能不适用于您的应用程序,或者可能没有意义。我希望这里有一些对你有用的东西

减少每次测试必须加载的夹具数量

定义一组可供所有测试使用的公共数据(用户、产品、应用程序中的任何数据)。它不一定是一套“一对一”的。更多地将其视为共同点。不应在测试中修改此数据,或者至少不应以破坏测试的方式修改此数据。在运行测试套件之前加载此夹具。在每个测试中,仅加载此特定测试所需的附加装置

更换Yii固定装置

我不熟悉Yii,但框架夹具加载程序通常效率不高。也许你最好使用自己的工具

切换到内存中数据库

通常会快一点到一整点

复制数据库

通过加载夹具一次,创建数据库副本,然后重新加载,可以减少加载时间。SQL转储是实现这一点的一种方法。使用SQLite,您可以简单地创建数据库文件的备份,并在每次测试之前将其复制回来

如果我没弄错的话,您有一组共享相同数据的测试。您可以为每个集合创建一个套件。添加一个测试侦听器,在套件运行之前加载设备并创建副本,并在每次测试之前恢复备份

对用例进行单元测试


这并不完全符合您的要求,但这将大大减少运行测试所需的时间。当您对所有用例进行单元测试时,您将需要更少的端到端测试。这取决于您的体系结构,目前可能不可行,但开始朝着这一方向努力永远不会太迟。

我曾想过类似的事情。我有很多单元测试,比codeception测试多,而且它们通过的时间不到一秒。但有时我应该使用数据库。我根本不能使用sqlite,因为逻辑严重依赖于存储过程。所以,是的,我想我应该停止使用固定装置,而应该在一开始就想出一些办法。