نسخة أخرى من التقرير مع
محادثات Pixonic DevGAMM . أنطون كوسياكين هو مدير المنتج الفني ويعمل على منصة ALICE (مثل Jira للفنادق). أخبر كيف دمجوا أدوات الاختبار الحالية في المشروع ، ولماذا هناك حاجة إلى اختبارات الحمل ، والأدوات التي يقدمها المجتمع وكيفية تشغيل هذه الأدوات في السحابة. فيما يلي عرض تقديمي ونص التقرير.
نحن نصنع منتجًا يسمى ALICE Platform وسأخبرك الآن كيف قاموا بحل مشكلة اختبار الحمل.

أليس هو جيرا للفنادق. نحن ننشئ منصة لمساعدتهم على التعامل مع دواخلهم. بواب ، مشغل مكتب أمامي ، عمال نظافة - يحتاجون أيضًا إلى تذاكر. على سبيل المثال: يتصل الضيف> يقول أنك بحاجة إلى تنظيف الغرفة> يقوم الموظف بإنشاء تذكرة> الأشخاص الذين ينظفون ، ويعرفون من يتم تكليف المهمة> تنفيذ> تغيير الحالة.
لدينا b2b ، لذا قد لا تكون الأرقام مثيرة للإعجاب - فقط 1،000 فندق ، 5000 DAUs. بالنسبة للألعاب ، هذا ليس كثيرًا ، ولكن بالنسبة لنا رائع جدًا ، لأن هناك ما يصل إلى 8 خوادم إنتاجية ولا يمكنهم التعامل مع هؤلاء 5 آلاف مستخدم نشط. نظرًا لأن أشياء مختلفة قليلاً تحدث تحت غطاء المحرك - مجموعة من قواعد البيانات والمعاملات ، إلخ.

الشيء الأكثر أهمية: خلال العام الماضي ، نمينا مرتين ، والآن لدينا فريق هندسي في منطقة 50 شخصًا ونخطط لمضاعفة قاعدة المستخدمين في عام 2019. وهذا هو التحدي الرئيسي الذي يواجهنا.
مثال من الحياة. مساء يوم الجمعة ، بعد العمل لمدة 60 ساعة أسبوع عمل ، الساعة 23:00 أنهيت المكالمة الأخيرة ، أكملت العرض التقديمي بسرعة ، قفزت في القطار وأتيت إلى هنا. وقبل حوالي خمس دقائق ، قمت بإعادة عرضي قليلاً. الآن كل شيء يعمل لصالحنا ، لأننا شركة ناشئة وهذا رائع. أثناء القيادة ، حاول جزء من الفريق الفني (نطلق عليه النار عند الإنتاج) التأكد من أن النظام لم ينخفض ، وفي الوقت نفسه ، لم يلاحظ المستخدمون ذلك. لقد نجحوا وخلصنا.
كما ترون ، نحن حتى الآن لا ننام جيدًا في الليل. نحن نعلم بالتأكيد أن بنيتنا التحتية ستنهار. نحن نواجه الحقيقة ونتفهم ذلك. سؤال واحد: متى؟ هكذا فهمنا أن اختبار الحمل هو مفتاح الخلاص. هذا ما نحتاج إلى الاهتمام به.

