本主题解释如何将 SOAtest 测试用例映射到 HP ALM / 质量中心的特定需求。一旦测试用例映射到需求,则需求的测试将如单击 HP ALM 中的按钮一样简单。然后可以从 HP ALM 颞部运行 Parasoft 测试用例,并将结果返回给 HP ALM。

本章包含:

准备与 HP ALM 一起使用的 SOAtest

HP ALM 可以使用 SOAtest web 服务接口或 SOAtest 命令行界面(soatestcli)运行 SOAtest 测试套件。web 服务接口允许客户使用在远程机器上运行的 SOAtest 的共享实例运行测试。可以通过命令行界面在客户本机上使用 soatestcli 运行测试。使用 web 服务接口,测试运行将更快地初始化和终止。

以 web 服务模式启用 SOAtest,进而启用 SOAtest web 服务。以 web 服务模式运行 SOAtest 的机器必须访问一个工作空间,该空间包含希望使用 HP ALM 运行的 SOAtest 测试套件(.tst 文件)。Web 服务模式可用于 SOAtest 的自动化版本。有关以 web 服务模式运行 SOAtest 的更多详情,请查阅 从 Web 服务接口进行测试

选择 SOAtest-ALM 集成选项

集成 SOAtest 和 HP ALM 有两种选择:

  • Use the Parasoft SOAtest test type (for HP ALM 10, 11, and 12 only):该测试类型提供用来配置测试执行的图形用户界面。没有脚本要求。该测试类型必须安装到 HP ALM 服务器中。这是由 ALM 管理员执行的一次性安装程序。完成安装后,用户便可以使用 Parasoft GUI(而非一个脚本)。
  • Use the VAPI-XP test type (for any version):该测试类型包含在 HP ALM 中。SOAtest 包含可由 VAPI-XP 测试执行的脚本。通过更改脚本中的变量对测试执行进行配置。它不会涉及任何 ALM 服务器调整。

这两个选择都允许 HP ALM 使用 SOAtest web 服务接口或 SOAtest 命令行界面(soatestcli)运行测试。

Parasoft SOAtest 测试类型配置和测试创建

Parasoft SOAtest 测试类型集成要求:

对 HP ALM / QC 服务器进行配置

HP ALM 11 和 12

安装自定义测试类型的说明可以在 HP ALM ALM 安装指南中找到(在 Windows 7 上,它可以在 C:\Program Files\HP\ALM\application\20qcbin.war\Help\doc_library\pdfs 中找到)。

以下是将 Parasoft SOAtest 测试类型安装到 HP ALM 11 或 12 中的说明:

  1. <SOAtest Installation>/integration/HP 附带的 ZIP 文件的内容解压缩到文件夹 <HP Deployment ocation>\application\20qcbin.war。有关 HP 部署位置,请参阅 HP ALM 安装指南(在 Windows Server 2003 上,它就是
    C:\Documents and Settings\All Users\Application Data\HP\ALM)。

  2. 运行 HP 服务部署向导。它将使用必要的测试类型更新重新部署 HP ALM。
  3. 以管理员权限的身份使用 IE,作为网站管理员登录到 HP ALM,然后选择 Tools> Update Test Types。这将使自定义测试类型在进展中的项目中可用。
  4. 登出 HP ALM。

HP QC 10

安装自定义测试类型的说明可在“HP 质量中心自定义测试类型向导”中找到。通过选择 Help> Documentation Library可以在质量中心中找到该文档。 

以下是将 Parasoft SOAtest 测试类型安装到质量中心 10 中的说明:

  1. 在质量中心服务器上创建一个临时的 scratch 目录。可以在质量中心的 application 目录(例如, C:\Program Files\HP\Quality Center\application\my_scratch_files)中创建 scratch 目录。
  2. 跳转至质量中心的 jboss\server\default\deploy 目录,并将 20qcbin.war 文件复制到 scratch 目录。
  3. 跳转至 SOAtest 安装的 integration\HP 目录(例如, C:\Program Files\Parasoft\SOAtest\{ver}\integration\HP)并将 soatest_test_type.zip 文件复制到质量中心服务器上的 scrtach 目录。
  4. soatest_test_type.zip 解压到 scratch 目录中。它应该创建两个文件夹:CustomTestTypesExtensions
  5. 更新 20wcbin.war ,此时它拥有 CustomTestTypesExtensions两个文件夹。要做到这一点,可以使用 Java JDK 中的 jar 命令。例如,您可能使用 
    jar uvf 20qcbin.war CustomTestTypes Extensions
    由于 war 文件使用 zip 文件格式,所以 zip 应用程序还可以用来更新 20qcbin.war

  6. 对原始 20qcbin.war 文件,在 jboss\server\default\deploy 目录中进行一份备份。例如,您可以复制原始文件,然后将其重命名为 20qcbin.war.bak
  7. 将新的 20qcbin.war 文件从 scratch 目录复制到 jboss\server\default\deploy 目录。
  8. 重启质量中心。通常来说,您在 Windows 服务控制台上便可执行此操作(例如,选择 Start> Administrative Tools> Services)。
  9. 将 Parasoft SOAtest 添加到测试类型选项列表。
    1. 打开浏览器并输入 URL http://<server:port>/qcbin/start_a.htm
    2. 点击 HP Quality Center链接。
    3. 登录到质量中心。
    4. 单击 Tools> Customize
    5. 单击 Project Entities
    6. 展开 Test ,然后展开 System Fields
    7. 选择 Type ,然后单击 Goto List 按钮。
    8. 单击 New Item 按钮,输入 Parasoft SOAtest 项目名,然后单击 OK
    9. 关闭 Project Lists 框,然后单击 Save
    10. 登出质量中心。此更改将生效。

配置客户端机器 - 针对 HP ALM 12、ALM 11 和 QC 10

想要使用 Parasoft SOAtest 测试类型的任何客户端机器都必须安装以下内容:

  • Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)。如果没有 Microsoft 的 Visual C++ 库,Parasoft SOAtest 测试类型将不会工作。可以从 http://www.microsoft.com/en-us/download/details.aspx?id=5582的 Microsoft 下载中心下载安装程序。
  • Microsoft SOAP Toolkit 3.0 SDK。HP ALM / QC 需要这样,以便测试可以调用 web 服务。如果没有安装测试类型和 VAPI-XP 脚本,则将无法使用 SOAtest web 服务接口。可以从 http://download.microsoft.com/download/2/e/0/2e068a11-9ef7-45f5-820f-89573d7c4939/soapsdk.exe的 Microsoft 下载中心下载安装程序(SoapToolkit30.exe)。

除此之外,每个客户端机器都应该配置允许 Parasoft 软件执行。为此:

  1. 如下对使用 ALM / QC 的每个客户端进行重新注册:
    1. 以管理员权限的身份运行 IE。
    2. 导航到 http://<HP ALM server>:<HP ALM port>/qcbin/start_a.jsp?common=true 。
    3. 当提示时,安装 Parasoft 品牌的 addin。



      对安全预警进行响应

      如果对话框询问是否从运行 Parasoft 软件,则选择 总是运行 Parasoft 公司软件 选项。
      如果对话框使用的是“未知发布者”而不是“Parasoft 公司”,则执行以下操作:

      1)关闭 IE。

      2)安装 https://search.thawte.com/support/ssl-digital-certificates/index?page=content&actp=CROSSLINK&id=AR1493的 Thawte Code Signing Intermediate CA。

      3)重启 IE。

      4)尝试再次登录。

    4. 当提示时,完成客户端注册后关闭浏览器。
  2. 打开浏览器并输入 URL http://<server:port>/qcbin/start_a.htm。
  3. 点击 HP ALM / QC 链接。IE 将打开多个安装预警对话框。



  4. 如上述框中所描述对对话框进行响应。

注意,仅单击 Run (而无需启动 Always run software from Parasoft Corporation 选项)便足以启用集成。然而在每次您登录到 ALM /QC 时, IE 将继续打开这些安全预警对话框。

在测试计划模块中创建测试

  1. 登录到 HP ALM 之后,选择 Test Plan 模块。测试计划模块允许设置自动化测试和自定义脚本。
  2. 在 Test Plan 树中,选择 Subject ,单击 New Folder 工具栏按钮。



  3. 在新建文件夹对话框中,在 Test Folder Name 字段中输入文件夹名(例如, SOAtest)。



  4. 选择新创建的文件夹,然后从上面的工具栏中单击 New Test 图标。



  5. 在新建测试对话框中,在 Test Type 下拉框中选择 Parasoft SOAtest ,在  Test Name 字段中输入测试名称(例如, SOAtest Demo),然后单击 OK。

     

  6. 选择新的测试,然后打开 Test Script 选项卡。



  7. 使用可用控件(详情如下)更改测试。
控件要求说明
Execution modeX指定使用 web 服务接口(server),还是使用命令行接口(command line)。
ProtocolX

指定 SOAtest 服务连接是使用 HTTP 还是 HTTPS。 

HTTPS 注意事项

默认情况下,HP ALM /QC 不接受自签名的 SSL 证书,该证书与 SOAtest 一起提供,并在使用 HTTPS 时由 SOAtest 服务器返回(您将会看到一个错误消息说明“...访问此资源所需的安全证书无效...”)。  

如果正在通过 HTTPS 连接,请确保:

  1. 创建自己的域特定的 SSL 证书(例如,使用 Portecle 或 java keytool 命令行)。
  2. 更改 SOAtest 服务器使用的 SSL 证书(例如,通过更改 SSL HTTP/1.1 Connector 条目,该条目在 [SOAtest install dir]/eclipse/plugins/com.parasoft.xtest.libs.web_[SOAtest_ver]/root/tomcat/conf/server.xml中。)

  3. 如果生成的证书是自签名:则配置 Windows 以信任证书(例如,通过 Windows 证书管理员)。

针对 HTTPS,SOAtest 服务端口默认为 9443;针对 HTTP,SOAtest 服务器端口默认为 9080。

HostXSOAtest 服务器的主机名。
PortXSOAtest 服务器的端口号。
Username*

连接到 CTP 的用户名。

如果 SOAtest 服务器连接到 CTP,则该字段需要填充。

Password*

连接到 CTP 的密码。

如果 SOAtest 服务器连接到 CTP,则该字段需要填充。

Executable
SOAtest 可执行的完整路径。
Workspace

工作空间目录的完整路径。如果该字段未填充,则使用默认工作空间。等价于“-data”命令行参数。

ResourceX工作空间 SOAtest .tst 文件的相对路径。等价于-resource 命令行参数。
XML Report
将用来存储测试结果的 XML 报告的完整路径。
HTML Report
HTML 报告文件的完整路径。
Environment
测试执行期间要启用的环境名称。等价于 -environment 命令行参数。
Test name
运行匹配特定名称的测试。等价于 -testname 命令行参数。
Data source row
运行单数据源行的测试。等价于 -dataSourceRow 命令行参数。
Data source name

运行单数据源的测试。等价于
-dataSourceName 命令行参数。
如果使用命令行参数,-dataSourceName 必须在
-dataSourceRow之后。它不能单独使用。可以指定要使用的数据源行,然后通过选择性地指定数据源名称进一步地限制其范围。

Data group config

XML 文件的完整路径,该文件为测试运行中包含的每个 .tst 文件内的每个数据组指定活跃的数据源。

等价于 -dataGroupConfig 命令行参数。

Environment config

XML 文件的完整路径,该文件为测试运行中包含的每个 .tst 文件指定要使用的环境变量。

等价于 -environmentConfig 命令行参数。

Extra command line arguments
将其他命令行参数传递给 soatestcli。高级用户
Custom request XML
将自定义 XML 请求传递给 SOAtest 服务器。高级用户。
Custom script path
SOAtest VAPI-XP 脚本的完全路径。启用自定义 VAPI-XP 脚本的执行。高级用户


VAPI-XP 测试类型配置和测试创建

客户端配置

为了使用具有 VAPI-XP 测试执行的 SOAtest,任何客户端机器都必须安装以下内容 :

  • Microsoft SOAP Toolkit 3.0 SDK。HP ALM / QC 需要这样,以便测试可以调用 web 服务。如果没有安装测试类型和 VAPI-XP 脚本,则将无法使用 SOAtest web 服务接口。可以从 http://download.microsoft.com/download/2/e/0/2e068a11-9ef7-45f5-820f-89573d7c4939/soapsdk.exe的 Microsoft 下载中心下载安装程序(SoapToolkit30.exe)。

在测试计划模块中创建测试

  1. 登录到 ALM 之后,选择 Test Plan 模块。测试计划模块允许设置自动化测试和自定义脚本。
  2. 在 Test Plan 树中,选择 Subject ,单击 New Folder 工具栏按钮。



  3. 在新建文件夹对话框中,在 Test Folder Name 字段中输入文件夹名(例如, SOAtest)。



  4. 选择新创建的文件夹,然后从上面的工具栏中单击 New Test 图标。



  5. Create New Test 对话框中,在 Test Type 下拉框中选择 VAPI-XP-TEST ,在 Test Name 字段中输入测试名称(例如, SOAtest Demo),然后单击 OK。

     

  6. 在 HP VAPI-XP 向导中选择 JavaScript 作为脚本语言,输入 SOAtest 作为 Script Name, 然后单击 完成。
  7. 打开 Test Script 选项卡。注意,已经从 HP VAPI-XP 向导创建了一个模板。



  8. 打开定位在 SOAtest 安装目录内 integration/HP 中自定义的 SOAtest 脚本 HPQualityCenter.txt

    注意,脚本假定默认安装位置为 c:/Progra~1/Parasoft/SOAtest/[SOAtest version number]/.脚本配置来运行 examples/tests 目录中名为 HPQuality-Center.tst 的测试套件。 
  9. 复制 HPQualityCenter.txt 脚本,并在模板中替换它。



  10. 根据需求更改脚本(有关更多详情,请查阅以下部分)。
  11. 保存脚本。

更改脚本

HPQualityCenter.txt 集成脚本(定位在 SOAtest 安装目录内的 integration/HP )在测试的 Test Script 选项卡中使用,以便告知 SOAtest 运行项目文件并将测试结果报告给 HP ALM /QC。 

应该根据需求更改 SOAtestServerHost 和 testSuite。SOAtestServerHost 应该设置为以 web 服务模式运行的机器的主机名和 IP 地址。

脚本假设

脚本假设以下内容:

变量假设
useWebServicetrue
SOAtestServerProtocolhttp
SOAtestServerHostlocalhost
SOAtestServerPort9080
SOAtestServerUsername

""
(没有特定的身份验证)

SOAtestServerPassword

""
(没有特定的身份验证)

testSuite项目中的“HPQualityCenter/HPQualityCenter.tst“在工作空间叫做 HPQualityCenter
testName

""
(运行所有测试)

dataSourceRow

""
(使用所有数据源行)

dataSourceName

""
(使用所有数据源行)

testConfiguration"user://Example Configuration"
environment

""
(使用默认的活跃环境)

dataGroupConfig

""
(在每个数据组中使用当前活跃数据源)

environmentConfig

""
(在每个测试中,使用功能当前环境)

xmlReport"C:/Progra~1/Parasoft/SOAtest/9.x/examples/reports/HPQualityCenter.xml"
htmlReport"" 
detailedReportingtrue

变量说明

下面的表中描述了可用来配置脚本行为的变量:

变量说明例如
useWebService确定是否使用 SOAtest 的 web 服务接口运行测试。如果为 false,则将使用 SOAtest 命令行接口运行测试。var useWebService = true;
SOAtestServerProtocol指定 SOAtest 服务连接是使用 HTTP 还是 HTTPS。 var SOAtestServerProtocol = "https";
SOAtestServerHost SOAtestServerPort

以服务器模式运行 SOAtest 服务器的机器的名称或 IP 地址。

以服务器模式运行 SOAtest 服务器的机器的端口号。

var SOAtestServerHost = "localhost";

var SOAtestServerPort = 9080;

SOAtestServerUsername SOAtestServerPassword

连接到 CTP 的用户名。

连接到 CTP 的密码。

*如果 SOAtest 服务器连接到 CTP,则该字段需要填充

var SOAtestServerUsername = “user1”;

var SOAtestServerPassword = “password”;

testConfiguration测试配置的名称(相当于 -config CLI 参数)var testConfiguration = "user://Example Configuration";
testSuite工作空间中 SOAtest 项目文件的相对路径。

var testSuite = "HPQualityCenter/HPQualityCenter.tst";

假定项目中的测试套件在工作空间中名为 HPQualityCenter。

testName要在测试套件中运行的测试的名称。(相当于 -testName CLI 参数)。

var testName = "";
(保留空字符串“”以运行所有测试)

dataSourceRow dataSourceName运行单数据源行的测试(相当于 -dataSourceRow 和 -data-SourceName CLI 参数)。

var dataSourceRow = "";
var dataSourceName = "";
(保留空字符串“”以使用所有的数据源行)

environment测试期间要启用的环境名称(相当于 -environment CLI 参数)。

var environment = "";
保留空字符串“”以使用默认的活跃环境)

dataGroupConfig

XML 文件的完整路径,该文件为测试运行中包含的每个 .tst 文件内的每个数据组指定活跃的数据源。

等价于 -dataGroupConfig 命令行参数。

var dataGroupConfig = "C:/configFiles/dataGroupConfig.xml"
environmentConfig

XML 文件的完整路径,该文件为测试运行中包含的每个 .tst 文件指定要使用的环境变量。

等价于 -environmentConfig 命令行参数。

var environmentConfig = "C:/configFiles/environmentConfig.xml"
xmlReport将用来存储测试结果的 XML 报告的完整路径。此文件在每次测试运行后创建。var xmlReport = "C:/Progra~1/Parasoft/SOAtest/9.x/examples/reports/HPQualityCenter.xml";
htmlReport

可选 HTML 报告文件目录的完整路径。它不能与 xml 文件具有相同的名称。保留空字符串 ""
var htmlReport = "";,禁用该报告。

var htmlReport = "c:/Progra~1/Parasoft/SOAtest/9.x/examples/reports/HPQualityCenter2.html";
detailedReporting控制报告级别。如果为 true,则测试结果将显示每次测试运行的详细信息。如果为 false,则只会报告测试失败的信息。var detailedReporting = true;
SOAtestExeSt.exe 在 SOAtest 安装位置中的完整路径。

var SOAtestExe = "C:/Progra~1/Parasoft/SOAtest/9.x/soatestcli.exe";

此变量已弃用,只有当 useWebService 为 false 时才可用。

workspaceLocation

工作空间的完整路径 var workspaceLocation = "C:/Users/name/soatest/workspace";
使用 "” 来指定默认的工作空间位置。

var workspaceLocation = "C:/Docume~1/soatest-workspace/"

此变量已弃用,只有当 useWebService 为 false 时才可用。

additionalArgs

将其他命令行参数传递给 SOAtest。例如,设置其为 "-test-Name Custom",只运行命名为 Custom 的测试。若要运行整个测试套件,将其保留空字符串 ""
var additionalArgs = "";

var additionalArgs = ""-testName Custom"

此变量已弃用,只有当 useWebService 为 false 时才可用。

从 SOAtest 5.5.x? 迁徙

在 SOAtest 5.5.x 和 SOAtest 9.x 中,这些变量略有不同。

SOAtest 5.5.x 变量:

  • SOAtestExe“soatestcli.exe 在 SOAtest 安装位置中的完整路径。该变量默认设置为默认的安装位置。对于大多数用户来说,该变量是正确的且不需要更改。
  • testSuite:SOAtest 项目文件的完整路径。该变量默认设置为 HPQualityCenter.tst(位于SOAtest 安装目录中的 examples/tests)。您将需要设置该变量为您想要 SOAtest 运行的 SOAtest 项目的完整路径。
  • xmlReport:将用来存储测试结果的 XML 报告的完整路径。此文件在每次测试运行后由 SOAtest 创建。
  • htmlReport:HTML 报告文件的完整路径(可选项)。类似于 xmlReport 变量,此文件在每次测试运行后由 SOAtest 创建。如果不希望 SOAtest 创建 HTML 报告,则设置该变量为空字符串“”(默认)。如果创建了 HTML 报告,它将附加到测试运行中,并且可以从 HP ALM 中直接访问。
  • detailedReporting:控制报告级别的布尔变量。如果设置为 true(默认),SOAtest 将报告 SOAtest 项目中运行的所有测试的详细信息。如果为 false,则只会报告测试失败。
  • additionalArgs:将其他命令行参数发送给 SOAtest。例如,设置其为 "-testName Custom",只运行命名为 Custom 的测试。可以以类似的方式使用其他高级命令行功能。


在测试计划模块中运行测试

若要在测试计划模块中运行测试:

  1. 打开Test Lab 模块。
  2. 从 Root 节点新建文件夹。
  3. 将新的 Test Set 添加大新文件夹中。



  4. 从 Test Plan 树(在 ALM 12 上,通过单击工具栏左上角的 Select Tests 将其打开),找到从 Test Plan 创建的测试,并将其添加到新的测试集中。





  5. 一旦完成添加,则选择并运行测试。假设本地安装了 SOAtest,则请确保选中了 Run All Tests Locally 选项,然后单击 Run AllRun 按钮。

了解测试结果

测试运行完成后,您可以像查看其他测试一样查看结果摘要和详细信息。 

每次测试运行,测试中心的状态(status)列都将指示 SOAtest 测试套件的总体成功。每次测试运行,它也将显示与 SOAtest 测试套件中执行的每次测试相对应的运行步骤列表。运行步骤状态列将指示测试是通过,还是失败。


关于测试的详细信息可以通过查看运行步骤的 Description 字段找到,该字段包含以下内容:

  • 测试信息:包括测试名称、开始时间、结束时间、测试持续时间和状态。如果它是一个 SOAP 客户端测试,那么资产(WSDL URI)和操作名称也将被列出。
  • 流量:只适用于流量生成的测试。将会显示响应时间、请求消息和响应消息。
  • 错误来源、错误汇总、错误明细:只有当测试失败时才会显示这些字段。如果适用的话,错误源将包括报告错误的工具的名称和相对应的数据源列。错误汇总和错误明细部分显示与错误相对应的简短和详细信息。

每个运行步骤也有 ExpectedActual 区域,用来存储预期的测试结果和实际的测试结果。如果由于差异或回归失败,进而导致 SOAtest 项目中的测试失败,则这些区域将填充被报告错误的差异工具接收到的预期输入和实际输入。

将缺陷归档到 HP ALM 中

如果满足以下前提条件,SOAtest 可以将缺陷归档到 HP ALM 中:

  • SOAtest 在首选项中设置了有效的 Concerto 设置。有关更多详情信息,请查阅 跨团队配置 SOAtest
  • SOAtest 连接到的 Concerto 服务器本身也连接到 HP ALM / QC (有关更多详情,请查阅 Parasoft Concerto 文档)。

若要归档缺陷:

  1. 右键单击 SOAtest 质量任务视图中报告的任何错误信息,然后选择 File Defect Report。
    • File Defect Report 选项仅在首选项中指定了有效的 Concerto 设置时可用。
  2. 在打开的对话框中,指定归档缺陷所需的消息。如果两个前提条件都满足,那么 Detected ByAssignee 字段将自动填充来自 ALM / QC 的消息。

故障排除

当使用 HP ALM 运行测试时,您可能遇到下面的错误消息。

错误消息解决方案
您没有执行此操作的权限。

当运行来自测试实验室模块的测试的 QC 用户没有打开一个或多个权限时,此错误从 HP ALM 中抛出,SOAtest 附带的 HP QC 脚本要求打开特定的权限,以便脚本成功地执行某些任务。

如果看到这个错误,则您可能没有为登录到 QC 用户所属组以下权限设置:Status [RUN] (Modify Run > Status [RUN])。

若要在质量中心 10 中查看或更改 QC 用户所属组的权限,像下面这样做:

  1. 选择 Tools> Customize
  2. 选择 Groups。
  3. 在左侧,选择 QC 用户所属的组。
  4. 单击右侧的 Change 按钮。

若要检查权限状态[RUN]是否启用。

  1. 在新的对话窗口中,打开 Test Lab 选项卡。
  2. 展开 Modify Run 节点。
  3. 跳转至 Status [RUN] 嵌套节点。
  4. 确保该权限已启用。

     
自动服务器无法创建对象确保安装了 Microsoft SOAP Toolkit SDK。如 Parasoft SOAtest Test Type Configuration and Test CreationVAPI-XP Test Type Configuration and Test Creation中所述。
WSDLReader:WSDL 文件加载失败 HRESULT=0x80040154:类未注册。

这是在同一台 Windows 计算机上使用 Microsoft SOAP Toolkit 的一个众所周知的问题。Microsoft 支持知识库在 http://support.microsoft.com/kb/922736描述了这个问题和各种解决方案。

未发现 SOAtest XML 测试结果!验证 xmlReport 变量是否正确。SOAtest 服务器还必须对要写入 XML 文件的文件夹具有编写权限。
  • No labels