Jmeter Proxy و Java Serialization في http/post؟
-
22-09-2019 - |
سؤال
لدينا اتصال Applet-Servlet الذي نرغب في تسجيله باستخدام وكيل HTTP الخاص بـ JMeter. إنه يعمل مع رسائل الحصول على الرسائل حتى يرسل التطبيق رسالة نشر HTTP والتي تتضمن بعض كائنات Java المسلسل (أنواع مدمجة) ، ثم نحصل على هذا الخطأ في التطبيق:
حسنًا ، لذلك هناك بعض الصراع في إصدار JVM في مكان ما في قائمة الانتظار. لكن أين؟
يعمل الاتصال بشكل جيد بدون jmeter ، أي: applet -> tomcat -> servlet. كل شيء على جهازي المحلي.
لكنه لا يعمل من خلال jmeter: applet -> jmeter proxy -> tomcat -> servlet. أيضا كل شيء على جهازي.
يبدو الأمر كما لو أن JMeter كان يعدل محتوى رسالة النشر ...
لقد اختبرته مع وكيل Apache أيضًا ، يعمل بشكل جيد.
حتى الشيء الأكثر تسلية هو أن لدي نسخة واحدة فقط من Java مثبتة ، JDK واحد و JRE واحد. كلا 1.6.0_07 ...
اعتقدت أنني سأطلب قبل البدء في الحفر بشكل أعمق في حفرة الأرنب ؛-)
إليكم تفريغ Hex للبيانات المنشورة المرسلة مباشرة إلى Tomcat:
00000348 ac ed 00 05 73 72 00 11 6a 61 76 61 2e 6c 61 6e ....sr.. java.lan
00000358 67 2e 49 6e 74 65 67 65 72 12 e2 a0 a4 f7 81 87 g.Intege r.......
00000368 38 02 00 01 49 00 05 76 61 6c 75 65 78 72 00 10 8...I..v aluexr..
00000378 6a 61 76 61 2e 6c 61 6e 67 2e 4e 75 6d 62 65 72 java.lan g.Number
00000388 86 ac 95 1d 0b 94 e0 8b 02 00 00 78 70 00 00 01 ........ ...xp...
00000398 7b {
وهنا البيانات عند إرسالها عبر jmeter:
00000128 ac ed 00 05 73 72 00 11 6a 61 76 61 2e 6c 61 6e ....sr.. java.lan
00000138 67 2e 49 6e 74 65 67 65 72 12 e2 a0 a4 f7 3f 3f g.Intege r.....??
00000148 38 02 00 01 49 00 05 76 61 6c 75 65 78 72 00 10 8...I..v aluexr..
00000158 6a 61 76 61 2e 6c 61 6e 67 2e 4e 75 6d 62 65 72 java.lan g.Number
00000168 3f ac 3f 1d 0b 3f e0 3f 02 00 00 78 70 00 00 01 ?.?..?.? ...xp...
00000178 7b {
الكثير من "3F" في التفريغ الثاني ... لذلك هذا بالتأكيد نوع من مشكلة الترميز. يتم تعيين نوع المحتوى بشكل صحيح في الرأس:
POST /ABCOrder/ABCServlet?cmd=getNetworkConnection HTTP/1.1
Connection: keep-alive
Content-Type: application/octet-stream
Host: 109.107.148.164:8443
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
User-Agent: Mozilla/4.0 (Windows Vista 6.0) Java/1.6.0_14
Content-Length: 81
المحلول
فيما يلي الحل: يحتوي JMeter على ملف تكوين ، بن/jmeter.properties. هنا يمكنك العثور على خيار حيث يمكنك تعيين أنواع المحتوى الثنائي:
# Binary content-type handling
# These content-types will be handled by saving the request in a file:
proxy.binary.types=application/x-amf,application/x-java-serialized-object
الآن لا أعرف لماذا التطبيق/ثماني الثماني غير مدرج افتراضيًا ، ولكن يمكنك ببساطة إضافته إلى القائمة ، وقد انتهيت.
proxy.binary.types=application/x-amf,application/x-java-serialized-object,application/octet-stream
هذه هي الطريقة التي وجدتها بها:https://issues.apache.org/bugzilla/show_bug.cgi؟id=44808
هل بحث على jmeter مغلق الأخطاء ... :-)
نصائح أخرى
شخص آخر يبلغ مشابهًا جدًا: http://markmail.org/message/pl5erin2isehm5q6. لا يمكنني العثور على أي مشكلة تتعلق بهذه المشكلة في تعقب الأخطاء رغم ذلك. يبدو أنك فازت بامتياز الحفر بشكل أعمق في حفرة الأرنب :)
تسمح الإجابة المقبولة فقط بتسجيل الطلبات الثابتة. لن يكون هذا واقعيًا لأنه لن يسمح بأي تباين للطلبات (على سبيل المثال تغيير الكلمة التي تم تفتيشها ، ...) لذلك ستكون دائمًا تختبر الإجهاد نفس مجموعة البيانات.
لجعله اختبارًا حقيقيًا ، تحتاج إلى استخدام مكون إضافي لجهة خارجية.
يتيح مكون الإضافي التجاري JMeter هذا ، راجع:
لجعل اختباراتك واقعية ، ستحتاج إلى تباين المحتوى في الكائنات المسلسل.
سيسمح هذا البرنامج المساعد التسلسلي Java بما يلي:
يسهل تسجيل حركة المرور مع خادم JMeter Proxy ، وسيتم إنشاء خطة اختبار باستخدام Sampler المخصصة
سهلة المتغيرات للطلبات (والتي ستظهر كـ XML) من خلال بناء الجملة السهل على سبيل المثال $ {searchedword} حيث يمكن أن تأتي كلمة البحث من CSV أو أي متغير محدد للمستخدم.
استخراج سهل للبيانات من الاستجابات باستخدام معالجات النشر القياسية JMeter
سهولة تصحيح الطلب/الاستجابات من خلال عنصر الشجرة القياسي في عرض JMeter
إخلاء المسئولية: أنا أعمل في هذه الشركة.