Как интегрировать LambdaTest с Calliope.pro? | Лямбда-тест

Сотрудничество имеет ключевое значение для любого успешного релиза. Можете ли вы представить, что проходите спринт без консультаций или информирования какой-либо другой команды, участвующей в проекте, о том, что вы сделали? Вы не можете быть правы, потому что это некрасивая картинка. Современные SDLC требуют, чтобы различные команды координировали свои действия, пытаясь как можно быстрее доставить продукт на рынок с гарантированным качеством.

Ваша работа в качестве тестировщика автоматизации не ограничивается простым запуском сценариев автоматизации для вашего веб-приложения, вы также должны делиться результатами тестирования между различными командами, такими как команда разработчиков или бизнес-аналитики. Создание и представление отчетов требует больших усилий, поскольку в ваших отчетах должно быть четко указано, какие модули работают нормально, а какие нет.

На этой неделе я добавил новый инструмент в свой контрольный список тестирования, чтобы помочь мне поделиться результатами моего автоматизированного тестирования Selenium со всей моей командой, когда я выполнял автоматизированное кросс-браузерное тестирование, и этот инструмент Каллиопа. В этой статье я собираюсь помочь вам интегрировать вашу учетную запись LambdaTest с Calliope, чтобы вы могли мгновенно обмениваться отчетами о сценариях автоматизации тестирования, выполненных в LambdaTest Selenium Grid, со своими товарищами по команде. Начнем с большого вопроса.

Что такое Каллиопа?

Каллиопа

Calliope — это облачный инструмент, предоставляющий вам общую панель инструментов для совместного использования, мониторинга и сравнения результатов выполнения вашего сценария автоматизации. Предлагая совместимость с основными средами автоматизации тестирования, Calliope позволяет вашей организации иметь единое представление обо всем, что происходит с вашими сценариями тестирования автоматизации. Ваши заинтересованные стороны также могут проанализировать его для сравнения текущего состояния ваших циклов тестирования с историческим состоянием.

Calliope гарантирует, что вся ваша команда находится на одной странице, когда дело доходит до анализа результатов ваших тестов. Вот как:

  1. Поделитесь результатами теста — Результаты ваших тестов представлены в синтаксисе Gherkin, что облегчает понимание ваших акционеров.
  2. Настройте свою собственную панель инструментов — Пригласите своих коллег и структурируйте информационную панель так же, как вы структурируете свою команду.
  3. Сравните исторические данные – Вы можете сравнить текущее состояние работоспособности ваших тестовых сборок с историческим состоянием. Кроме того, все ваши тестовые случаи собираются в одном регионе, что позволяет даже заинтересованным сторонам, не являющимся техническими специалистами, иметь четкое представление об общем состоянии ваших сценариев автоматизации.
  4. Простая проверка регрессии – Calliope хранит все ваши импортированные тесты в своих облаках, что упрощает вам проверку в любое время для проверки ваших циклов регрессионного тестирования.
  5. API-интеграция – Calliope API поможет вам мгновенно запускать наборы тестов на сторонних инструментах через панель результатов тестирования, представленную в вашем экземпляре Calliope.
  6. Интеграция CI/CD с GitLab – Как и LambdaTest, Calliope также предлагает интеграцию с GitLab CI, чтобы помочь вам импортировать тестовые примеры непосредственно из конвейера CI/CD в экземпляр Calliope.

Теперь у нас есть представление о различных функциях, предлагаемых Calliope. Пришло время узнать об интеграции LambdaTest с Calliope. Однако для тех из нас, кто не знает о LambdaTest.

Что такое лямбда-тест?

Мы предлагаем облачное кроссбраузерное тестирование платформу, чтобы помочь вам выполнить тестирование совместимости браузера как вручную, так и автоматизированное тестирование с помощью Selenium. LambdaTest предлагает Selenium Grid из более чем 2000 реальных браузеров для мобильных и настольных компьютеров, работающих в реальных операционных системах.

Выполняйте кросс-браузерное тестирование с помощью LambdaTest в более чем 2000 браузерах с бесплатной регистрацией.

