كيف يمكنني تمرير متغير من مجموعة مؤشرات ترابط إلى أخرى في JMeter

StackOverflow https://stackoverflow.com/questions/707832

سؤال

لدي اختبار JMeter مع مجموعتين من سلاسل الرسائل - الأولى عبارة عن سلسلة رسائل واحدة (مما يؤدي إلى إنشاء بعض المخزون) والثانية تحتوي على مؤشرات ترابط متعددة (التي تشتري كل المخزون).أستخدم تأكيدات BeanShell وXPath Extractors لتحليل القيمة التي تم إرجاعها (وهي XML) وتخزين المتغيرات (مثل معرفات العناصر التي سيتم شراؤها).

لكن القيم التي تم إنشاؤها في مجموعة الخيوط الأولى، سواء تم استخراجها في المعيار ${jmeter} اكتب المتغيرات، أو ${__BeanShell(vars.get("jmeter"))} النوع vars، غير متوفر في مجموعة المواضيع الثانية.هل هناك بأي حال من الأحوال إنشاء متغير في مجموعة الخيوط الأولى وجعله مرئيًا للثانية؟

هل كانت مفيدة؟

المحلول

لم أتمكن من القيام بذلك باستخدام المتغيرات (نظرًا لأنها محلية بالنسبة لخيوط فردية).ومع ذلك، تمكنت من حل هذه المشكلة مع الخصائص!

مرة أخرى، تقوم مجموعة ThreadGroup الأولى الخاصة بي بكل الإعداد، وأحتاج إلى بعض المعلومات من هذا العمل لتكون متاحة لكل من سلاسل الرسائل في مجموعة ThreadGroup الثانية.لدي تأكيد BeanShell في ThreadGroup الأول بما يلي:

${__setProperty(storeid, ${storeid})};

تم استخراج ${storeid} باستخدام XPath Extractor.يقوم تأكيد BeanShell بأشياء أخرى، مثل التحقق من إرجاع معرف المتجر من المكالمة السابقة، وما إلى ذلك.

على أية حال، في مجموعة ThreadGroup الثانية، يمكنني استخدام قيمة خاصية "storeid" في Samplers بما يلي:

${__property(storeid)}

يعمل كالسحر!

نصائح أخرى

وفقًا لوثائق JMeter:

16.12 مشاركة المتغيرات بين المواضيع ومجموعات المواضيع

المتغيرات محلية إلى مؤشر ترابط ، لا يمكن قراءة متغير في مؤشر ترابط في آخر.وهذا حسب التصميم.بالنسبة للمتغيرات التي يمكن تحديدها قبل بدء الاختبار ، راجع اختبارات تحديد المعلمات (أعلاه).إذا كانت القيمة غير معروفة حتى يبدأ الاختبار ، فهناك خيارات مختلفة:

  1. قم بتخزين المتغير كعقار - خصائص عالمية لمثيل JMeter
  2. اكتب المتغيرات إلى ملف وأعد قراءتها.
  3. استخدم مساحة الاسم bsh.shared - راجع 16.8.2 مشاركة المتغيرات
  4. اكتب دروس جافا الخاصة بك

هناك طريقة أخرى لتمرير المتغير بين سلاسل الرسائل وهي استخدام jmeter-plugins as ذكره أندريه بوتالوف أدناه.

لكنني وجدت أنه من المربك بعض الشيء استخدامه في المرة الأولى ولكنه يوفر تحكمًا كاملاً في المتغير أثناء المرور من خيط إلى آخر.اتبع مثالي مع استخدام BeanShell وسترى مدى سهولة ذلك:

Project stuctureالإشارة التالية إلى الأقسام الموجودة في الصورة أدناه:

(1.1) قمت هنا بإنشاء متغير مخصص في المتغيرات المحددة من قبل المستخدم (أو يمكنك القيام بذلك باستخدام BSF Proccessor - معطل في هذا المثال (1.2))

(2.1)(2.4)لقد استخدمت المتغير بنجاح في الموضوع الأول - لا شيء مميز :)

(2.2) تمت إضافة BeanShell PostProcessor وتخصيص المتغير الخاص بي

(2.3) تمت إضافته إلى قائمة الانتظار

(3.1) في الموضوع الثاني - يتم أخذ المتغير من قائمة الانتظار - بأي اسم تريده.لكن كن حذرًا، استخدم Timeout بحكمة، لأن هذا الموضوع سينتظر حتى النهاية السابقة حتى يتمكن من الحصول على متغير معدل (جرب بعض الاستجابات الطويلة)

(3.2)(3.3)(3,4)ذلك الخطوات المتكررة لاستخدام وتعديل المتغير

(3.5) يتم إرسال المتغير مرة أخرى في قائمة الانتظار الجديدة - لذا قم بتوفير اسم جديد له

(4.1)(4.2)(4.3) المتغير المعدل الذي تم الحصول عليه من قائمة الانتظار الجديدة يعمل مثل السحر

تحذير

  1. إذا قمت بإضافة المزيد من سلاسل الرسائل، فقم بإضافة بعض العدادات إلى مجموعة الخيوط مع المتغير وأضف اسم المتغير هذا إلى اسم قائمة الانتظار - افعل الشيء نفسه في مجموعة الخيوط حيث تحاول التقاط قائمة الانتظار بحيث يكون لقائمة الانتظار اسم فريد لكل موضوع (اكتب تعليقًا إذا كنت بحاجة إلى بعض الشرح أكثر وضوحا)

  2. إذا كان لديك أكثر من طلب http واحد في مجموعة سلاسل رسائل واحدة، فقم بإضافة معالج مسبق للاتصالات الخيطية باعتباره تابعًا للأخير (أو غير ذلك إذا كنت تريد تحقيق بعض الأشياء المخصصة) طلب http

