Web 测试期间出现无效 URI 错误 运行
Invalid URI error during web test run
我创建了一个非常简单的网络测试,它只有一个请求到一个简单的 URL,就像这样:https://www.domain.com/
。
当我 运行 测试失败时,我得到了这条消息:
Request failed: Invalid URI: The format of the URI could not be
determined.
但是响应选项卡有正确的响应 HTTP/1.1 200 OK
,其中有很多 HTML。这是 Visual Studio 中的错误还是其他什么,有没有办法确保它不会将正确的请求视为失败?
P.S。
我还注意到请求需要 10 - 15 秒,即使 RequestTime(visual studio 显示)实际上小于 1.
大多数网页的 HTML 需要下载其他文件 collection,例如图片、JSON、CSS、JavaScript等。这些是从属请求。 Visual Studio 检查 HTML 以查找依赖请求集。它们都应该是有效的 URLs。 Visual Studio 提取这些依赖请求的代码比许多浏览器更不宽容。 Visual Studio 要求它们是有效的 URL。许多真正的浏览器努力工作以应对糟糕的情况 HTML 以便可以显示一些合理的内容。
异常的原因可能是响应中的格式错误 HTML。某些浏览器具有开发工具,可以描述在下载的 html 中发现的错误。检查这些开发人员设施对页面上的错误的看法;可能值得尝试多个浏览器以获得对页面的不同评估。
一个示例:格式错误的 base tag 可能导致您报告异常。
在查看成功请求的 Web 测试执行日志时,您会看到列出的相关请求。看起来 Visual Studio "trusts" 这些请求形成有效的 URLs,即它们的格式正确。您的测试格式错误 URL。如果您提供了格式正确的 URL 但没有资源,那么您会看到依赖请求并看到它出现 404 错误。这是一个边缘案例,您可能会争辩说 Visual Studio 应该以不同的方式报告。
"web test execution log" 我指的是网络测试结果的显示方式。那就是带有列标题的表格形式:Request + Status + Total time + Request time + Request bytes + Response bytes。下面是显示所选项目详细信息的选项卡,这些选项卡标记为 Web 浏览器 + 请求 + 响应 + 上下文 + 详细信息。如果单击 "Request" 列 left-hand 侧的小三角形,您将看到重定向和相关请求。 (请注意,负载测试中的 Web 测试日志 运行 会忽略依赖请求的详细信息。)
针对该特定调用将 "Parse Dependent Requests" 设置为 False 会有所帮助。
我已经设法在 VS 调试器中捕获了无效的 URI 值:
- 为网络测试生成代码(使用工具栏按钮)
- 将调试器设置为在抛出任何 CLR 异常时停止
- 在错误请求前添加断点
- 运行 它在调试器下(通过在代码中右键单击)
- 断点命中时附加到 QTDCAgent32.exe 进程
- 运行 测试
系统会要求您提供您没有的源文件,但没关系。 Locals 调试器 window 显示错误的 URI。根据调试符号的可用性,您可能需要重新运行 多次测试(直到加载所有符号)。
更新:
AdrianHHH 是对的 - 问题出在 "base" 标签中。它看起来像这样:
<base href='/foo/'>
在 HTML4 中它是非法的,但在 HTML5 中它是一个有效的结构。但是VS2013 webtest引擎在这里失败了。
我创建了一个非常简单的网络测试,它只有一个请求到一个简单的 URL,就像这样:https://www.domain.com/
。
当我 运行 测试失败时,我得到了这条消息:
Request failed: Invalid URI: The format of the URI could not be determined.
但是响应选项卡有正确的响应 HTTP/1.1 200 OK
,其中有很多 HTML。这是 Visual Studio 中的错误还是其他什么,有没有办法确保它不会将正确的请求视为失败?
P.S。 我还注意到请求需要 10 - 15 秒,即使 RequestTime(visual studio 显示)实际上小于 1.
大多数网页的 HTML 需要下载其他文件 collection,例如图片、JSON、CSS、JavaScript等。这些是从属请求。 Visual Studio 检查 HTML 以查找依赖请求集。它们都应该是有效的 URLs。 Visual Studio 提取这些依赖请求的代码比许多浏览器更不宽容。 Visual Studio 要求它们是有效的 URL。许多真正的浏览器努力工作以应对糟糕的情况 HTML 以便可以显示一些合理的内容。
异常的原因可能是响应中的格式错误 HTML。某些浏览器具有开发工具,可以描述在下载的 html 中发现的错误。检查这些开发人员设施对页面上的错误的看法;可能值得尝试多个浏览器以获得对页面的不同评估。
一个示例:格式错误的 base tag 可能导致您报告异常。
在查看成功请求的 Web 测试执行日志时,您会看到列出的相关请求。看起来 Visual Studio "trusts" 这些请求形成有效的 URLs,即它们的格式正确。您的测试格式错误 URL。如果您提供了格式正确的 URL 但没有资源,那么您会看到依赖请求并看到它出现 404 错误。这是一个边缘案例,您可能会争辩说 Visual Studio 应该以不同的方式报告。
"web test execution log" 我指的是网络测试结果的显示方式。那就是带有列标题的表格形式:Request + Status + Total time + Request time + Request bytes + Response bytes。下面是显示所选项目详细信息的选项卡,这些选项卡标记为 Web 浏览器 + 请求 + 响应 + 上下文 + 详细信息。如果单击 "Request" 列 left-hand 侧的小三角形,您将看到重定向和相关请求。 (请注意,负载测试中的 Web 测试日志 运行 会忽略依赖请求的详细信息。)
针对该特定调用将 "Parse Dependent Requests" 设置为 False 会有所帮助。
我已经设法在 VS 调试器中捕获了无效的 URI 值:
- 为网络测试生成代码(使用工具栏按钮)
- 将调试器设置为在抛出任何 CLR 异常时停止
- 在错误请求前添加断点
- 运行 它在调试器下(通过在代码中右键单击)
- 断点命中时附加到 QTDCAgent32.exe 进程
- 运行 测试
系统会要求您提供您没有的源文件,但没关系。 Locals 调试器 window 显示错误的 URI。根据调试符号的可用性,您可能需要重新运行 多次测试(直到加载所有符号)。
更新:
AdrianHHH 是对的 - 问题出在 "base" 标签中。它看起来像这样:
<base href='/foo/'>
在 HTML4 中它是非法的,但在 HTML5 中它是一个有效的结构。但是VS2013 webtest引擎在这里失败了。