Php 集成测试列表页的测试数据策略

Php 集成测试列表页的测试数据策略,php,testing,integration-testing,Php,Testing,Integration Testing,我的应用程序是列表页面:例如,商店的产品/类别、目录中洛杉矶的医生列表或搜索结果等 我正在对遗留应用程序进行重组/重构/现代化,并且在启动时,我可以编写的唯一测试类型是集成测试,例如使用Selenium/equivalent实际访问服务器上的页面。急需重构的代码包括处理列表过滤的极其复杂和臃肿的函数。我需要集成测试来确保代码不会被重构破坏。随着重构的进行,我将慢慢地集成单元测试 我了解如何创建集成测试,即检查产品页面是否存在以及是否有相关数据。我可以有一些预定义的产品作为种子数据库数据,这些数据

我的应用程序是列表页面:例如,商店的产品/类别、目录中洛杉矶的医生列表或搜索结果等

我正在对遗留应用程序进行重组/重构/现代化,并且在启动时,我可以编写的唯一测试类型是集成测试,例如使用Selenium/equivalent实际访问服务器上的页面。急需重构的代码包括处理列表过滤的极其复杂和臃肿的函数。我需要集成测试来确保代码不会被重构破坏。随着重构的进行,我将慢慢地集成单元测试

我了解如何创建集成测试,即检查产品页面是否存在以及是否有相关数据。我可以有一些预定义的产品作为种子数据库数据,这些数据将在每次测试之前重置,并在测试中明确引用这些产品

但是,如何为一些复杂的列表页面设置测试-按价格/自定义属性筛选产品,按专业和城市筛选医生等+结果分页?如果我想手动检查这一点,我需要大量的测试数据,并抽查过滤器是否按预期运行,分页是否正常。显然,我正在尝试自动化这个过程,但我正在努力解决如何将测试与测试数据联系起来的问题

我正在考虑的一些方法:

  • 设置测试数据,记录结果当前的显示方式(在重构代码之前),然后记录测试中的硬代码

    缺点:依赖于大量测试数据的硬编码测试期望看起来非常脆弱!只需将一条记录添加到数据库中,就可以使筛选器的预期结果发生偏差

  • 提取代码当前使用的SQL,在测试中运行该SQL,并将结果与页面中的结果进行比较

    优点:若将记录添加到数据库中,只要sql查询不变,测试就不会中断

    缺点:感觉复杂

  • 重新考虑过滤器页面是否需要测试,以及哪些部分需要测试


  • 对于过滤系统,能否设置过滤器,使每种类型有两个过滤器值?这样,您就可以检查每种类型的过滤器是否单独或累积工作。如果以相同的方式应用每个筛选值(相等测试),则检查每个筛选值是否有效可能并不重要。@halfer我可以同时使用多个筛选-例如city+Speciality。但我不确定这是否是你的意思。请您再解释一下。对于城市,请使用“伦敦”和“柏林”(即使您有更多/其他价值观)。对于专业,使用“儿科”和“心脏”(即使你有更多/其他价值观)。然后测试(a)无过滤器,(b)每个过滤器中的一个,(c)两个过滤器一起。在这样做的过程中,您正在检查您的过滤器系统的工作情况,而无需测试每个过滤器组合。您可能希望检查实际使用的特定筛选器的唯一原因是,它们的工作基础是否与其他筛选器不同,例如,它们不是简单的相等筛选器。感谢您的输入。是的,不同的过滤器工作方式不同,例如,它们向sql添加额外的表,并以不同的方式进行处理。我从您的方法中了解到的是将测试数据保持在最小值,这样对于我正在测试的每个过滤器,结果集应该只包含1-2个结果,这听起来更易于维护。并且不需要与过滤器一起测试分页,因为这可以独立测试。