ما هي أهدافنا. أولاً ، يجب أن نفهم الآن تمامًا قدرة وأداء نظامنا ، ومدى نجاحه للمستخدمين الحاليين. ويجب أن يحدث هذا قبل أن يخالف المستخدم العقد معنا (ويمكن أن يكون هذا عميلًا لـ 150 فندقًا والكثير من المال) نظرًا لكون شيء ما لا يعمل أو بطيئًا جدًا. بالإضافة إلى ذلك ، لدى قسم المبيعات خطة: نمو مزدوج خلال العام المقبل. وقد حدث أن اشترينا منافسنا الرئيسي وترحيل مستخدميها إلى أنفسنا.
ويجب أن نعلم أن كل هذا يمكن أن يتحمل. تعرف مسبقًا ، قبل أن يأتي هؤلاء المستخدمون وسيسقط كل شيء.
نحن أيضا ننشر الإصدارات. كل اسبوع. يوم الاثنين. بالطبع ، لا تقوم جميع الإصدارات بتوسيع الوظيفة ، في مكان ما ، إصلاحات ، إصلاح أخطاء في مكان ما ، ولكن يجب أن نفهم أن المستخدمين لن يلاحظوا ذلك وأن تجربتهم لن تسوء.
لكننا ، كمطورين جيدين ، كسالى ولا نحب العمل. لذلك ، سألوا المجتمع و Google عن الخدمات / الحلول المتوفرة لاختبار التحميل. كان هناك الكثير منهم. هناك بعض الأشياء البسيطة ، مثل Apache Bench ، والتي تقوم ببساطة بتشغيل موقع في مائة موضوع في عنوان url. هناك نسخة شريرة وغريبة من النحل مع المدافع الرشاشة ، حيث كل شيء هو نفسه ، لكنه يبدأ الحالات التي تطير وتضع تطبيقاتك. هناك JMeter ، هناك يمكنك كتابة بعض البرامج النصية ، وتشغيلها في السحابة.

يبدو أن كل شيء على ما يرام ، ولكن بعد التفكير ، أدركنا أنه يجب علينا العمل بالفعل وحل العديد من المشاكل أولاً.

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

تعتبر مسألة توليد الحمل ملحة ، لأن كل أداة تطلب بطريقتها الخاصة لتوليدها. وحتى عندما تمكنت من التأكد من أن السيناريوهات كانت مناسبة ، فإن السؤال الذي يطرح نفسه هو: كيفية الجري 2-4 مرات أكثر؟ يبدو أن: تشغيل وكل شيء على ما يرام. لكن لا. هناك جميع أنواع المعرفات في هذه الطلبات - نقوم بإنشاء شيء ما ، والحصول على معرف جديد ، وتغيير المعرف القديم والاختبار ، الذي يقوم بتحميل الكيان بواسطة المعرف ، ويغير مجاله إلى آخر. و 10 اختبارات تحمل نفس الكيان 10 مرات ليست مثيرة للاهتمام للغاية. لأنه 10 مرات من الضروري تحميل كيانات مختلفة وقياس هذا الحمل بشكل صحيح.
حسنًا ، نريد حل مشكلة اختبار الحمل من أجل فهم عدد المستخدمين الذين سيتحملهم التطبيق بالضبط ، وأن خططنا تتوافق مع خطط قسم المبيعات. قمنا بتحليل الحلول الموجودة في السوق ، ثم قمنا بجرد المعكرونة والعصي.
نظرًا لأننا نقوم بالإصدارات كل أسبوع ، بطبيعة الحال ، قمنا بأتمتة بعض الاختبارات - التكامل وشيء آخر. لهذا نستخدم الخيار. هذا هو إطار BDD للتنمية المدفوعة بالسلوك. على سبيل المثال نسأل بعض النصوص التي تتكون من خطوات.

سمحت لنا بنيتنا التحتية بتشغيل اختبارات التكامل والوظائف في وضعين: ما عليك سوى ركلة الواجهة الخلفية أو تغيير واجهة برمجة التطبيقات أو تشغيل Chrome من خلال Selenium وإدارته.
نحن نحب NewRelic. يمكنه ببساطة مراقبة الخادم ، المؤشرات الرئيسية. يدمج في JVM ويعترض جميع المكالمات إلى وحدات التحكم و Endpoint API. لديهم أيضًا حلًا للمتصفح ، وبما أن لدينا معظم الوظائف هناك ، فإنه يفعل أيضًا شيئًا في المتصفح ويعطي نوعًا من المقاييس.

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

الآن لنأخذ أي أداة متاحة حاليًا في السوق. إنهم يعملون على نفس البدائية: http ، مكالمات API على http ، JSON ، JUnit ، هذا كل شيء. ولكن بمجرد أن نحاول التمسك باختباراتنا على الخيار ، فإنهم يفعلون نفس الشيء ، ويعملون على نفس الأشياء ، ولكن لا شيء يعمل. بدأنا نفكر في كيفية التعامل مع هذه المهمة.
انحراف صغير ، لأن BDD ليس مصطلحًا شائعًا جدًا في تطوير الألعاب ، بل هو أكثر للحلول المؤسسية.

تصف جميع السيناريوهات نوعًا من السلوك. تنسيق وصف السيناريو بسيط للغاية: معطى ، متى ، ثم - من حيث BDD تسمى Gherkin. الخيار بالنسبة لنا ، باستخدام التعليقات التوضيحية والسمات ، يعين هذا على رمز Java. يفعل ما يراه في السيناريو: تحتاج إلى إعطاء الشخص تفاحة ، دعنا نجد طريقة يتم بها تنفيذ ذلك.

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

باختصار الآن نفس الشيء على الشرائح. تنقسم ملفات الميزات إلى نصوص ، وهناك خطوات وكل هذا مكتوب باللغة الإنجليزية.

ثم يتم تشغيل Cucumber ، رمز Java ، وهو يقوم بتعيين هذه البرامج النصية إلى التعليمات البرمجية التي يتم تنفيذها بالفعل.

يستخدم هذا الرمز تطبيقنا.

واعتمادًا على ما اخترناه: إما من خلال Selenium Chrome ، انتقل إلى تطبيق ALICE.

أو نفس الشيء عبر http API.

ثم (بفضل اللاعبين من Yandex لتقارير Allure Reports) ، يتم عرض كل هذا بشكل جميل لنا - كم من الوقت استغرق ، وما هي الاختبارات المعكوسة ، وفي أي خطوة وحتى تطبيق لقطة شاشة إذا حدث خطأ ما.

هنا ملخص موجز لما كان لدينا بالفعل.

كيفية بناء اختبارات الحمل من هذا؟ كان لدينا جنكينز يدير جناح الخيار. هذه هي اختباراتنا وذهبوا إلى ALICE. ما هي المشكلة الرئيسية؟ تجري جنكينز الاختبارات محليًا ، ولا يمكنها التوسع إلى الأبد. نعم ، نحن مستضافون في أمازون ، في السحابة ، يمكننا أن نطلب آلة كبيرة جدًا. على أي حال ، في مرحلة ما ، سنضرب ، على الأقل ، في الشبكة. من الضروري تحميل هذا الحمل بطريقة أو بأخرى. شكرا أمازون ، فكر لنا. يمكننا حزم حزمة Cucumber Suite في حاوية Docker واستخدام خدمة AWS (تسمى Fargate) لقول "وبدء تشغيلها ، من فضلك". تم حل المشكلة ، يمكننا تشغيل اختباراتنا بالفعل في السحابة.

ثم ، بما أننا في السحابة ، قم بتشغيل 5-10-20 Cucumber Suite. ولكن هناك فارق بسيط: كل تشغيل لجميع اختباراتنا الوظيفية يولد تقريرًا. بمجرد أن أجرينا 400 اختبارًا وتم إنشاء 400 تقرير.
نشكرك مرة أخرى على الرجال من Yandex للمصدر المفتوح ، نقرأ الوثائق ، وشفرة المصدر وأدركنا أن هناك طرقًا لتجميع جميع التقارير البالغ عددها 400 في تقرير واحد. قمنا بتصحيح البيانات قليلاً ، وكتبنا بعض ملحقاتنا ، وعمل كل شيء.

