使用鳞片COCO和SQUISH GUI测试仪测量代码覆盖

最后编辑了

测量ASP.NET Web应用程序使用鳞片COCO的代码覆盖& tests run by Squish for Web

介绍

本文演示了使用鳞片COCO的ASP.NET(C#)Web应用程序的测量代码覆盖。此外,自动化测试由Web挤出执行,测量每个GUI自动测试的代码覆盖。代码覆盖洞察力使团队能够通过去除唐的测试来改善自动化测试套件’T增加测试覆盖范围,并识别仍未测试的区域。类似的成就可以使用其他Web自动化测试,甚至可以通过手动测试进行。每个执行后,测试执行顺序,指示如何最大化代码覆盖率。该计算显示了一种测试序列,首先出现具有最高码覆盖率的测试。在为在有限时间内运行的自动化测试子集(即Sanity / Brash自动测试)时,在挑选自动化测试的子集时是必要的。

Web应用程序仪器

用于演示此解决方案的示例应用程序是在Visual Web开发人员中使用C#设计的简单ASP.NET MVC 5 Web应用程序。 MVC代表模型 - 视图控制器,是开发应用程序的模式,其中包含:模型(代表应用程序数据的类),视图(生成HTML响应的模板)和控制器(处理传入浏览器请求的类,检索模型数据,并指定模板视图,该视图返回对浏览器的响应)。代码覆盖分析将揭示在执行单一自动化测试期间使用的每个部件。

应用程序Frog目录在LocalHost上的Visual Studio中运行,但也可以在远程主机上部署并运行。 Frog目录维护青蛙目录,存储物种,出生日期,性别和价格等信息。该应用程序提供创建,编辑和删除条目和优惠的功能,并提供过滤和搜索功能。

应用程序索引页面屏幕截图

在蜂鸣器安装期间,原始的C#编译器由CoverageCanner替换。 CoverageCanner仪器源代码,它允许代码覆盖测量功能,之后它调用原始编译器来执行应用程序,将源代码未被调用。在Visual Studio项目中激活仪器,请转至 项目属性, 点击 建造 标签并输入 COVERAGESCANNER_COVERAGE_ON 在里面 条件编译符号 box.

激活Visual Studio中的仪器

After each build, a Squish Coco instrumentation file (.csmes) is generated. In the example application, Frog Directory, the file is called FrogDirectory.dll.csmes 并位于 obj\Release 子目录。双击该文件以在CoverageBrowser中检查它。由于申请尚未执行,目前没有提供覆盖统计信息。

嘲笑网站集成

为了生成任何代码覆盖,我们需要对正在运行(和先前读取的)应用程序上执行一些操作。可以手动或使用自动化执行操作(即运行单元测试或自动GUI测试)。 GUI自动测试可以使用Web的Quish设计ASP.NET应用程序。为了整合Web和Squish Coco,我们需要将一小部分代码添加到自动化测试和Web应用程序。

init Function

实施A. init 函数,在每个测试开始时调用。该函数通过调用a将信息传递给Web应用程序 loadull. 指示测试用例的功能已启动。

function init(){
    testCase = squishinfo.testCase.split("\\").pop();
    loadull.("http://localhost:49221/Frogs/Coco/"+testCase+"?start=1");
}
init函数

cleanup Function

实施A. cleanup 函数,在每个测试结束时调用。此功能将信息传递给指示给定的测试用例结束的Web应用程序,并且具有给定状态(传递或失败)。将这两种函数放在共享的测试套件资源中,确保在测试套件中调用它们的每个测试用例。

function cleanup(){
    testCase = squishinfo.testCase.split("\\").pop();
    teststate = "PASSED";
    if(test.resultCount("errors")>0 || test.resultCount("fails")>0 || test.resultCount("fatals")>0)
        teststate = "FAILED";

    loadull.("http://localhost:49221/Frogs/Coco/"+testCase+"?teststate="+teststate);
}
清理功能

Handling the initcleanup Functions

需要在Web应用程序中实现额外的C#函数以处理来自的请求 initcleanup 职能。这 init 功能导致C#CoverageCanner库函数 __coveragescanner_clear() 被调用,重置所有仪器的状态。这 cleanup 功能导致 __coveragescanner_testname(id) 要被调用,该设置当前正在执行的测试用例的名称。之后是这一点 __coveragescanner_teststate is called, and sets the result of executed test to PASSED|FAILED|CHECK_MANUALLY. Finally __coveragescanner_save() 使用先前设置的文件名执行并保存执行报告 __coveragescanner_filename。使用这种通信方法(加载URL’在Web和Squish Coco的Quish之间进行了定义语法,允许将Web和ASP.NET Web服务器挤出到不同的主机上。 Squish Coco执行报告存储在Web服务器正在运行的主机(在TEMP目录中)。

public ActionResult Coco(string id, string teststate, string start)
        {
            if (!String.IsNullOrEmpty(start))
            {
                CoverageScanner.__coveragescanner_clear();
            }

            if (!String.IsNullOrEmpty(teststate))
            {
                CoverageScanner.__coveragescanner_testname(id);
                if (teststate == "PASSED" || teststate == "FAILED")
                {
                    CoverageScanner.__coveragescanner_teststate(teststate);
                }
                else
                {
                    CoverageScanner.__coveragescanner_teststate("CHECK_MANUALLY");
                }

                string tempDir = Environment.GetEnvironmentVariable("temp");
                CoverageScanner.__coveragescanner_filename(tempDir+Path.DirectorySeparatorChar+"coco");
                CoverageScanner.__coveragescanner_save();
            }
            return View();
        }
控制器类内的Coco函数

代码报道测量分析

接下来我们’ll运行三个测试用例(tst_addfrog,tst_filterfrog和tst_searchfrog)并加载执行报告(csexe 文件位于 %temp% CoverageBrowser中的目录(选择 文件 > 加载执行报告)。 CoverageBrowser分析了自动测试运行时执行的代码。它还提供 线覆盖范围, 功能覆盖范围分支,决策和条件覆盖范围 和 analysis.

在CoverageBrowser中加载执行报告

要查看最佳执行顺序,请选择 工具 > 优化的执行顺序。在以下示例中,最佳顺序是tst_searchfrog和tst_filterfrog。从代码覆盖范围内,第三个测试用例TST_ADDFROG是冗余的,因此从报告中省略。

最佳执行顺序

附加信息