Web services Can';我不能用一个工具(jmeter)重现这种情况,我可以用两个浏览器窗口手动重现这种情况

Web services Can';我不能用一个工具(jmeter)重现这种情况,我可以用两个浏览器窗口手动重现这种情况,web-services,jmeter,Web Services,Jmeter,我正在开发一个在线预订系统(细节与我的问题无关)。它主要是在C#和框架4.0中开发的。我有一个数据库,其中包括产品和这些产品的可用性。数据库由web服务访问,后者由web应用程序查询,然后web应用程序将要显示的信息发送到浏览器。在架构方面没有什么特别的,但我对这种系统没有太多的经验。这架飞机很旧;它已经开发了几年了,我在六个月前刚刚加入,以前没有网络编程经验 我当前遇到并发问题。如果我打开两个浏览器窗口(任何浏览器),在两个窗口中输入相同的查询,并尽可能快地在两个页面上发布,我的web服务中会

我正在开发一个在线预订系统(细节与我的问题无关)。它主要是在C#和框架4.0中开发的。我有一个数据库,其中包括产品和这些产品的可用性。数据库由web服务访问,后者由web应用程序查询,然后web应用程序将要显示的信息发送到浏览器。在架构方面没有什么特别的,但我对这种系统没有太多的经验。这架飞机很旧;它已经开发了几年了,我在六个月前刚刚加入,以前没有网络编程经验

我当前遇到并发问题。如果我打开两个浏览器窗口(任何浏览器),在两个窗口中输入相同的查询,并尽可能快地在两个页面上发布,我的web服务中会出现未处理的异常。一个客户端获取数据,另一个接收错误编辑:此外,我同时使用两台不同的计算机进行了测试,仍然可以得到未处理的异常

我能够将问题追溯到将近一年前实施的缓存系统。没有锁定机制,缓存使用字典(这不是线程安全的)。一些堆栈溢出问题帮助我确定了问题以及应该如何纠正它(例如)

也就是说,我正试图重现这个问题,而不必手动单击两个浏览器窗口,并希望获得同时访问同一缓存的正确时间。我之所以尝试这样做,是因为我不喜欢在无法可靠地证明解决方案确实有效的情况下实现一个应该有效的解决方案。此外,在很多地方缓存的实现(很糟糕),我不确定是否可以通过手动“猜测”正确的时间来测试所有这些地方

因此,我下载了,并使用连接到我的两个浏览器,我可以找到创建发送完全相同请求的测试计划所需的所有HTTP请求

但令我沮丧的是,JMeter无法重现这个问题,即使我将线程组设置为创建40个并发用户!它们中的每一个都正确地接收到数据,并且没有任何一个触发我通过手动操作获得的未处理异常。我知道这不是cookie问题,也不是用户代理的区别,因为我使用多个浏览器和禁用的cookie进行了测试。由于HTTP请求是直接从Fiddler2创建的,因此隐藏字段或URL重写不应成为问题,并且不涉及动态字段名或内容。我知道Fiddler2有一个“重播”功能,但即使这样也不能重现问题。这让我莫名其妙

所以,我的问题是:为什么我不能用JMeter重现这个问题?有没有比JMeter更好的工具(对于一个自由软件来说,JMeter是相当完整的)来实现这一点?浏览器做了哪些Jmeter没有做的事情(除了呈现页面,这实际上不是这里的问题)


任何想法都将不胜感激

当你说2个窗口时,你确定他们使用2个会话,这取决于浏览器和打开第二个窗口的方式,你不会得到2个会话

您确定您复制了浏览器和服务器之间的所有流量吗

如果您有一个以上的请求,那么您应该检查它是否不是来自浏览器的两个并行Ajax请求,如果是这样,您必须知道,如果没有一些自定义脚本,jmeter不会为同一会话复制这两个并行请求(资源下载除外),这可能是您的问题

问候

菲利普M


当你说2个窗口时,你确定它们使用2个会话,这取决于浏览器和打开第二个窗口的方式,你不会得到2个会话

您确定您复制了浏览器和服务器之间的所有流量吗

如果您有一个以上的请求,那么您应该检查它是否不是来自浏览器的两个并行Ajax请求,如果是这样,您必须知道,如果没有一些自定义脚本,jmeter不会为同一会话复制这两个并行请求(资源下载除外),这可能是您的问题

问候

菲利普M


我将更新我的问题,添加我同时使用两台不同计算机进行测试的事实。谢谢你指出这一点。实际上,这可能是两个并行的Ajax调用。我还没想到。更新:非常感谢菲利普,谢谢你的意见。我会给你答案,因为你帮助我走上了好的道路。当我使用两个浏览器和Fiddler进行大量测试时(试图评估每次调用之间的时间),我能够用JMeter重现问题。很幸运,因为我只是想比较两个软件的输出。我一直试图在JMeter中再次解决这个问题,但从未发生过。所以,这似乎只是时间的问题!我将尝试调整测试计划(使用计时器),以便更接近于使用两个浏览器。再次感谢!我将更新我的问题,添加我同时使用两台不同计算机进行测试的事实。谢谢你指出这一点。实际上,这可能是两个并行的Ajax调用。我还没想到。更新:非常感谢菲利普,谢谢你的意见。我会给你答案,因为你帮助我走上了好的道路。当我使用两个浏览器和Fiddler进行大量测试时(试图评估每次调用之间的时间),我能够用JMeter重现问题。很幸运,因为我只是想比较两个软件的输出。我一直试图在JMeter中再次解决这个问题,但从未发生过。所以,这似乎只是时间的问题!我将尝试调整测试计划(使用计时器),以便更接近于使用两个浏览器。再次谢谢