الآن من جنكينز ، نقول "أعطنا 200 حالة". يقول نصنا الخاص بالتنسيق الدقيق إلى أمازون ، يقول "إطلاق 400 حاوية". يحتوي كل منهم على اختبارات الاندماج الخاصة بنا ، ويقومون بإنشاء تقرير ، ويتم جمع التقرير من خلال Aggregator في قطعة واحدة ، يتم وضعها في Jenkins ، ويتم تطبيقها على الوظيفة ، وتعمل بشكل رائع.
لكن.
أنا متأكد من أن العديد منكم تلقوا أشياء غريبة من المختبرين ، مثل "لقد لعبت لعبة ، قفزت 10 مرات ، وضغطت بشدة على التصوير وضربت عن طريق الخطأ زر الإغلاق - بدأت الشخصية في الوميض ، وتتجمد في الهواء ، ثم يتم إيقاف تشغيل الكمبيوتر ، التعامل مع هذا ". لا يزال بإمكانك الاتفاق مع شخص وقول ، كما تعلم ، من المستحيل التكاثر. ولكن لدينا آلات بلا روح ، يقومون بكل شيء بسرعة كبيرة وفي مكان ما لم يتم تحميل البيانات ، وفي مكان ما لا يتم عرضه بسرعة كبيرة ، يحاولون الضغط على زر ، ولكن لا يوجد زر حتى الآن أو يستخدم بعض البيانات التي لم يتم تنزيلها من الخادم بعد . كل شيء ينهار والاختبار معيب. على الرغم من (أريد التركيز على هذا) ، لدينا رمز جافا يشغل Chrome ، والذي يتصل بجافا أخرى من خلال غلاف ويفعل شيئًا ولا يزال يعمل بسرعة البرق.
حسنًا ، المشكلة الواضحة الناشئة عن هذا: لدينا 5 آلاف مستخدم ، وأطلقنا 100 حالة فقط من اختباراتنا الوظيفية وخلقنا نفس الحمل. هذا ليس بالضبط ما أردناه ، لأننا نخطط أن يكون لدينا الشهر المقبل 6 آلاف مستخدم. من الصعب فهم مثل هذا الحمل ، لفهم عدد الخيوط لبدء.
حسنًا ، دعنا ننسق نظامنا. هذا ما تبدو عليه واجهة المستخدم:

شخص ما يتصل ، يريد الكونسيرج الضغط على زر "إنشاء تذكرة جديدة" ، تظهر نافذة له ويحتاج إلى ملء جميع الحقول.

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

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



هذا تشغيل جدول زمني. الاختبارات الخضراء جيدة ، ومكان سيء. سيوضح لنا Allure تفاصيل المكان الذي يتقلب فيه.
وهنا هو الجدول الزمني ، الذي يظهر أنه كان لدينا العديد من الحالات. قاموا بإجراء اختبار ، في مكان ما سقط شيء.

يعمل النظام حقًا - قمنا الأسبوع الماضي بإجراء الاختبارات الأولى على الإنتاج القتالي.
الآن حول الخطوات التالية ، كيف نعتقد أنه يمكن تحسينها.

