本章:

概要

TIA(测试影响分析)功能分析您的被测应用程序的覆盖率数据,并生成自上次构建以来受到更改影响的测试列表。测试列表将保存到 .lst 文件,您可以将其作为资源传递到 SOAtest 命令行界面。SOAtest 将仅对 TIA 识别的受影响的测试子集进行验证,以验证更改。以下概述描述了测试影响分析过程: 

  1. 配置配置SOAtest附带的覆盖的代理(agent.jar),将其附加到您的AUT,并启用SOAtest与该代理进行通信。  
  2. 收集有关哪些测试用例涵盖的信息: 运行完整的测试套件,以便代理可以收集有关测试及其涵盖的代码的数据。
  3. 生成基准覆盖率报告:处理代理收集的数据以创建基线报告。  
  4. 生成包含受更改影响的测试的.lst文件:当有新版本的应用程序可用时,请运行 TestImpactAnalysis 脚本来处理基线覆盖率报告。会创建一个含有受更改影响的测试的.lst文件。
  5. 运行受变更影响的测试: 将最新版本的应用程序(.war)部署到您的服务器,并运行使用.lst文件作为输入来执行 SOAtest 的作业,以验证更改。   

配置

TIA分析旨在作为自动化过程的一部分实施。执行以下步骤以启用TIA。

打包您的应用程序。

将要测试的应用程序打包到可部署的.war文件中。  

将覆盖代理关联到AUT中

SOA测试包括一个Java代理,该代理生成SOA测试所必需的覆盖率信息来确定哪些测试受更改影响。 

代理位于 <INSTALL>/test_impact_analysis/integration/coverage 目录它从同一目录下的agent.properties文件中获取配置设置。您应该将包含 agent.jar 和 agent.properties 文件的 coverage 目录复制到运行 AUT 的计算机上。

配置覆盖代理

应用程序服务器通常包含多个应用程序。此外,不需要检测通用服务器类或应用程序库。代理仅需要收集应用程序源代码的覆盖范围。对所有类进行检测将非常耗时。因此正确设置覆盖代理的范围非常重要。

您可以通过修改agent.properties 中的属性并将这些属性传递给-javaagent参数来配置覆盖代理。该代理支持多个参数(请参见 Coverage Agent Parameters),但是配置默认设置适用于大多数情况:

jtest.agent.serverEnabled=true
jtest.agent.includes=com/myapp/data,com/myapp/common/**
jtest.agent.excludes=com/myapp/transport/*,com/myapp/autogen/**
jtest.agent.associateTestsWithCoverage=true
jtest.agent.autostart=false

覆盖代理参数

下表描述了可以为代理设置的所有属性:

jtest.agent.associateTestsWithCoverage启用/禁用将覆盖率与特定测试相关联; 默认值为 false.
jtest.agent.runtimeData指定应用程序在服务器上的位置,代理用于存储它在运行时收集的覆盖数据。 
jtest.agent.includes

以逗号分隔的模式列表,用于指定要检测的类。支持以下通配符:

*匹配 0 或多个字符
** 匹配多个目录级别

在以下示例中,将检测 com.myapp.data 包中的所有类以及以 com.myapp.common开头的包和子包中的所有类:

com/myapp/data/*,com/myapp/common/**

jtest.agent.excludes

以逗号分隔的模式列表,用于指定要从检测中排除的类。支持以下通配符:

*匹配 0 或多个字符
** 匹配多个目录级别

在以下示例中,将检测 com.myapp.transport 包中的所有类以及以 com.myapp.autogen开头的包和子包中的所有类将从检测中排除:

com/myapp/传输/*,com/myapp/autogen/**

jtest.agent.autostart启用/禁用自动运行时数据收集; 默认为 true.
jtest.agent.port 设置代理通讯端口; 默认值为8050.
jtest.agent.debug 启用/禁用向控制台的详细输出; 默认为 false.
jtest.agent.collectTestCoverage 启用/禁用收集测试用例的覆盖范围信息; 默认为 false 。
jtest.agent.enableMultiuserCoverage 

启用/禁用收集多个用户的 Web 应用程序覆盖率; 默认为 false 。 

jtest.agent.serverEnabled激活代理。

配置属性后,在启动应用程序服务器以附加代理并包含代理配置文件时添加 -javaagent参数。  

-javaagent:'/path/to/agent.jar'=settings='/path/to/agent.properties',runtimeData='/path/to/runtime_coverage' 

为方便起见,覆盖目录包含一个将生成-javaagent参数的脚本。运行 agent.sh 或 agent.bat 脚本,然后将输出复制到服务器启动脚本。

$ ./agent.sh
将此 Java VM args 添加到您的进程中:
---------------------------------------------------
-javaagent:"/home/TIA/test_impact_analysis/integration/coverage/agent.jar"=settings="/home/TIA/test_impact_analysis/integration/coverage/agent.properties",runtimeData="/home/TIA/test_impact_analysis/integration/coverage/runtime_coverage"
---------------------------------------------------
Press any key to continue .、、 

在以下示例中,该代理通过 catalina.sh(Linux)或 catalina.bat(Windows)脚本开头的 JAVA_OPTS 变量连接到 Tomcat 服务器:

Linux 和 MacOS
if [ "$1" = "start" -o "$1" = "run" ]; then
JAVA_OPTS='-javaagent:"/home/TIA/test_impact_analysis/integration/coverage/agent.jar"=settings="/home/TIA/test_impact_analysis/integration/coverage/agent.properties",runtimeData="/home/TIA/coverage_storage"'
fi
Windows
if "%1"=="stop" goto skip_instrumentation
set JAVA_OPTS=-javaagent:"C:\TIA\test_impact_analysis\integration\coverage\agent.jar"=settings="C:\TIA\test_impact_analysis\integration\coverage\agent.properties",runtimeData="C:\TIA\coverage_storage"
:skip_instrumentation

启动应用程序并通过 在浏览器中打开<host>:8050/status来验证代理已经准备好了。您应该看到一个 包含 test,runtime_coverage 和 testCase 属性的 JSON 对象,例如:

{"test":null,"session":"runtime_coverage_20191008_1537_0","testCase":null}

您还可以使用 runtimeData 属性检查(在上面的示例中为/home/TIA/coverage_storage )指定的目录。该目录应包含一组静态覆盖数据文件。文件在代理启动时生成。 

创建测试配置

您将需要在 SOAtest 中创建一个测试配置,该配置将测试执行信息报告给覆盖代理。测试配置仅需要创建一次。

  1. 在 SOAtest 菜单中选择 Parasoft> Test Configurations ,然后展开 Builtin 类别。
  2. 右击 Demo Configuration 并且选中 Duplicate
  3. 为配置指定一个新名称(i.e., TIA_agent),然后点击Execution标签。
  4. 单击 Application Coverage选项卡,然后指定托管测试中的应用程序和覆盖代理的主机名或 IP 地址,以及代理的端口号。端口号应与 agent.properties 文件中的jtest.agent.port设置值匹配(默认值为8050)。
  5. 单击 Test Connection以验证 SOAtest 可以与代理进行通信。 
  6. (可选)在 Coverage agent user Id下,您可以指定一个用户下,您可以指定一个用户 ID,以便覆盖率结果可以与特定的用户相关联。仅当在 agent.properties 文件中将jtest.agent.enableMultiuserCoverage属性设置为true时才应指定用户 ID。当多个用户或自动测试运行配置为同时访问 AUT 的同一实例时,我们建议指定代理用户 ID。这样一来,他们之间的互动就不会影响测试与覆盖其他用户的代码之间的相关性。
  7. 如果希望在覆盖率代理连接失败时报告测试失败,请然后启用中 Report coverage agent connection failures as test failures选项。否则连接问题将报告给控制台,但不会导致测试失败。
  8. 启用 Retrieve coverage data选项,并指定一个目录,用于在其中本地存储运行时覆盖率数据。
  9. 单击 Apply ,保存变更。

分析保存到该目录的数据以生成基线覆盖率报告。

使用新的测试配置运行完整的测试套件。如果您已经有自动测试运行,则可以修改现有作业以使用新的测试配置,例如:

soatestcli.exe -data <your workspace> -resource <your tests> -localsettings <properties file with SOAtest settings> -config <new test configuration> 

有关使用 SOAtest 构建测试执行命令的详细信息,请参见在命令行界面使用 - soatestcli 进行测试。您也可以从SOAtest GUI手动运行测试

生成基线覆盖率

SOAtest 包含用于创建基准覆盖率报告的脚本。该脚本分析了完整测试运行收集的覆盖率数据和供 AUT 生成报告的 WAR 文件。根据您的操作系统,您可以运行<INSTALL> / test_impact_analysis 目录中的 the TestImpactAnalysis.bat (Windows)或者 TestImpactAnalysis.sh (Linux/macOS) 脚本。  

用于 Linux / MacOS 的 TEMP 目录

如果尚未设置变量,则可能需要修改 .sh 脚本并指定一个临时目录,例如:

#!/bin/bash 
TMP=/tmp 

测试完成后,请使用以下语法运行 TestImpactAnalysis.sh 或 TestImpactAnalysis.bat 脚本以生成覆盖率报告。

./TestImpactAnalysis.sh -app <PATH TO AUT WAR FILE> -运行时间覆盖 <PATH_TO_RUNTIME_COVERAGE> -输出报告 <PATH_TO_OUTPUT_REPORT_DIR> -包含 <SPACE_SEPARATED_PATTERNS> -排除 <SPACE_SEPARATED_PATTERNS>
  • -app标志指定可部署的 .war。您应该为自动化测试运行指定与 AUT 部署相同的工件(请参阅 Package your Application).
  • -runtimeCoverage 标志指定您在测试配置中配置的目录。
  • -outputReport 标志是可选的,它指定将覆盖率报告输出到何处。
  • -include 标志是可选的,它指定要用空格分隔的模式列表以包括在分析中。默认情况下,包括所有测试类。  
  • -exclude 标志是可选的,它指定要用空格分隔的模式列表以排除在分析中。匹配使用 -include标志指定的模式的类将覆盖排除的模式。
  • 如果要保留用于生成基线 coverage XML 报告的运行时间覆盖数据文件,请添加-keepRuntimeCoverage选项。此参数不带值,主要用于调试目的。如果命令中未包含该文件,则在执行结束时将删除运行时间覆盖数据文件。  

示例命令:

TestImpactAnalysis.bat ^
-app C:\tomcat\webapps\application.war ^
-runtimeCoverage C:\TIA\runtime-coverage ^
-outputReport C:\TIA\reports ^
-include com\myapp\data\**,com\myapp\common\** ^
-exclude com\myapp\transport\**,com\myapp\autogen\** 
./TestImpactAnalysis.sh \
-app /home/tomcat/webapps/application.war \
-runtimeCoverage /home/TIA/runtime-coverage \
-outputReport /home/TIA/reports \
-include com/myapp/data/**,com/myapp/common/** \
-exclude com/myapp/transport/**,com/myapp/autogen/** 

脚本完成后,coverage.xml 报告将保存到使用-outputReport标志指定的位置。如果此标志不包括,此文件将被默认保存在<USER_HOME>/parasoft/test_impact_analysis/reports/目录下。

生成受变更影响的测试列表

当有新版本的应用程序可用时,请使用以下语法运行 TestImpactAnalysis.sh 或 TestImpactAnalysis.bat 脚本:

TestImpactAnalysis.sh -app <PATH_TO_NEW_WAR> -coverageReport <PATH_TO_COVERAGE_XML_REPORT> -outputLst <PATH_TO_LST>

脚本完成后,结果将保存到带有-outputLst标志的指定目录中的 .lst 文件中。如果此标志不包括,此文件将被默认保存在 <USER_HOME>/parasoft/test_impact_analysis/lsts/目录下。 .lst 文件的默认名字为 <yyyyMMdd_HHmmss>_affected_tests.lst.仅当测试受更改影响时才会生成 .lst 文件。

执行受变更影响的测试

要仅执行 TIA 报告的测试,请在 SOAtest 执行期间使用 -resource参数指定 .lst 文件:

soatestcli.exe -data <您的工作区>-资源<.lst 的路径> -localsettings <具有 SOAtest 设置的属性文件> -config <您的团队的测试配置> 

有关使用 SOAtest 构建测试执行命令的详细信息,请参见在命令行界面使用 - soatestcli 进行测试


  • No labels