Почему вам следует интегрировать LambdaTest с Calliope?

Если кросс-браузерное тестирование не организовано должным образом, это может привести к беспорядку. Вам потребуется тщательный план и стратегия, разработать матрица кроссбраузерной совместимости чтобы выяснить, какие браузеры имеют более высокий приоритет, а какие — самый низкий. В зависимости от объема тестового покрытия и имеющегося времени вам нужно будет принять решение о выборе автоматизированного кросс-браузерного тестирования. Чтобы ускорить работу, вам потребуется параллельное выполнение с помощью Selenium, с помощью которого вы можете запускать несколько тестовых случаев одновременно. И даже после того, как вы будете следовать правильному плану, вам понадобится панель тестирования, где вы сможете объединить все свои тестовые случаи в одном месте, чтобы у всех было четкое и краткое представление. Именно здесь на сцену выходит интеграция LambdaTest с Calliope.

Используя интеграцию LambdaTest с Calliope, вы можете анализировать результаты тестов сценариев автоматизации, которые выполняются параллельно в более чем 2000 комбинациях браузеров и ОС. Давайте начнем.

Импорт результатов тестирования автоматизации LambdaTest в инструментальную панель Calliope

Итак, теперь вы знакомы с услугами LambdaTest и Calliope, давайте посмотрим, как вы можете импортировать результаты автоматического тестирования LambdaTest непосредственно на панель управления Calliope. Для получения сведений о результатах автоматического тестирования LambdaTest с нуля нам нужно вызвать LambdaTest API, который предоставит нам сведения о недавно выполненном тестовом сеансе, такие как имя, статус, ОС, браузер, версия и конечная точка всех сгенерированных журналов. Мы будем использовать следующий API:

Get/sessions/{session_id}

Он предоставит нам информацию, относящуюся к нашим тестовым сессиям. Это потребует от вас указать идентификатор сеанса для тестового сеанса, для которого вы хотите получить детали. Вы можете обратиться к Документация по API LambdaTest чтобы проверить пример значения или схемы.

Ниже приведены сведения о сеансе тестирования, которые будут получены через API LambdaTest и импортированы на панель инструментов Calliope.

{
data:{
name=Calliope-Sample-Test,
duration=24,
platform=win10,
browser=chrome,
browserVersion=74.0,
device=,
statusInd=running,
sessionId=ca7e3b1df8ddc533fc5394141601431f,
buildName=LambdaTest Integration with Calliope,
consoleLogsUrl=
networkLogsUrl=
commandLogsUrl=
seleniumLogsUrl=
videoUrl=
screenshotUrl=
}, 
message:Retrieve session was successful, 
status:success
}

Вам может быть интересно, как вы можете отправить приведенные выше сведения о тестовом сеансе непосредственно на панель управления Calliope после получения из LambdaTest API. Итак, вот вам код Java-TestNG, который может помочь вам настроить тестовую среду, которая также включает ваше имя пользователя, ключ доступа, gridURL и тестовые конфигурации, такие как браузер, версия браузера, ОС и т. д.

После того, как вы настроили тестовую среду, вы можете написать свои тестовые примеры. Мы использовали класс Java SessionId, который предоставляет идентификатор сеанса для запуска сеанса, мы можем использовать тот же идентификатор сеанса для вызова LambdaTest GET Session API, URL-адрес которого:

Для доступа к LambdaTest API вам необходимо авторизоваться с вашими учетными данными, которые включают ваше имя пользователя и ключ доступа. Мы использовали класс Base64 для кодирования учетных данных, которые являются общепринятым форматом для веб-серверов и браузеров.
Теперь мы можем использовать нашу закодированную базовую авторизацию с URL-адресом сеанса, чтобы отправить запрос GET для получения сведений о тестовом сеансе.

Поскольку здесь мы используем Java-TestNG, все результаты наших тестов и журналы сохраняются в файле testng-results.xml. Этот файл предназначен для сбора данных тестового сеанса и может в дальнейшем использоваться с API Calliope для передачи сохраненных данных тестового сеанса в Calliope Dashboard. В приведенном ниже коде мы также использовали Reporter.log, который будет сообщать журналы тестов и все другие сведения о сеансе в файл testng-results.xml.

