本章:

概要

SOAtest 可以使用 Parasoft 录制器捕获到的 API 通讯报文为 web 应用程序自动创建 API 测试。以这种方式创建的测试称为“智能” API 测试。开箱即用的实现旨在帮助您快速快速启动测试,但您也可以“指导”SOAtest 您希望生成智能 API 测试的方式。

示例智能测试模板 

您可以创建智能测试模板(.stt)文件来定义确定测试生成行为的规则。这些文件包含一个或多个资源套件这些资源套件标识了将要应用测试生成规则的应用程序路径。 

资源套件包含一个或多个资源模板,这些模板定义了在生成智能测试时要包括的 API 方法和资源的范围。可以将工具链附加资源模板中,并配置它们来定义特定的测试生成行为。链接到资源模板的工具根据资源模板中定义的范围应用. 

SOAtest 创建新的智能 API 测试时,它将读取并应用 .stt 文件中指定的规则。 

手动创建并配置测试模板

可以使用 Smart Test Templates View创建并管理 .stt 文件。此外,可以添加多个 .stt 文件并将它们组织到文件夹中。

  1. 选择 Parasoft> Show View> Smart Test Templates 以打开智能测试模板视图(如果仍没有打开)。
  2. 单击 Add Template 按钮,为 .stt 文件指定名称和位置。
  3. (可选项)可以指定一个路径来创建组织 .stt 文件的嵌套文件夹。
     e
  4. 单击 Next
  5. 选择要创建的资源套件类型。可以创建一个空的套件,或者基于服务初始化套件。

    如果正在使用定义文件,请查阅以下部分以获得更多信息。

    从 OpenAPI/Swagger 定义中创建测试

    从 RAML 定义中创建测试

    从 WADL 中创建测试

  6. 如果正在基于服务定义创建一个套件,并指定定义文件的位置,请单击 Next 。跳过这一步,创建一个空的套件。
     
  7. 单击 Finish
  8. 展开 .stt 文件,然后双击 Resource Suite。 
  9. (可选项)可以禁用 Use Default Name 选项并文件指定名称。
  10. 在 Match 字段中指定一个模式来标识端点 you want the rules in this suite to apply to (请查阅 Defining Smart API Test Generation Scope)。Resolved 字段呈现模式预览。Nested Resource Suites 继承父资源套件的 Match 设置。可以确定如何构造模板文件并相应地配置匹配的模式。关于常见用例,请查阅 Example Smart Test Template 。  
  11. 右键单击 Resource Suite,然后选择 Add New> Resource Template
  12. (可选项)禁用 Use Default Name 选项,并在 Name 字段中指定资源模板的名称。
  13. 从 Method 下拉菜单中选择一种方法,并在 Match 字段中指定一种模式来标识端点 you want the rules in this suite to apply to (请查阅 Defining Smart API Test Generation Scope)。Resolved 字段呈现模式预览。资源模板继承父资源套件的 Match 设置。如果希望 SOAtest 为 Match 字段中指定的所有子路径生成测试,则可以禁用 Exact Match 选项。Exact Match 选项默认是启用的。

    SOAtest 确定资源模板中的匹配项时,将应用来自所有链式工具的配置。可以确定如何构造模板文件并相应地配置匹配的模式。关于常见用例,请查阅 Example Smart Test Template 。

    链接 JSON 断言器

    JSON 断言器 工具,链接到资源模板的该工具可以配置为使用当前通讯报文中的值。有关其他信息,请查阅 Adding JSON Assertions 

  14. 右键单击 Resource Suite,然后选择 Add Output...
  15. 选择要在生成的测试中包含的工具,并且配置设置。例如,可以链接并配置 HTTP 配置工具,以便使用模板生成的所有测试套件都会根据被测试的应用程序自动进行身份验证(关于更多信息,请查阅 Enabling Authentication )。
  16. 根据需要添加额外的资源套件和资源模板。.stt 文件按顺序从头到尾处理。在下一个套件被处理之前,根据其层级结构处理每个资源套件。可以添加尽可能多的套件和模板,并链接尽可能多的工具,以培训 SOAtest。 
  17. 保存变更。

从现有通讯报文文件生成测试 或使用 Parasoft 录制器 将应用的 .stt 文件中定义的浏览器扩展和配置来创建新测试。 

定义智能 API 测试生成器范围

在资源套件和资源模板中定义的模式将根据以下规则进行匹配:

  • 花括号,如 {}, 表示通配符并可以包含任意文本。例如,可以指定翻译为 scheme、host 和 port 的模式:

    {scheme}://{host}:{port}
     
  • 星号 (*) 也表示通配符。一个单星号加一个花括号,如,{},可以互换使用:

    {scheme}://{host}:*/parabank/*/accounts/{id}

  • 可以使用双星号来匹配多个目录。

    {scheme}://{host}:*/parabank/**/{id}

  • 排除 scheme、host 和 port 将匹配任何 scheme、host 和 port。例如,以下模式匹配任何主机、端口和方法上的特定路径:

    /parabank/services_proxy/bank/accounts/{id}
     
  • 为端口号视为通配符的端口指定一个负数或一个大于 65535 的数。
  • 资源模板和嵌套资源套件继承父资源套件的 Match 设置。 
  • 如果希望 SOAtest 为 Match 字段中指定的所有子路径生成测试,则可以禁用 Exact Match 选项。资源模板中的 Exact Match 选项默认是启用的。 

默认范围

默认情况下,SOAtest 将为场景中调用的所有资源创建测试,并且只对使用资源模板工具标识的资源应用培训工具。然而,可以配置 SOAtest,通过在 tst_configuration.properties 文件中的 includeURLPatterns 和 excludeURLPatterns 中指定 Ant 风格模式,包含或排出测试生成中特定的资源 URL。有关更多详情,请查阅 Test Creation Properties 。 

启用身份验证

SOAtest 使用 HTTP 身份验证工具来为测试配置身份验证凭证。HTTP 身份验证工具是一种特殊的工具,您只能在 .stt 文件中使用它。当 SOAtest 匹配资源模板工具中的设置时,在 HTTP 身份验证工具中配置的凭证将应用于生成的测试。 

  1. 右键单击 Resource Suite,然后选择 Add Output..
  2. 展开 Request 菜单,然后选择 Transport Header
  3. 从工具面板选择 HTTP Authentication ,然后单击 Finish。 
  4. 在 HTTP 身份验证工具中配置身份验证设置。支持以下身份验证:
    • Basic (HTTP 协议中内置的简单身份验证)
    • NTLM
    • Kerberos
    • Digest

关于配置身份验证设置的更多信息,请查阅以下部分:

SOAtest、

添加数据头

SOAtest 使用 HTTP 数据头工具来为测试添加数据头字段。HTTP 数据头工具是一种特殊的工具,您只能在 .stt 文件中使用它。当 SOAtest 匹配资源模板工具中的设置时, 在 HTTP 数据头工具中配置的任何数据头 都将自动添加到生成的测试。也可以使用功能此工具来覆盖测试在创建期间捕获到的数据值。 

  1. 右键单击 Resource Template 工具,然后选择 Add Output..
  2. 展开 Request 菜单,然后选择 Transport Header
  3. 从工具面板选择 HTTP Header ,然后单击 Finish。 
  4. 单击工具设置部分中的 Add 选项来定义值。
  5. 保存变更。

添加 JSON 断言

可以配置链接到资源模板工具的 JSON 断言来使用通讯报文中的值。使用 == 或 equals 作为操作符,并设置值字段 [Smart - From Traffic]

按类型划分的 JSON 断言器行为

可以在测试中使用几种类型的的断言(查阅 JSON 断言器 以获得其他信息)。以下部分描述 SOAtest 如何为每种断言类型应用设置。

值断言

  • 如果将值断言的 Expected Value 字段设置为 [Smart - From Traffic],则将从记录的通讯报文中设置值断言的 Expected Value 字段。
  • 如果将元素值字段设置为 [Smart - From Traffic] 并且操作设置为 == 或 equal,那么将根据记录的通讯报文设置值出现断言、数字断言和字符串比较断言的元素值字段和期望值字段。
  • 如果将值出现断言的期望值字段设置为 [Smart - From Traffic] 并且操作设置为 ==,那么值出现断言的期望值字段被设置为 1 或 0 。
  • 不会从通讯报文中设置正则表达式断言、表达式断言和自定义断言的字段。

结构断言

  • 如果出现断言的期望值字段设置为 [Smart - From Traffic] 并且操作设置为 ==,那么出现断言的期望值字段被设置为 1 或 0 。
  • 不会从通讯报文中设置 Has内容断言、Has 子断言和类型断言的字段。

差异断言

  • 如果 Base Value 字段设置为 [Smart - From Traffic] 并且通讯报文值验证成功,则 Base Value 字段将根据记录的通讯报文设置。
  • 如果将数字断言的 Difference Value 字段设置为 [Smart - From Traffic],则该字段将被设置为 0 。
  • 不会从通讯报文中设置日期差异断言、日期时间差异断言的差异配置字段。

范围断言

  • 如果 Lower Bound 和 Upper Bound 字段设置为 [Smart - From Traffic] 并且值验证成功,则该字段将根据记录的通讯报文来设置。在本例中,相同的通讯报文值将应用于断言中的所有字段。

其他 JSON 断言器行为

默认情况下,SOAtest 忽略时间戳,但是可以将其配置为忽略其他参数以满足您的需要。有关更多详情,请查阅 Test Creation Parameters 。  

根据 .tst 文件中的断言培训模板

可以将现有 .tst 文件中的断言逻辑应用来培训智能 API 测试生成器。请查阅 Training Based on .tst Files

添加测试套件引用

可以在您的 .stt 文件中引用其他测试套件,这使您能够包含可能是正确执行测试所必需的额外设置步骤。每个资源模板工具只会添加一个被引用的测试套件。引用包含的测试作为生成套件中的第一个测试添加。

相对路径是相对于 TestAssets 项目的。要引用另一个项目中的测试,请使用${project_loc} 变量。

有关引用的更多信息,请查阅 重用和模块化端到端测试的测试套件 。

  1. 右键单击 Resource Template 工具,然后选择 Add Output...
  2. 展开 Suite 类别,然后选择 Beginning
  3. 在 Smart 类别中选择 Test Suite Reference ,然后单击 Finish。   
  4. 指定要在测试套件引用编辑器中引用的测试套件位置。

    可以单击 File SystemWorkspace 浏览要引用的 .tst 文件。 
  5. 保存变更。 

基于 .tst 文件的培训

您可以教 SOAtest 生成测试,这些测试包括来自现有 REST Clients的身份验证设置和 JSON 断言逻辑。SOAtest 将在与 REST 客户端中指定的路径最接近的资源模板下创建 HTTP 身份验证或 JSON 断言器。如果未标识匹配项,将创建新的 .stt 文件,其中包含每个 REST 客户端 URL 的资源模板。.stt 文件将包含资源套件和资源模板,配置它们的 Match 设置以匹配 REST 客户端的端点。 

新的 .stt 文件的匹配模式基于您指导 SOAtest 的规则类型。对于身份验证,使用 REST 客户端的 schema、host 和 port 设置父套件匹配。父套件中包含的资源模板将被配置来匹配 REST 客户端的 basePath 和所有子路径和方法类型。

在指导 SOAtest 断言规则和测试套件的结构时,使用 REST 客户端的 basePath 设置父套件匹配。子路径在嵌套套件匹配和/或资源模板匹配中配置。资源模板将配置来匹配特定方法类型上的 "Exact" 字段。

  1. 右键单击 Test Explorer 中的 .tst 文件、测试套件或 REST 客户端节点,并选择 Train Smart Test Template。

  2. 提示时查看概要信息。SOAtest 将尝试配置现有 .stt 文件中的资源,并相应地添加新规则。如果没有找到匹配的 .stt,则将创建一个新文件。   

    使用 JSON 断言器培训智能 API 测试生成器

    具有固定值的等价断言(使用 ==equals 操作符)将基于通讯报文来创建。如果值 使用非等价断言参数化,则链接到资源的断言器将被转换为设置为 [Smart - User Input]的固定值。  关于参数化的等价断言,值将为 [Smart - From Traffic]

    新断言将被添加到 .stt 问价浓重的现有断言器。

  3. 单击 OK 更新或向包含在 REST 客户端中配置的设置的 Smart Test Templates 视图中添加一个新的 .stt 文件。如果创建了新的 .stt  文件,则文件将根据原始客户端的 URL 进行命名。模板资源将按基本路径段分组。可以右键单击智能测试模板视图中的文件,并重命名它。 
  4. 双击资源套件和资源模板,并配置它们的 Match 设置来定义测试生成范围。请查阅 Defining Smart API Test Generation Scope 
  5. 可以手动添加其他资源来完成配置 .stt 文件。请查阅 Manually Creating and Configuring Test Templates

将智能测试模板应用于现有 .tst 文件

可以更新现有测试以使用 .stt 文件中定义的规则。如果您已经拥有 REST 客户端,并且希望快速从模板应用一组标准的断言、身份验证设置和标头,则通常可以使用该功能。 

  1. 右键单击要应用规则的 .tst 文件,然后选择 Apply Smart Test Template
     
  2. SOAtest 会将资源路径与 REST 客户端 URL 匹配,并将在 .stt 中定义的规则应用于具有匹配 URL 的客户端(有关匹配条件的详细信息,请参阅 Defining Smart API Test Generation Scope )。提示时检查变更,然后单击 OK。   
     

示例智能测试模板

测试模板的结构将取决于您想要如何测试应用程序。下面的示例 .stt 表示被测试应用程序的一种方式(CTP) 。 

资源套件配置来匹配主机 "emdemo” 上的任何 schema、port 和路径。因此,为 emdemo 生成的任何测试都将在测试引用套件中包含工具引用。此外,测试将分别在 HTTP 身份验证和 HTTP 数据头工具中配置身份验证和数据头设置。  

每个资源模板都指向 emdemo 下的特定路径。每个资源模板中指定路径生成的任何测试都将包含链接工具中的配置。例如, "Resource 3” 配置来匹配 "/em/virtualassets/manage” 路径。因此, 包含此路径的测试 将包括一个 JSON 断言器,该断言器被配置为验证 响应中返回的资产配置。 

为 Salesforce 配置智能 API 测试生成器 

Salesforce 应用程序体系结构需要智能 API 测试生成来实现特定配置以正确生成测试。

打开 tst_creation.属性文件并配置以下属性,这些属性支持 Salesforce 的智能 API 测试生成: 

customHandlerClass.1=com.parasoft.webtool.testcreator.handlers.salesforce.AuraConfig

我们还建议配置以下属性: 

includeContentTypes=application/json, application/x-www-form-urlencoded, text/html, text/plain
disableDiffCreation=true
disableDiffParameterization=true
includeURLPatterns=**.force.com,**.salesforce.com

以下设置中指定的模式取决于 Salesforce 服务器配置:

excludeURLPatterns=*/jslibrary/,/file-asset/,/auraFW/resources/,/auraCmpDef?,*/LayoutMeta?,*/cometd/,/_nc_external/system/,/apex/,/l/**

以下设置是可选的,但它们可能有助于降低噪音:

requestPayloadParameterizationExcludeNames.1=^pageSize$
requestPayloadParameterizationExcludeNames.2=^max[A-Za-z]+
requestPayloadParameterizationExcludeNames.3=^actionsRequestId$
requestPayloadParameterizationExcludeNames.4=^request$
requestPayloadParameterizationExcludeNames.5=^numRecordsToShow$
requestQueryStringParameterizationExcludeNames.1=^r$

tst_configuration.属性文件中的其他属性可以配置为使用您可能配置的默认设置或自定义值。 

测试创建属性

您可以在 tst_creation.属性配置文件中定义其他测试创建属性。这个 tst_creation.properties 文件位于 TestAssets 文件夹下的 SOAtest 工作区中。默认情况下,所有连接到 SOAtest 服务器的 web 代理都将使用此文件中配置的设置。 

在更新期间将保留现有的 tst_creation.proeprties。如果移动或删除现有文件,将应用所有默认设置以及从最新更新中添加的新设置。 

includeContentTypes定义要在通讯报文处理期间包含的内容类型的逗号分隔列表。默认为 application/json,application/x-www-form-urlencoded
excludeContentTypes定义不在通讯报文处理期间包含的内容类型的逗号分隔列表。默认为空。
disableDiffCreation

启动/禁用 diff 创建。有关其他信息,请查阅 Diff 。默认为 false

disableDiffParameterization启动/禁用 diff 参数。参数化使您能够在 diff 中使用数据存储值。如果禁用 diff 参数化(将此属性设置为 true),只有静态值可用。默认为 false
disableEnvironmentCreation启用/禁用环境和环境变量的创建。默认为 false
disableDataBankCreation

启用/禁用数据库创建。有关其他信息,请查阅 数据交换工具 。默认为 false

disableAssertorCreation启用/禁用 JSON 断言器工具的创建。默认为 false。有关其他信息,请查阅 JSON 断言器
customHandlerClass.<number>参阅为 Salesforce 配置智能 API 测试生成器
diffToolIgnoreNames.<number>

定义一个正则表达式匹配的元素名,在创建差异时应该忽略该元素名。默认为 (?i)^(time|date|url|href).*

可以通过添加属性并添加 .<number>来指定其他名称模式。

例如:

diffToolIgnoreNames.1=<name_pattern_1>

diffToolIgnoreNames.2=<name_pattern_3>

diffToolIgnoreNames.3=<name_pattern_3>

diffToolIgnoreValues.<number>

定义一个正则表达式匹配的值,在创建差异时应该忽略该元素名。默认忽略时间戳:

[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,3})?(([+-][0-9]{2}:[0-9]{2})|Z)?

可以通过添加属性并添加 .<number>来指定值模式。

例如:

diffToolIgnoreValues.1=<value_pattern_1>

diffToolIgnoreValues.2=<value_pattern_3>

diffToolIgnoreValues.3=<value_pattern_3>

assertorToolIgnoreQueryParameterNames.<number>

定义一个匹配查询参数名的正则表达式,在创建 JSON 断言器工具时应该忽略该参数名。

默认是忽略以“maxResultsSize”开头的查询名:

(?i)^(maxResultSize).*

该属性不区分大小写。

可以通过添加属性并将它们追加到 .<number>中来指定其他模式。

assertorToolIgnoreQueryParameterValues.<number>

定义一个匹配查询参数值的正则表达式, 在创建 JSON 断言器工具时应该忽略该参数值。

在基于参数值模式创建断言时忽略查询参数

默认忽略时间戳:

[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,3})?(([+-][0-9]{2}:[0-9]{2})|Z)?

可以通过添加属性并将它们追加到 .<number>中来指定其他模式。

assertorToolIgnoreFieldNames.<number>

在响应有效负载中定义一个正则表达式匹配值,在创建 JSON Assertor 工具时应该忽略该值。默认值是忽略响应负载中以时间、日期、url、href、SessionId 或 transactionId 开头的值。

默认忽略时间戳:

(?i)^(time|date|url|href|SessionId|transactionId).*

该属性不区分大小写。

可以通过添加属性并将它们追加到 .<number>中来指定其他模式。

assertorToolIgnoreFieldValues.<number>

定义在创建 JSON 断言器工具时应该忽略的正则表达式匹配值。默认忽略时间戳:

[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,3})?(([+-][0-9]{2}:[0-9]{2})|Z)?

可以通过添加属性并附加 .<number>来指定值模式。

例如:

assertorToolIgnoreFieldValues.1=<value_pattern_1>

assertorToolIgnoreFieldValues.2=<value_pattern_3>

assertorToolIgnoreFieldValues.3=<value_pattern_3>

includeURLPatterns

定义一个逗号分隔的资源 URL 模式列表,其中包含用于生成测试的模式。可以使用 Ant 样式语法定义区分大小写的模式。默认值是包含所有 URL。

在下面的示例中,将包括 parasoft.com 域中的所有 URL:

includeURLPatterns=*.parasoft.com

excludeURLPatterns

定义一个逗号分隔的资源 URL 模式列表,其中不包含用于生成测试的模式。可以使用 Ant 样式语法定义区分大小写的模式。默认值是包含所有 URL。

在下面的例子中,将排除 parasoft.com 域中端口 8443 的所有 URL:

excludeURLPatterns=*.parasoft.com:8443

requestPayloadParameterizationExcludeNames.<number>

定义与请求有效负载中应从参数化中排除的字段名称匹配的正则表达式。

以下示例从参数化中排除日期和时间字段名称:

requestPayloadParameterizationExcludeNames.1=(?i)^(time|date).*

requestQueryStringParameterizationExcludeNames.<number>

定义与请求查询中应从参数化中排除的字段名称匹配的正则表达式。

以下示例从参数化中排除日期和时间字段名称:

requestPayloadParameterizationExcludeNames.1=(?i)^(time|date).*

useServerSettings

在 SOAtest 服务器上使用 tst_create.properties 文件中的设置(而不是本地 tst_create.properties 文件中的设置)启用/禁用。默认为 true
示例 tst_creation.properties 文件
includeContentTypes=application/json, application/x-www-form-urlencoded
excludeContentTypes=image/png,font/ttf,text/css,application/javascript
disableDiffCreation=false
disableDiffParameterization=false
disableEnvironmentCreation=false
disableDataBankCreation=false
disableAssertionCreation=true
# Ignore values that start with "time", "date", "url" or "href" in diff tool, case insensitive
diffToolIgnoreNames.1=(?i)^(time|date|url|href).*
# Ignore values that end with "time", "date", "url" or "href" in diff tool, case insensitive
diffToolIgnoreNames.2=(?i).*(time|date|url|href)$
# Ignore values like a timestamp in diff tool, e.g. 2018-03-21T07:00:00.000Z
diffToolIgnoreValues.1=[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,3})?(([+-][0-9]{2}:[0-9]{2})|Z)?
# Ignore query parameters when creating assertions based on parameter name pattern
assertorToolIgnoreQueryParameterNames.1=(?i)^(maxResultSize).*
# Ignore query parameters when creating assertions based on parameter value pattern
assertorToolIgnoreQueryParameterValues.1=[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,3})?(([+-][0-9]{2}:[0-9]{2})|Z)?
# Ignore fields in payload when creating assertions based on field name pattern
assertorToolIgnoreFieldNames.1=(?i)^(time|date|url|href|SessionId|transactionId).*
# Ignore fields in payload when creating assertions based on field value pattern
assertorToolIgnoreFieldValues.1=[0-9]\{4}-[0-9]\{2}-[0-9]\{2}T[0-9]\{2}:[0-9]\{2}:[0-9]\{2}([.][0-9]\{1,3})?(([+-][0-9]\{2}:[0-9]\{2})|Z)?
# Comma separated list of URL patterns where pattern matching is the same as Apache Ant. URLs can be case sensitive.
includeURLPatterns=http://{host}:8080/path/**/resources/*
excludeURLPatterns=https://{host}:8443/path/**/resources/*

# Exclude from being parameterized field names in request payload
requestPayloadParameterizationExcludeNames.1=(?i)^(time|date).*
  • No labels