والأهم من ذلك ، نريد أن يحصل الأشخاص على تجربة مستخدم رائعة. الفكرة هي أنه يمكننا إنشاء حمولة كبيرة على تطبيقنا ويبدو أن كل شيء بسيط - قمنا بقياس أداء كل طلب إلى الخادم بشكل تافه ، سواء استمر في الاستجابة بمجرد بدء عمليات السحب أو الأداء (بدأ الخادم بمعالجة الطلبات الواردة ببطء أكثر). لكن لا. في الواقع ، يمكن للعميل / التطبيق طرح عدة طلبات على الخادم في وقت واحد ، في باقة. وانتظر حتى تتم معالجتها جميعًا. وإذا كان أحد الطلبات ، الأطول ، كيف عمل لمدة 5 ثوانٍ ، واستمر في العمل لمدة 5 ثوانٍ ، فإننا لا نهتم تمامًا بكيفية عمل الجميع - بسرعة أو تباطؤ إلى 4 ثوانٍ. بعد كل شيء ، ما زلنا ننتظر أطول خمس ثوان. أو قمت بإنشاء تذكرة ، عمل كل شيء في مللي ثانية واحدة ، ولكن ظهرت البطاقة في النظام بعد فوات الأوان بسبب ذاكرة التخزين المؤقت للفهرس الداخلي. لن يحل النهج المعتاد هذه المشكلة ، لذلك نريد محاولة قياس جميع السيناريوهات ومعرفة مدى سوء البرنامج النصي لإنشاء التذاكر.
لأن لدينا جميع السيناريوهات القائمة على مفاتيح التشغيل ، يمكننا التقليد عن طريق تشغيل شخص واحد في الاستقبال و 10 عمال نظافة. ثم 20 أو 30 منظف. لكن جبهة الشعب لا تزال هي نفسها. على سبيل المثال يمكننا توليد حمل حقيقي من خلال أنماط السلوك ، قريبة جدًا من الحمل الواقعي.
أيضا اختبار متعدد المناطق. يستخدم نظامنا في جميع أنحاء العالم (على الرغم من أن كل شيء مستضاف في أمريكا) وبالتالي يمكننا توليد حمولة من كل من روسيا وأمريكا لمعرفة أيهما يبدأ في التباطؤ بشكل أسرع.
أسئلة من الجمهور
- تضطر إلى كتابة كمية كبيرة من المنطق ، وعندما يتغير شيء ما قليلاً ، فإنك تكسر الكثير من الأشياء في الاختبارات الوظيفية. اتضح أنه يستغرق منك وقتًا أطول لدعم الاختبارات من التطوير؟"نعم ، ولكن لا". هذا هو BDD ، هذه ليست اختبارات وظيفية تمامًا ، فهي أقرب إلى اختبارات التكامل. ومهما تغيرنا ، يبقى السيناريو كما هو. أضغط على زر ، أرى نافذة ، أقوم فيه بإدخال رقم الغرفة التي تم استلام الطلب بها ، واسم الشخص وتاريخ حجز طاولة. إذا تغير التخطيط ، تغيرت الحقول الأماكن ، إذا حدث شيء ما في الخلفية ، يتم حفظ الاختبار ، لأننا على مستوى عالٍ جدًا ، نضغط على الأزرار في المتصفح. لذلك ، نحن محميون من عدد كبير من التغييرات. هناك أوقات يمكن أن ينكسر فيها كل شيء. لذلك ، في إجراء الإصدار ، هؤلاء الأشخاص الذين يكتبون ميزة جديدة - هم مسؤولون عن رؤية أن شيئًا ما معطوب وإصلاح. ولكن حتى الآن لم تكن هناك مثل هذه المشاكل بأعداد كبيرة.
- ولم يكن لديك حالة أنه بعد تغيير واحد تتحول جميع الاختبارات إلى اللون الأحمر.- لم يكن كذلك. من الناحية النظرية ، يمكن أن يحدث هذا إذا لم يكن لدى البرنامج النصي زر ، ولكن هناك طريقة أخرى لفتح نافذة لإدخال معلومات التذكرة. ولكن ، كما أوضحت سابقًا ، فإن جميع سيناريوهاتنا تتكون من خطوات. الخطوات هي الكثير من كل شيء ، وإذا كان لدينا 100 نص برمجي ينقر على الزر نفسه ، فإن الخطوة لا تزال واحدة. وإذا انخفض كل شيء بسبب هذه الخطوة بالذات ، نقوم بتصحيحها وإعادة كتابتها وتتحول جميع الاختبارات إلى اللون الأخضر على الفور.
على الرغم من أنه عندما كسرنا شيئًا ما عن طريق الخطأ ، حدث ذلك لنا. بقي 40 ٪ فقط من اللون الأخضر ، على الرغم من أنه كان قبل ذلك 99 ٪. كان ذلك تغييرا صغيرا. قمنا بتصحيح خطوة واحدة (سطر التعليمات البرمجية) وتحول كل شيء إلى اللون الأخضر مرة أخرى.
- على الرغم من عدم وجود اختبارات تكامل ، إلا أنها لا تعمل بكامل طاقتها. بطريقة أو بأخرى ، هذا نوع من الواجهة الرسومية حيث يتم الضغط على الأزرار ، يحدث نوع من التفاعل تحديدًا مع الغلاف الخارجي. أنا أفهم أن لديك اختبارات في هذا النموذج ، فأنت تبدأ فقط الكثير من المواضيع في نفس الوقت. ولماذا لم يرتبوا الطلبات التي تم إنشاؤها بواسطة الأدوات القياسية: JMeter ، Gatling ، التي لا تتفاعل مع الغلاف الخارجي بأي شكل من الأشكال ، ولكن ببساطة صب الطلبات على الخادم؟- كل شيء بسيط للغاية. ما هي بنية تطبيقنا؟ لدينا خلفية ، لدينا واجهة أمامية. الواجهة الأمامية هي الويب. يوجد تطبيق محمول. وعندما أقوم بإنشاء تذكرة ، تكون الواجهة الأمامية متصلة ، على سبيل المثال ، أيضًا بخوادم الأحداث. أقوم بإنشاء تذكرة على الواجهة الخلفية وجميع الأشخاص الذين يجلسون في نفس تذاكر مشاهدة الفندق في نفس الفندق ، سيصلون من خوادم الأحداث: سيتم تحديث اللاعبين ، وقد تغيرت البيانات هناك. ولجمع كل شيء معًا ، لدينا نقطة واحدة - هذا هو العميل. إنه يتصل بعدد كبير من المكونات المختلفة وإما أننا نبرم بأيدينا أننا أنشأنا تذكرة في الواجهة الخلفية ثم نتصل بخادم الأحداث ، وقم بالتسجيل عليه وانتظر بعض الأحداث منه. أو أطلقوا للتو متصفحًا تم فيه تجميع كل شيء بالفعل ، وهذا الرمز مكتوب بالفعل ونفعل كل ما نحتاجه.
- لكن هذه مقاربات مختلفة؟ أو نعمل بشكل خاص مع الخادم أو مع النافذة. يمكنك محاكاة الطلبات على خوادم متعددة في وقت واحد.- لهذا أخبرتك أن لدينا روبوتات وظيفية يتم استدعاؤها من الاختبارات. هناك من يلتقط Chrome ويقوم بنقرات عالية المستوى. هناك من لا ينقر على الزر ، ولا يحدث شيء ، ولكن في وقت إنشاء التذكرة ، يرسل طلبًا إلى الخادم ، ويمكننا تشغيل هذا أو ذاك. لقد اخترنا العمل عبر Chrome لسبب واحد بسيط - نريد محاكاة المستخدمين الحقيقيين ، بالطريقة التي يستخدمونها بها حقًا. أثناء تحميل صفحته ، بينما تم تقديم كل شيء له ، بينما عملت نصوص Java وما إلى ذلك. نريد أن نكون قريبين من المستخدم قدر الإمكان ، وهذا هو الويب الحقيقي.
- لكن الكثير من الأشياء ستعتمد على نوع مستخدم الإنترنت ، وأي بيئة. ولكن على وجه التحديد ، سيعتمد تشغيل التطبيق عليك بالفعل وعلى جانبك. السؤال هو ، ما الذي نختبره: من حيث المبدأ ، هل كله أو جزء منه بشكل منفصل؟- سؤال جيد ، لذلك تحدثت عن اختبار متعدد المناطق. يمكننا أن نحاول زيادة حركة المرور من المكسيك ، حيث ربما لا تكون جيدة جدًا مع الإنترنت. يمكننا توليد حركة مرور من أمريكا ، وهي قريبة جدًا من منطقة الأمازون حيث يتم استضافة كل شيء. ولكن إذا فتح شخص في الخلفية موقع YouTube أو بدأ في استخراج البيتكوين ، فلا يمكننا إعادة إنتاجه بالفعل. هنا يجب أن تنتظر مكالمة من عملاء حقيقيين وتذهب إليهم لفهم ما يحدث. هذه ليست رصاصة فضية ، نعم.- تقوم بنشر الاختبارات. هل لديك نوع من ارتفاع شبكة السيلينيوم أم ماذا؟ ما زلت تجعلها متعددة المناطق.— Cucumber': JAR, JAR Docker image Fargate' , image . flood.io grid Selenium , .
— ? , Chrome, . Internet Explorer 4 ( - ), ? - Android -.— , enterprise. enterprise , requirements. — , , web view. Android web view , .
— , , Load-? ?— .

Environment . . , Load, . 4- , , aliceapp.com. Load- , . , 504, , MySQL ElasticSearch.
— ( ), , ? .— Load- , . على سبيل المثال .
— , ?— , . , , , .
— , , .. html API?— Selenium DOM- : , , key down , — . .
— ? , ?— . , . QC, , QC. Smoke- -. « -, ». — , , , .
Pixonic DevGAMM Talks