代码覆盖率 vs 测试覆盖率(功能覆盖率)
代码覆盖率:表示通过用Selenium或任何其他测试自动化框架进行的手动测试和自动化测试,测试用例覆盖的代码百分比。 例如,如果您的源代码具有一个简单的if ... else循环,则如果您的测试代码可以覆盖这两种情况(即if&else),则代码覆盖率将为100%。
测试范围:包括测试作为功能需求规范,软件需求规范和其他必需文档的一部分而实现的功能。 例如,如果要对Web应用程序执行跨浏览器测试 ,以确保您的应用程序是否可以从其他浏览器很好地呈现? 您的测试覆盖范围是已验证Web应用程序的浏览器兼容性的浏览器+操作系统组合的数量
深入了解代码覆盖率
如何执行代码覆盖率
- 分支机构覆盖范围–分支机构覆盖范围也称为决策覆盖范围,用于确保决策过程中使用的每个可能的分支都得以执行。 例如,如果您使用代码中的If…Ans条件语句或Do…While语句合并回退以实现跨浏览器兼容性,则它是覆盖范围的一部分; 您必须通过提供适当的输入以使跨浏览器兼容的网站来确保测试所有分支(即If,Else,Do和While)。
- 功能覆盖范围–功能覆盖范围可确保测试必要的功能(尤其是导出的功能/ API)。 这还应包括使用不同类型的输入参数测试功能,因为这也将测试功能中使用的逻辑。 一旦测试了代码中的所有功能,功能覆盖率将为100%。
- 语句覆盖率–这是一种重要的代码覆盖率方法,其中必须以某种方式编写测试代码,即源代码中的每个可执行语句至少执行一次。 这也包括极端情况或边界情况。
- 循环覆盖–这种方法是确保源中的每个循环至少执行一次。 可能会根据您在运行时获得的结果执行某些循环,同样重要的是测试此类循环以使代码万无一失。
代码覆盖率检测工具
- Coverage.py –这是Python的代码覆盖工具。 顾名思义,它可以分析您的源代码并确定已执行代码的百分比。 它是用Python开发的。 它是免费的,您可以参考https://coverage.readthedocs.io/en/coverage-5.0.3/了解更多信息。
- Serenity BDD –支持Java和Groovy编程语言,Serenity BDD是一个流行的开源库,主要用于更快地编写出色的质量验收测试。 您可以使用故事和史诗进行测试,并为这些故事和史诗计算代码覆盖率。 因此,生成的测试报告实际上更具说明性和叙述性。 您可以将这些自动化测试映射回您的需求中。 它可以与JUnit,Cucumber和JBehave一起使用。 Serenity BDD可以轻松地与Maven,Cradle,JIRA和Ant集成。 如果您使用Selenium WebDriver或Selenium Grid框架进行自动化测试,则选择Serenity BDD将具有巨大的优势,因为它与Selenium兼容。 您可以参考https://www.thucydides.info/#/documentation了解更多信息。
- JaCoCo – JaCoco是Java的代码覆盖工具。 尽管还有其他选项,例如Cobertura和EMMA,但由于长时间没有更新,因此不推荐使用这些工具。 JaCoCo工具是Eclipse Foundation的一部分,它替代了Eclipse中的EMMA代码覆盖工具。 除了积极开发JaCoCo之外,使用JaCoCo的另一个优势是可以与CI / CD和项目管理工具(例如Maven,Jenkins,Gradle等)无缝集成。请访问官方网站以获取更多信息。
- JCov – JCov是测试框架不可知代码覆盖工具。 它可以轻松地与Oracle的测试基础架构JavaTest和JTReg集成。 尽管尚未积极开发,但对即时检测和脱机检测的支持是使用JCov的主要优势。 请访问https://wiki.openjdk.java.net/display/CodeTools/jcov了解更多信息。
- PITest –大多数代码覆盖率工具都会检查代码的分支覆盖率,语句覆盖率,循环覆盖率等,并给出覆盖率结果。 尽管这些信息对于提高测试代码的质量很有用,但是测试并不能告诉您自动化测试在发现错误方面的表现如何。 这是突变测试非常有用的地方。 PITest是一种非常流行的代码覆盖工具,用于Java和JVM的变异测试。 它通过修改您的测试代码来完成变异测试的工作,并且现在在此修改后的代码上执行单元测试。 如果使用此代码发现了错误,即PITest添加了额外的代码后,则单元测试是万无一失的。 否则,由于尚未发现问题,因此需要进行更改。 PITest易于使用,快速且正在积极开发中。 它还与流行的CI / CD工具集成在一起,使其更加有用。 有关更多信息,请访问http://pitest.org/ 。
代码覆盖率方法
逻辑覆盖测试包括的方法有:语句覆盖、路径覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖。