JMeter 测试中 CXF 的不连贯行为
Uncoherent behaviour of CXF in JMeter tests
我在公司计算机中使用 Apache JMeter 测试 Fuse 时遇到问题:我正在使用 Java 7、JBoss Fuse 6.1.1 和 JMEter 3.0(和 3.2)。
我有一组测试
- 我发送一个 HTTP 请求;
- 已部署的应用程序通过 HTTP 请求的路径读取请求;
- 它意识到我正在调用 XML 中的存根文件;
- 应用程序读取存根目录中的正确文件;
- 应用程序遵循业务逻辑。
令我惊讶的是,这个过程在我和同事的笔记本上运行正常,但在公司电脑上却行不通。
在我公司的计算机中,进程到达倒数第二步,在最后一步我收到此错误:
ID: 1 Response-Code: 500
Content-Type: text/plain
Headers: {/*some stuff/}
Payload: No message body writer has been found for response
class AnyBusinessProCessResultImpl.
classAnyBusinessProCessResultImpl 是一个 Java 由我无法修改的其他文件(如 DSL)创建的 Bean。
阅读this question,错误喜欢由marshalling/unmarshalling或对Jackson的不正确使用而产生,
然后可能需要在源代码中编写修复程序并部署新版本的工件。
但是这个版本的神器在我们的notebook上运行正常,那么我认为是JMeter或者Fuse的问题(在3工作站上都是一样的)。
3个工作站的配置相同,
主要区别是我在公司计算机(我在虚拟机中工作)中没有任何管理员权限,在我的笔记本中,
但我想 Windows 7 工作站中的 sending/receiving HTTP 请求在用户 space 上工作,没有任何管理员权限。
另一个想法是按正确顺序加载库的问题:也许在公司计算机中是 Fuse 的库/模块 OSGI,但这似乎是一个太低级别的猜测。
我注意到唯一的区别在于响应有效负载中的 header:在公司计算机中,它缺少关于 content-type
的 header
Content-Type: text/plain
Headers: {/**some stuff*/}
在笔记本中看起来像
Content-Type: text/xml
Headers: {blabla, content-type="text/xml", blabla}
但是,我还是不明白工作站中相同配置之间的区别。
请问您还有其他建议或想法要调查吗?
您的 AnyBusinessProCessResultImpl
不属于 JMeter,它属于 custom,很可能是正在使用的 Java Class 的某种形式用于生成请求正文。
您需要核对 following folders 的内容:
- 库
- lib/ext
- lib/junit
和以下值 properties
search_paths
user.classpath
假设您将在 JMeter Classpath 下拥有相同的一组 Java 库 - 您将能够获得相同的行为。
最简单的方法就是将 JMeter 安装从您同事的一台计算机复制到您的 machine/VM。
另请注意,根据 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure article you should always be using the latest version of JMeter so consider upgrading to JMeter 5.1.1 (or whatever is the latest stable JMeter version available at JMeter Downloads 页)在下一个可用的机会。
我在公司计算机中使用 Apache JMeter 测试 Fuse 时遇到问题:我正在使用 Java 7、JBoss Fuse 6.1.1 和 JMEter 3.0(和 3.2)。
我有一组测试
- 我发送一个 HTTP 请求;
- 已部署的应用程序通过 HTTP 请求的路径读取请求;
- 它意识到我正在调用 XML 中的存根文件;
- 应用程序读取存根目录中的正确文件;
- 应用程序遵循业务逻辑。
令我惊讶的是,这个过程在我和同事的笔记本上运行正常,但在公司电脑上却行不通。
在我公司的计算机中,进程到达倒数第二步,在最后一步我收到此错误:
ID: 1 Response-Code: 500
Content-Type: text/plain
Headers: {/*some stuff/}
Payload: No message body writer has been found for response class AnyBusinessProCessResultImpl.
classAnyBusinessProCessResultImpl 是一个 Java 由我无法修改的其他文件(如 DSL)创建的 Bean。
阅读this question,错误喜欢由marshalling/unmarshalling或对Jackson的不正确使用而产生, 然后可能需要在源代码中编写修复程序并部署新版本的工件。
但是这个版本的神器在我们的notebook上运行正常,那么我认为是JMeter或者Fuse的问题(在3工作站上都是一样的)。 3个工作站的配置相同, 主要区别是我在公司计算机(我在虚拟机中工作)中没有任何管理员权限,在我的笔记本中, 但我想 Windows 7 工作站中的 sending/receiving HTTP 请求在用户 space 上工作,没有任何管理员权限。
另一个想法是按正确顺序加载库的问题:也许在公司计算机中是 Fuse 的库/模块 OSGI,但这似乎是一个太低级别的猜测。
我注意到唯一的区别在于响应有效负载中的 header:在公司计算机中,它缺少关于 content-type
的 headerContent-Type: text/plain
Headers: {/**some stuff*/}
在笔记本中看起来像
Content-Type: text/xml
Headers: {blabla, content-type="text/xml", blabla}
但是,我还是不明白工作站中相同配置之间的区别。
请问您还有其他建议或想法要调查吗?
您的 AnyBusinessProCessResultImpl
不属于 JMeter,它属于 custom,很可能是正在使用的 Java Class 的某种形式用于生成请求正文。
您需要核对 following folders 的内容:
- 库
- lib/ext
- lib/junit
和以下值 properties
search_paths
user.classpath
假设您将在 JMeter Classpath 下拥有相同的一组 Java 库 - 您将能够获得相同的行为。
最简单的方法就是将 JMeter 安装从您同事的一台计算机复制到您的 machine/VM。
另请注意,根据 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure article you should always be using the latest version of JMeter so consider upgrading to JMeter 5.1.1 (or whatever is the latest stable JMeter version available at JMeter Downloads 页)在下一个可用的机会。