Как пропустить записи файла hosts при запуске тестов селена в нескольких средах от агентов Jenkins - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть тесты селена, предназначенные для выполнения в нескольких средах, таких как Dev, QA, Staging, UAT. Однако эти среды не сопоставляются с именами доменов DNS, поэтому мне дали несколько IP-адресов и имен хостов для добавления в файл хостов компьютера, с которого будут выполняться эти тесты, такие как агенты Jenkins или мой локальный компьютер. Однако у меня нет доступа (Admin) к файлам хостов на этих машинах, и я не считаю практичным также делать это на нескольких машинах.

Мне интересно, есть ли способ обойти эти хосты? записей и достичь того же с помощью java кода?

Я пробовал dns java, но мне не удалось заставить работать оператор driver.get("https://my.url.com/signup"). Он не может видеть среду my.url.com.

Записи моего хоста выглядят следующим образом.

1.2.3.4 dev.application.com
5.6.7.8 qa.application.com
2.3.4.5 uat.application.com
4.5.6.7 Staging.application.com

Я пробовал код ниже dns java, чтобы обойти добавление хостов записей, добавляя их в кэш DNS, надеясь, что JVM разрешит их, как и ожидалось.

public static void setupDNSEntries() {
    System.setProperty("sun.net.spi.nameservice.provider.1", "dns,dnsjava");
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(EnvironmentSetup.class.getResourceAsStream("/hosts")))) {
        LogManager.getLogger().info("Adding DNS look-up entries to default cache.");
        while (reader.ready()) {
            String[] line = reader.readLine().split(" ");
            String ipaddress = line[0].trim();
            String hostname = line[1].trim();
            addHostToCacheAs(hostname, ipaddress);
            LogManager.getLogger().info(ipaddress + " " + hostname);
        }
    }catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public static void addHostToCacheAs(String hostname, String ipAddress) throws UnknownHostException, TextParseException {

    // add an ending period assuming the hostname is truly an absolute hostname
    Name host = new Name(hostname + ".");
    // putting in a good long TTL, and using an A record, but AAAA might be desired as well for IPv6
    Record aRec = new ARecord(host, Type.A, 9999999, InetAddress.getByName(ipAddress));
    Lookup.getDefaultCache(Type.A).addRecord(aRec, Credibility.NORMAL);
}

наконец, я пытаюсь получить driver.get("https://my.url.com/signup"), чтобы успешно перейти к приложению, но оно не работает.

Если я просто добавлю все записи хоста в 'C:\Windows\system32\drivers\etc\hosts', тогда driver.get("https://my.url.com/signup") будет работать безупречно.

Где я ошибаюсь?

...