كيف يمكنني التعرف على مضيف شبكة السيلينيوم الذي يجري الاختبار الخاص بي من داخل الاختبار؟

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

سؤال

أنا أستخدم شبكة السيلينيوم مع TestNG لإجراء اختباراتي بالتوازي.لدي اختبارات معينة تتطلب تسجيل دخول المستخدم، لذلك لدي حساب مستخدم تم تكوينه للاختبار.

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

  • قم بإعداد مستخدم جديد لكل اختبار (أدرك أن هذا قد يكون الحل المثالي، ولكن الأمر سيستغرق بعض الوقت لتكوينه/تشغيله.

  • لديك حسابات مستخدمين اختبارية متعددة، وتأكد من استخدام حساب واحد فقط في كل مرة.

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

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

المحلول 2

لقد قمت بحل مشكلتي عن طريق إعداد العديد من حسابات المستخدمين الفريدين للاختبار ، وكل ذلك ينتهي برقم (على سبيل المثال: selenium.test1). كان هذا بسيطًا لأتمتة كمهمة واحدة باستخدام السيلينيوم.

أقوم بتخزين هذا الرقم في الكود ، وفي كل مرة يحتاج الاختبار إلى تسجيل الدخول ، يتم زيادة الرقم وتم بناء اسم المستخدم.

لقد فكرت في "إطلاق" وأعيد استخدام هذه الحسابات لاحقًا عند الانتهاء من الاختبارات ، لكنني قررت أنه كان من الأسهل فقط التأكد من أن لدي الكثير من حسابات الاختبار للاختبارات.

نصائح أخرى

لقد حلت مشكلة تحديد جهاز التحكم عن بُعد عن طريق وضع "صفحة من أنا". ضمن مصنع WebDriver (أو السيلينيوم) عن بُعد ، أزور تلك الصفحة ، وأخزنها في تلك الفئة التي أستخدمها للاحتفاظ بالجلسة ، وتسجيلها. تقارير هذه الصفحة اسم المضيف ، IP ، نوع المتصفح والإصدار.

حل آخر معروض هنا:

https://groups.google.com/forum/#!topic/selenium-users/8eNRW9JnayQ

 public static String[] getHostNameAndPort(String hostName, int port, SessionId session) {
        String[] hostAndPort = new String[2];
        String errorMsg = "Failed to acquire remote webdriver node and port info. Root cause: ";

        try {
            HttpHost host = new HttpHost(hostName, port);
            DefaultHttpClient client = new DefaultHttpClient();
            URL sessionURL = new URL("http://" + hostName + ":" + port + "/grid/api/testsession?session=" + session);
            BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST",
                    sessionURL.toExternalForm());
            HttpResponse response = client.execute(host, r);
            JSONObject object = extractObject(response);
            URL myURL = new URL(object.getString("proxyId"));
            if ((myURL.getHost() != null) && (myURL.getPort() != -1)) {
                hostAndPort[0] = myURL.getHost();
                hostAndPort[1] = Integer.toString(myURL.getPort());
            }
        } catch (Exception e) {
            logger.log(Level.SEVERE, errorMsg, e);
            throw new RuntimeException(errorMsg, e);            
        }
        return hostAndPort;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top