Посетите наш репозиторий GitHub, чтобы получить доступ ко всему коду, представленному в этой статье, для интеграции LambdaTest с Calliope.

BaseTest.java


package calliopeIntegration;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Base64;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.SessionId;
import org.testng.Reporter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import calliopeIntegration.session.SessionResponse;


@Listeners({IntegrationExecution.class})
public class BaseTest {
    
    public String username = "Your_Username";    //LambdaTest Username
    public String accesskey = "Your_AccessKey;   //LambdaTest AccessKey
    public static RemoteWebDriver driver = null;
    public String gridURL = "@hub.lambdatest.com/wd/hub";   //GridURL
    boolean status = false;
   
    
    @BeforeMethod
     public void setUp() {
        DesiredCapabilities capabilities = new DesiredCapabilities();   // Setting configurations
        capabilities.setCapability("browserName", "chrome");
        capabilities.setCapability("version", "74.0");
        capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get the any available one
        capabilities.setCapability("build", "LambdaTest Integration with Calliope");
        capabilities.setCapability("name", "Calliope-Sample-Test");
        capabilities.setCapability("network", true); // To enable network logs
        capabilities.setCapability("visual", true); // To enable step by step screenshot
        capabilities.setCapability("video", true); // To enable video recording
        capabilities.setCapability("console", true); // To capture console logs
        try {
            driver = new RemoteWebDriver(new URL(" + username + ":" + accesskey + gridURL), capabilities);
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    
        Reporter.log("Build and Session Information retrieved from LambdaTest API's",true);
     }

             // Test cases
    @Test
    public void BuildSession() throws Exception {
        
        try {

            driver.get("
            driver.manage().window().maximize();
            Thread.sleep(5000);
            
            driver.findElement(By.xpath("//*[@id=\'ac-globalnav\']/div/ul[2]/li[3]")).click();
            Thread.sleep(2000);

            driver.findElement(
            By.cssSelector("#chapternav > div > ul > li.chapternav-item.chapternav-item-ipad-air > a")).click();
            Thread.sleep(2000);

            driver.findElement(By.linkText("Why iPad")).click();
            Thread.sleep(2000);
            
                
            
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }   
    }
    
    
    
    
    @AfterMethod
     public void teardown() throws Exception {
        
        SessionId session = driver.getSessionId();
        String sessionId = session.toString();
        
         if (driver != null) {
                ((JavascriptExecutor) driver).executeScript("lambda-status=" + status);
               driver.quit();
            }
        
        
        String usernameColonPassword = username+":"+accesskey  ;    // API Authorization
        String basicAuthPayload = "Basic " + Base64.getEncoder().encodeToString(usernameColonPassword.getBytes());
        Reporter.log(basicAuthPayload);
        
        
        
        //Session Info
        String sessionURL = ""+sessionId;
        Reporter.log(sessionURL,true);  
        String jsonResponse2 = sendGetRequest(sessionURL,basicAuthPayload);
        ObjectMapper objectMapper2 = new ObjectMapper();
        objectMapper2.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        SessionResponse response2 = objectMapper2.readValue(jsonResponse2, SessionResponse.class);
        Reporter.log(response2.toString(),true);    
            
    }

    
    
    

    public static String sendGetRequest(String url, String basicAuthPayload) throws Exception {
        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet(url);

        // add GET request header
        request.addHeader("Content-Type", "application/json");
        request.addHeader("Authorization", basicAuthPayload);
        HttpResponse response = client.execute(request);

        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null)
        {
            result.append(line);
        }
        return result.toString();   
     }
    

    
}

Теперь, после выполнения приведенного выше кода, наш тест выполняется в LambdaTest Selenium Grid вместе с тестовым файлом testng-results.xml, сохраненным в нашей системе, который включает все детали нашего последнего тестового сеанса.

Панель автоматизации LambdaTest

Следующим шагом является вызов Calliope API для отправки тестовых данных из файла testng-results.xml на панель управления Calliope. Calliope поддерживает различные форматы файлов результатов в зависимости от различных фреймворков. Например, XML для Junit и TestNG, JSON для Cucumber. Для получения дополнительной информации об этом вы можете обратиться к Ссылка на документацию Каллиопы.

Мы использовали класс MediaType для определения типа файла (XML) для нашей среды TestNG. Теперь нам нужен файл testng-results.xml для GET и POST данных тестового сеанса. Итак, нам нужно определить каталог, в котором этот файл сохранен, чтобы получить доступ к файлу, вызвав Calliope API.
Мы определили команду API как URL-адрес конечной точки, который включает номер вашего профиля, а также ОС, платформу и имя сборки. Вы можете извлечь свой Calliope API из их документация по импорту API.

Убедитесь, что вы ввели правильный ключ API, иначе ваш тест не будет выполнен из-за несоответствия ключа API номеру вашего профиля.

После настройки URL-адреса конечной точки и ключа API пришло время вызвать Calliope API, отправив запрос POST для импорта результатов теста на панель инструментов.

CalliopeAPI.java

package calliopeIntegration;


import java.io.File;
import java.io.IOException;

import org.testng.annotations.Test;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class CalliopeAPI 
{
    @Test 
    public void calliopeAPIcall()
    {    
        final MediaType MEDIA_TYPE_XML = MediaType.parse("application/xml");    // for xml files    
        final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json");  // for json files

            
        MultipartBody requestBody = null;
        try {
            String report_filename = "C:\\Users\\Lenovo-I7\\git\\Calliope-Integration-with-LambdaTest\\CalliopeSample\\test-output\\testng-results.xml";     // Result File Address
            
            requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("file", report_filename, RequestBody.create(MEDIA_TYPE_XML, new File(report_filename)))
                    .build();
        } catch (Exception e1) {
            
            e1.printStackTrace();
        }  
        
        OkHttpClient client = new OkHttpClient();
        String endpoint_url = "   // Calliope API
        final String API_KEY = "ZDk4ZGVhM2VlMzRlYjlkZGI0Y2MxZTA4Yjg1OTYxNjUyMzQzMGZhZmE0NTY0MTk4Y2MyMmM0NGQ3OTlmNTk2N2Jm";  //Calliope AccessKey
        Request request = new Request.Builder().url(endpoint_url).post(requestBody).addHeader("x-api-key", API_KEY).build();   // POST request
          
        Response response = null;
        try {
            response = client.newCall(request).execute();
            System.out.println("=============");
            System.out.println(response);
            String response_body = response.body().string();
            System.out.println(response_body);
            System.out.println("=============");
            
            if (response.isSuccessful()){
                 
                 System.out.println("created");
            } else {
                throw new IOException("Unexpected HTTP code " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
          
      
    }
}

Консольный вывод

Чтобы убедиться, что файл CalliopeAPI.java запускается после завершения выполнения файла BaseTest.java, мы использовали для этого прослушиватели TestNG. Напомним, что файл BaseTest.java включает в себя тестовые конфигурации, тестовые примеры и процедуру вызова API сеанса LambdaTest GET. Итак, если выполнение BaseTest.java не заканчивается, мы не можем вызывать CalliopeAPI.java, по этой причине мы использовали IExecutionListener, который предоставляет два метода и onExecutionFinish().

  • Метод onExecutionStart() вызывается перед запуском TestNG.
  • Метод onExecutionFinish() вызывается после запуска всех наборов.
IntegrationExecution.java


package calliopeIntegration;

import org.testng.IExecutionListener;

public class IntegrationExecution  implements IExecutionListener {

    public void onExecutionStart() {
        
        System.out.println("Fetching LambdaTest Automation Test Data and Sending to Calliope Dashboard");
        
    }

    public void onExecutionFinish() {
        
        CalliopeAPI object = new CalliopeAPI();
        object.calliopeAPIcall();  // Calling Calliope API after test execution on LambdaTest
        
    }

}

Поскольку мы извлекаем данные из LambdaTest API, схема которого имеет формат JSON, нам необходимо настроить и организовать тестовую сессию, извлекающую данные с помощью JsonPropertyOrder.

Ниже приведен код, который покажет вам иерархию или список, в котором будут организованы данные тестового сеанса.

SessionData.java


package calliopeIntegration.session;


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "name",
    "duration",
    "platform",
    "browser",
    "browser_version",
    "device",
    "status_ind",
    "session_id",
    "build_name",
    "console_logs_url",
    "network_logs_url",
    "command_logs_url",
    "selenium_logs_url",
    "video_url",
    "screenshot_url"
})
public class SessionData {

    @JsonProperty("name")
    private String name;
    @JsonProperty("duration")
    private Integer duration;
    @JsonProperty("platform")
    private String platform;
    @JsonProperty("browser")
    private String browser;
    @JsonProperty("browser_version")
    private String browserVersion;
    @JsonProperty("device")
    private String device;
    @JsonProperty("status_ind")
    private String statusInd;
    @JsonProperty("session_id")
    private String sessionId;
    @JsonProperty("build_name")
    private String buildName;
    @JsonProperty("console_logs_url")
    private String consoleLogsUrl;
    @JsonProperty("network_logs_url")
    private String networkLogsUrl;
    @JsonProperty("command_logs_url")
    private String commandLogsUrl;
    @JsonProperty("selenium_logs_url")
    private String seleniumLogsUrl;
    @JsonProperty("video_url")
    private String videoUrl;
    @JsonProperty("screenshot_url")
    private String screenshotUrl;

    @JsonProperty("name")
    public String getName() {
        return name;
    }

    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("duration")
    public Integer getDuration() {
        return duration;
    }

    @JsonProperty("duration")
    public void setDuration(Integer duration) {
        this.duration = duration;
    }

    @JsonProperty("platform")
    public String getPlatform() {
        return platform;
    }

    @JsonProperty("platform")
    public void setPlatform(String platform) {
        this.platform = platform;
    }

    @JsonProperty("browser")
    public String getBrowser() {
        return browser;
    }

    @JsonProperty("browser")
    public void setBrowser(String browser) {
        this.browser = browser;
    }

    @JsonProperty("browser_version")
    public String getBrowserVersion() {
        return browserVersion;
    }

    @JsonProperty("browser_version")
    public void setBrowserVersion(String browserVersion) {
        this.browserVersion = browserVersion;
    }

    @JsonProperty("device")
    public String getDevice() {
        return device;
    }

    @JsonProperty("device")
    public void setDevice(String device) {
        this.device = device;
    }

    @JsonProperty("status_ind")
    public String getStatusInd() {
        return statusInd;
    }

    @JsonProperty("status_ind")
    public void setStatusInd(String statusInd) {
        this.statusInd = statusInd;
    }

    @JsonProperty("session_id")
    public String getSessionId() {
        return sessionId;
    }

    @JsonProperty("session_id")
    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    @JsonProperty("build_name")
    public String getBuildName() {
        return buildName;
    }

    @JsonProperty("build_name")
    public void setBuildName(String buildName) {
        this.buildName = buildName;
    }

    @JsonProperty("console_logs_url")
    public String getConsoleLogsUrl() {
        return consoleLogsUrl;
    }

    @JsonProperty("console_logs_url")
    public void setConsoleLogsUrl(String consoleLogsUrl) {
        this.consoleLogsUrl = consoleLogsUrl;
    }

    @JsonProperty("network_logs_url")
    public String getNetworkLogsUrl() {
        return networkLogsUrl;
    }

    @JsonProperty("network_logs_url")
    public void setNetworkLogsUrl(String networkLogsUrl) {
        this.networkLogsUrl = networkLogsUrl;
    }

    @JsonProperty("command_logs_url")
    public String getCommandLogsUrl() {
        return commandLogsUrl;
    }

    @JsonProperty("command_logs_url")
    public void setCommandLogsUrl(String commandLogsUrl) {
        this.commandLogsUrl = commandLogsUrl;
    }

    @JsonProperty("selenium_logs_url")
    public String getSeleniumLogsUrl() {
        return seleniumLogsUrl;
    }

    @JsonProperty("selenium_logs_url")
    public void setSeleniumLogsUrl(String seleniumLogsUrl) {
        this.seleniumLogsUrl = seleniumLogsUrl;
    }

    @JsonProperty("video_url")
    public String getVideoUrl() {
        return videoUrl;
    }

    @JsonProperty("video_url")
    public void setVideoUrl(String videoUrl) {
        this.videoUrl = videoUrl;
    }

    @JsonProperty("screenshot_url")
    public String getScreenshotUrl() {
        return screenshotUrl;
    }

    @JsonProperty("screenshot_url")
    public void setScreenshotUrl(String screenshotUrl) {
        this.screenshotUrl = screenshotUrl;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("{\nname=");
        builder.append(name);
        builder.append(",\nduration=");
        builder.append(duration);
        builder.append(",\nplatform=");
        builder.append(platform);
        builder.append(",\nbrowser=");
        builder.append(browser);
        builder.append(",\nbrowserVersion=");
        builder.append(browserVersion);
        builder.append(",\ndevice=");
        builder.append(device);
        builder.append(",\nstatusInd=");
        builder.append(statusInd);
        builder.append(",\nsessionId=");
        builder.append(sessionId);
        builder.append(",\nbuildName=");
        builder.append(buildName);
        builder.append(",\nconsoleLogsUrl=");
        builder.append(consoleLogsUrl);
        builder.append(",\nnetworkLogsUrl=");
        builder.append(networkLogsUrl);
        builder.append(",\ncommandLogsUrl=");
        builder.append(commandLogsUrl);
        builder.append(",\nseleniumLogsUrl=");
        builder.append(seleniumLogsUrl);
        builder.append(",\nvideoUrl=");
        builder.append(videoUrl);
        builder.append(",\nscreenshotUrl=");
        builder.append(screenshotUrl);
        builder.append("\n}");
        return builder.toString();
    }

}

В SessionData.java объявлены только переменные данных сеанса, хотя они определены иерархически, но пока не содержат никаких значений. Теперь мы создали новый класс SessionResponse.java, который будет устанавливать значения для ранее определенных переменных данных сеанса. Класс SessionResponse.java был вызван BaseTest.java класс для установки значений переменных данных сеанса после получения из API сеанса LambdaTest GET.

SessionResponse.java


package calliopeIntegration.session;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class SessionResponse {

    @JsonProperty("data")
    private SessionData sessionData;
    @JsonProperty("message")
    private String message;
    @JsonProperty("status")
    private String status;

    @JsonProperty("data")
    public SessionData getData() {
        return sessionData;
    }

    @JsonProperty("data")
    public void setData(SessionData sessionData) {
        this.sessionData = sessionData;
    }

    @JsonProperty("message")
    public String getMessage() {
        return message;
    }

    @JsonProperty("message")
    public void setMessage(String message) {
        this.message = message;
    }

    @JsonProperty("status")
    public String getStatus() {
        return status;
    }

    @JsonProperty("status")
    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("{\ndata:");
        builder.append(sessionData);
        builder.append(", \nmessage:");
        builder.append(message);
        builder.append(", \nstatus:");
        builder.append(status);
        builder.append("\n}");
        return builder.toString();
    }

}

Теперь, если вы посмотрите на панель инструментов Calliope, вы сможете заметить приведенный ниже снимок экрана, представляющий выполнение вашего тестового скрипта автоматизации в LambdaTest Selenium Grid для автоматизированное кроссбраузерное тестирование.

Панель инструментов Каллиопы

Как это было?

Слава! Вы успешно импортировали результаты автоматизированного тестирования Selenium Grid, предлагаемого LambdaTest, на панель управления Calliope. Теперь вы можете легко сотрудничать со своими товарищами по команде, выполнение кросс-браузерного тестирования с помощью LambdaTest. Дайте мне знать, что вы думаете об этой интеграции и о том, как она помогла ускорить циклы тестирования. Следите за новыми статьями, нажав на колокольчик внизу. Удачи и удачных испытаний! 🙂

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *