章节目录:

前言

请求/响应文件输入模式使用请求/响应对目录,根据目录中的文件检查传入请求,如果发现匹配,则使用配对的响应作为回复。该模式会将传入消息与请求文件进行匹配,然后返回配对的响应。这使得添加新数据变得更容易,因为关联性会根据工具的配置为新的请求文件自动配置。

指定目录中的请求/响应对以相应的文件名标识。要被标识为一对请求/响应,文件名应完全相同,但以“_request”结尾的请求文件名和以“_response”结尾的响应文件名除外。例如,下列文件将被标识为请求/响应对:

  • getAssets_request
  • getAssets_response
  • createAccount_request.txt

  • createAccount_response.txt


如果请求体或响应体为二进制,可将其与头部分别存储在不同的文件中。例如,可以将头部放在“getAssets_response”文件中,将主体存储在名为“getAssets_response.bin”的文件中。配对的二进制文件名称应为请求或响应文件的名称加上“.bin”(包括任何文件扩展名;例如,如果头部在名为“getAssets_response.txt”的文件中,那么 bin 文件应名为“getAssets_response.txt.bin”)。

支持 HTTP、MQ、JMS 和自定义协议。强烈建议将不同协议的文件存储在不同的目录中。

请求/响应文件选项

使用请求/响应文件输入模式时,只需指定用于查找请求/响应对的目录。您可以手动输入路径或浏览文件系统工作空间

如果要将该目录的路径作为当前配置文件的相对路径(而不是完全绝对路径)来保存,则启用保留为相对路径。使用相对路径更容易在多个机器之间共享响应器。

文件结构选项

当请求和响应文件都包含头部和主体时,启用文件以消息标题部分开头...。该选项默认启用。当文件只包含主体时,禁用该选项。在这种情况下,响应将获得在选项 > 返回状态选项卡中设置的默认 HTTP 代码和消息。

有关文件要求,请参阅请求/响应文件要求

有关用于关联性请求项的更多信息,请参阅考虑用于关联的请求项

请求消息关联的排除模式

您可以使用请求信息关联的排除模式表来定义 URL 查询参数和有效负载元素的排除模式。任何与排除模式匹配的 URL 查询参数和有效负载元素都将被忽略。元素名称指定为精确匹配或使用通配符(*)来匹配所有内容。值模式指定为正则表达式。例如,下表展示了忽略时间戳的排除模式。

元素名值模式 (使用正则表达式)
*[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)?

创建新的响应器时,首选项(Parasoft > 首选项 > Parasoft > 通讯报文文件处理)中的任何全局排除模式都会自动复制到此处。点击添加,在打开的对话框中输入元素名值模式(以正则表达式输入),创建新的排除模式。要编辑或删除现有的排除模式,请选择该模式并点击修改删除

请求/响应文件要求

启用文件以消息标题部分开头...后(请参阅消息头选项),请求和响应文件的头部和主体应以空行隔开。此外:

  • 对于 HTTP,请求文件的第一行应指定 HTTP 方法、路径和协议,而响应文件的第一行应指定 HTTP 状态代码。
  • 对于 MQ,如果响应文件中存在“messageId”头,其值将被用作响应消息 ID。如果您环境中的 MQ 客户端依赖动态生成的响应消息 ID 来与请求关联,请勿在 MQ 响应文件中包含“messageId”头。

考虑用于关联的请求项

对于带 HTTP 头的请求文件,会考虑对 HTTP 方法、URL 路径、URL 查询参数和请求主体进行关联。非 HTTP 头(如 MQ、JMS)不用于关联。当文件包含头部时,确保启用文件以消息标题部分开头...

例如,假设在请求文件中包含以下有效负载和头部:

带头部的请求文件示例
POST /parabank/services/bank/billpay?accountId=54321&amount=100 HTTP/1.1
Host: parabank.parasoft.com
Connection: keep-alive
Content-Length: 160
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Origin: https://parabank.parasoft.com
Referer: https://parabank.parasoft.com/parabank/billpay.htm
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=C86B598044C4F61C21A0DCFE019AC19B

{
	"address": {
		"street": "West 57th Street",
		"city": "New New York",
		"state": "NY",
		"zipCode": "10019"
	},
	"name": "Hubert J. Farnsworth",
	"phoneNumber": "212-123-4567",
	"accountNumber": "56789"
}

第一行中的 HTTP 方法、URL 路径和 URL 查询参数将被考虑用于关联。在头部之后指定的请求主题也会被考虑。文件中指定的头部将不会用于关联。

对于路径匹配,传入请求可以附加任意数量的 URL 路径段,但最后的路径段必须与请求文件中指定的路径段相匹配。

如果希望在请求匹配过程中排除某些通讯报文模式,可以使用请求信息关联的排除模式。例如,如果想在匹配请求时忽略 URL 查询参数“amount”和元素“phoneNumber”,可以输入以下内容:

元素名值模式 (使用正则表达式)
amount.*
phoneNumber.*

不带头部的请求文件没有 HTTP 方法、URL 路径或 URL 查询参数可考虑用于关联;仅使用请求主体。当文件包含头部时,确保禁用文件以消息标题部分开头...

例如,在不带头部的请求文件中考虑以下有效负载:

不带头部的请求文件示例
{
	"address": {
		"street": "West 57th Street",
		"city": "New New York",
		"state": "NY",
		"zipCode": "10019"
	},
	"name": "Hubert J. Farnsworth",
	"phoneNumber": "212-123-4567",
	"accountNumber": "56789"
}

使用请求信息关联的排除模式可以在请求匹配过程中排除某些通讯报文模式。例如,如果想在匹配请求时忽略元素“phoneNumber”,可以输入以下内容:

元素名值模式 (使用正则表达式)
phoneNumber.*

从 HTTP 通讯报文文件中复制请求和响应报文

您可以通过从 Virtualize 消息代理生成的 HTTP 通讯报文文件中复制请求和响应消息来创建请求和响应文件。在该过程中,请复制整个 MIME 部分,尤其是当主体是 base64 编码时(例如下面的示例),或者当邮件的字符集不是 UTF-8 且邮件主体包含非 ASCII 字符时。请确保包含消息的开始分界符,但不包括结尾分界符。

带通讯报文文件 MIME 部分的请求文件示例
--Q29udGVudC1Cb3VuZGFyeQo
Content-Type: text/plain; charset=UTF-8
Serialization-Encoding: base64
Secure: true
Timestamp: 1565995246000
 
POST /parabank/services/bank/billpay?accountId=54321&amount=100 HTTP/1.1
Host: parabank.parasoft.com
Connection: keep-alive
Content-Length: 160
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Origin: https://parabank.parasoft.com
Referer: https://parabank.parasoft.com/parabank/billpay.htm
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=C86B598044C4F61C21A0DCFE019AC19B
 
ewogICAgImFkZHJlc3MiOiB7CiAgICAgICAgInN0cmVldCI6ICJXZXN0IDU3dGggU3RyZWV0IiwKICAgICAgICAiY2l0eSI6ICJOZXcgTmV3IFlvcmsiLAogICAgICAgICJzdGF0ZSI6ICJOWSIsCiAgICAgICAgInppcENvZGUiOiAiMTAwMTkiCiAgICB9LAogICAgIm5hbWUiOiAiSHViZXJ0IEouIEZhcm5zd29ydGgiLAogICAgInBob25lTnVtYmVyIjogIjIxMi0xMjMtNDU2NyIsCiAgICAiYWNjb3VudE51bWJlciI6ICI1Njc4OSIKfQ==
  • No labels