قم بالتشغيل والتعديل والتخصيص للحصول على أفضل نتيجة :) يمكن أن تؤدي إضافة المزيد من سلاسل الرسائل إلى سلوك غير مرغوب فيه، لذا عليك أن تكون يقظًا.

Information about project structure

ولقد وجدت التي أعتقد أنها هي الطريقة الأكثر بسيطة لتحقيق هذا.

استخدم

Bean Shell PostProcessor

وتعيين متغير ( http://jmeter.apache.org/usermanual /best-practices.html#bsh_variables )

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", "value");

وأو إذا كنت تقرأ من متغير

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", vars.get("Extracted_PC_CREATED_PROMO_CODE"));

وبعد ذلك من مجموعة موضوع الأخرى، قراءته عبر ( HTTP: // jmeter. apache.org/usermanual/functions.html#__property )

${__property(PC_CREATED_PROMO_CODE)}

JMeter الإضافات لديها التواصل بين الخيوط لهذا الغرض.

هناك طريقتان لاستخدامه:

  • ما بعد المعالج / المعالج المسبق
  • المهام __fifoPut و __fifoPop

في رأيي، PostProcessor/PreProcessor أسهل في الاستخدام.

وهذا غير ممكن في JMeter، لأنه ليس سلوك العميل العادي (تقاسم معلمات بين المواضيع). بدلا من هذا الاستخدام واحد خيط المجموعة مع تحكم:

Thread Group
+ Create inventory
+ + XPath
+ Loop
+ + Purchase inventory

وحسنا هذا هو واحد طريقة للقيام بذلك. اتبع هذه الخطوات وأنه سوف يعمل، بعد ذلك يمكنك تعديله لاحتياجاتك! لا يتم تقاسمها بين المتغيرات المواضيع (JMeter يدعو هذا ميزة ربما :)). ولكن الخصائص هي! وهكذا وضع متغير ك بربري مثل ذلك:

1) انقر testplan وتمكين "تشغيل المجموعات الموضوع على التوالي '-> هذا ما يجعل المجموعات موضوع بتشغيل أمر وليس عشوائيا. (يمكنك تعديله في وقت لاحق، لكنه الآن إلى الحصول على عمل ..)

2) إنشاء threadgroup يسمى "الإعداد" على سبيل المثال. في تلك المجموعة إضافة موضوع بيانشيل عينات مع التعليمات البرمجية التالية:

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("theNameOfYourNewProperty", "theValueOfYourPropery");

وحتى الآن تم تعيين الخاصية! إذا كانت قيمة تريد تخزين باعتباره بربري هو متغير allready قد (العضو definded متغير متغير أو reqex على سبيل المثال) يمكنك القيام به:

JMeterUtils.setProperty("theNameOfYourNewProperty", vars.get("theNameOfYourVariable"));

و3) إضافة testgroup "الاختبار الفعلي" على سبيل المثال مع عدد من المواضيع أعلى من 1؛    إضافة هذه التجربة وهذا الاختبار إضافة بيانشيل قبل المعالج مع التعليمات البرمجية التالية:

import org.apache.jmeter.util.JMeterUtils;
vars.put("theNameOfYourNewProperty", JMeterUtils.getProperty("theNameOfYourNewProperty"));

وحتى الآن قمت بإنشاء متغير في هذا الموضوع ودعا theNameOfYourNewProperty التي لديها قيمة الخاص theNameOfYourNewProperty نظام الملكية. في الاختبار الخاص بك يمكنك الآن الوصول إليه مثل:

${theNameOfYourNewProperty}

وأنها ستعمل لكل موضوع، وليس فقط مجرد موضوع الأول ..

ودعونا نعطي الموضوع حياة ثانية :) طريقة أخرى لنقل المتغيرات بين المواضيع لكتابة / قراءة في الملف. تمرير المتغيرات بين المواضيع

الحل الآخر هو استخدام Simple Table Server لإدارة مجموعة البيانات.تم إضافة هذه الميزة إلى 1.2 JMeter Plugins.

"الفكرة الرئيسية هي استخدام خادم http صغير في JMeter Plugins لإدارة ملفات مجموعة البيانات بأوامر بسيطة يحصل / يضيف صفوف من البيانات في الملفات"

انظر إلى الوثائق:http://jmeter-plugins.org/wiki/HttpSimpleTableServer/

يعتبر.

وأضيف حبة قذيفة تأكيد استخدام وظيفة الملكية لتعيين القيمة إلى متغير (مثل متغير عمومي) التي ستعقد قيمة حتى بعد أن يذهب إلى موضوع آخر.

<اقتباس فقرة>   

ومجموعة موضوع >> إضافة >> التأكيدات >> فول شل التأكيد

${__setProperty(Global_variable_Name,${Variable_name_whose_Value_to_be_Passed})}

وبعد ذلك في موضوع آخر ما يمكن أن نطلق على هذا المتغير العالمي، ويمكن استخدامه

وأدناه هي وظيفة تحتاج إلى استخدام لاستدعاء القيمة المخزنة:

${__property(global_variable_name)}

https://medium.com/@priyank نأبه / jmeter-مرور-المتغيرات بين بين خيوط-a4dc09903b59

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top