Best Testsigma code snippet using com.testsigma.model.UploadVersion
Source:UploadVersionService.java  
...6 */7package com.testsigma.service;8import com.testsigma.config.StorageServiceFactory;9import com.testsigma.dto.BackupDTO;10import com.testsigma.dto.export.UploadVersionXMLDTO;11import com.testsigma.event.EventType;12import com.testsigma.event.UploadEvent;13import com.testsigma.event.UploadVersionEvent;14import com.testsigma.exception.ResourceNotFoundException;15import com.testsigma.exception.TestsigmaException;16import com.testsigma.mapper.UploadMapper;17import com.testsigma.model.*;18import com.testsigma.repository.UploadVersionRepository;19import com.testsigma.specification.SearchCriteria;20import com.testsigma.specification.SearchOperation;21import com.testsigma.specification.UploadVersionSpecificationsBuilder;22import com.testsigma.tasks.ReSignTask;23import lombok.Getter;24import lombok.RequiredArgsConstructor;25import lombok.Setter;26import lombok.extern.log4j.Log4j2;27import org.apache.commons.io.FilenameUtils;28import org.apache.commons.lang3.ObjectUtils;29import org.apache.commons.lang3.StringUtils;30import org.springframework.beans.factory.annotation.Autowired;31import org.springframework.beans.factory.annotation.Value;32import org.springframework.context.ApplicationEventPublisher;33import org.springframework.context.annotation.Lazy;34import org.springframework.data.domain.Page;35import org.springframework.data.domain.PageRequest;36import org.springframework.data.domain.Pageable;37import org.springframework.data.jpa.domain.Specification;38import org.springframework.stereotype.Service;39import org.springframework.web.context.WebApplicationContext;40import org.springframework.web.multipart.MultipartFile;41import java.io.File;42import java.io.IOException;43import java.net.URL;44import java.sql.Timestamp;45import java.util.*;46@Service47@Log4j248@RequiredArgsConstructor(onConstructor = @__({@Autowired, @Lazy}))49public class UploadVersionService extends XMLExportService<UploadVersion> {50  private final WebApplicationContext webApplicationContext;51  private final StorageServiceFactory storageServiceFactory;52  private final ProvisioningProfileUploadService profileUploadService;53  private final ProvisioningProfileDeviceService profileDeviceService;54  private final ApplicationEventPublisher applicationEventPublisher;55  private final WorkspaceVersionService workspaceVersionService;56  private final UploadMapper mapper;57  private final UploadVersionRepository uploadVersionRepository;58  @Getter59  @Setter60  @Value("${server.url}")61  private String serverURL;62  public UploadVersion find(Long id) throws ResourceNotFoundException {63    UploadVersion uploadVersion = this.uploadVersionRepository.findById(id)64      .orElseThrow(() -> new ResourceNotFoundException("Couldn't find upload version with " +65        "id: " + id));66    uploadVersion.setPreSignedURL(this.getPreSignedURL(uploadVersion));67    return uploadVersion;68  }69  public List<UploadVersion> findAllByLastUploadedTimeBeforeAndUploadTypeIn(Timestamp timestamp, Collection<UploadType> uploadType) {70    return this.uploadVersionRepository.findAllByLastUploadedTimeBeforeAndUploadTypeIn(timestamp, uploadType);71  }72  public List<UploadVersion> findValidUploadsByUploadTypesIn(Collection<UploadType> uploadType) {73    return this.uploadVersionRepository.findAllByUploadTypeIn(uploadType);74  }75  public UploadVersion update(UploadVersion uploadVersion) {76    return this.uploadVersionRepository.save(uploadVersion);77  }78  public String getPreSignedURL(UploadVersion uploadVersion) {79    URL newPreSignedURL =80            storageServiceFactory.getStorageService().generatePreSignedURL(81        uploadVersion.getPath(),82                    StorageAccessLevel.READ, 300);83    return newPreSignedURL.toString();84  }85  public void uploadFile(File uploadedFile, UploadVersion uploadVersion) throws TestsigmaException {86    try {87      String originalFileName = ObjectUtils.defaultIfNull(uploadVersion.getFileName(), "tmp")88              .replaceAll("\\s+", "_");89      StringBuilder storageFilePath =90              new StringBuilder().append("/uploads/").append(uploadVersion.getId()).append("/").append(originalFileName);91      uploadToStorage(storageFilePath.toString(), uploadedFile, uploadVersion);92      uploadVersion.setPath(storageFilePath.toString());93      this.uploadVersionRepository.save(uploadVersion);94      resignTheUpload(uploadVersion);95      publishEvent(uploadVersion, EventType.UPDATE);96    } catch (Exception e) {97      log.error(e.getMessage(), e);98      throw new TestsigmaException(e.getMessage(), e);99    }100  }101  private void uploadToStorage(String filePathInStorageService, File fileToUpload, UploadVersion upload) {102    try {103      log.info(String.format("Uploading file:%s to storage path %s", fileToUpload.getAbsolutePath(), filePathInStorageService));104      storageServiceFactory.getStorageService().addFile(filePathInStorageService, fileToUpload);105      upload.setUploadStatus(UploadStatus.Completed);106    } catch (Exception e) {107      log.error(e.getMessage(), e);108      upload.setUploadStatus(UploadStatus.Failed);109    }110  }111  public List<UploadVersion> setSignedFlag(List<UploadVersion> versions, Long deviceId) {112    ProvisioningProfileDevice profileDevice = profileDeviceService.findByAgentDeviceId(deviceId);113    if (profileDevice != null) {114      for (UploadVersion version : versions) {115        if (version.getUploadType() == UploadType.IPA) {116          ProvisioningProfileUpload profileUpload = profileUploadService.findByDeviceIdAndUploadId(deviceId,117            version.getUploadId());118          version.setSigned((profileUpload != null));119        }120      }121    } else {122      log.info("The device is not provisioned. Unless the device is provisioned and upload file is resigned it can't used");123    }124    return versions;125  }126  public UploadVersion create(String versionName, Long uploadId, MultipartFile uploadedMultipartFile, UploadType type, Upload upload) throws TestsigmaException {127    UploadVersion uploadVersion = new UploadVersion();128    uploadVersion.setUploadId(uploadId);129    uploadVersion.setName(versionName);130    uploadVersion.setUploadType(type);131    uploadVersion.setUpload(upload);132    File uploadedFile = copyUploadToTempFile(uploadedMultipartFile);133    uploadVersion.setFileSize(uploadedMultipartFile.getSize());134    uploadVersion.setFileName(ObjectUtils.defaultIfNull(uploadedMultipartFile.getOriginalFilename(), "tmp")135      .replaceAll("\\s+", "_"));136    uploadVersion = this.uploadVersionRepository.save(uploadVersion);137    uploadFile(uploadedFile, uploadVersion);138    this.uploadVersionRepository.save(uploadVersion);139    return uploadVersion;140  }141  private File copyUploadToTempFile(MultipartFile uploadedFile) throws TestsigmaException {142    try {143      String fileName = uploadedFile.getOriginalFilename().replaceAll("\\s+", "_");144      String fileBaseName = FilenameUtils.getBaseName(fileName);145      String extension = FilenameUtils.getExtension(fileName);146      if (StringUtils.isNotBlank(extension)) {147        extension = "." + extension;148      }149      File tempFile = File.createTempFile(fileBaseName + "_", extension);150      log.info("Transferring uploaded multipart file to - " + tempFile.getAbsolutePath());151      uploadedFile.transferTo(tempFile.toPath());152      return tempFile;153    } catch (Exception e) {154      log.error(e.getMessage(), e);155      throw new TestsigmaException(e.getMessage(), e);156    }157  }158  public void resignTheUpload(UploadVersion version) {159    if (version.getUploadType() == UploadType.IPA) {160      ReSignTask reSignTask = new ReSignTask(webApplicationContext, null, version);161      ReSignTaskFactory.getInstance().startTask(reSignTask);162    } else {163      log.info(String.format("Upload Type - [%s]. Skipping iOS app resign upload task...", version.getUploadType()));164    }165  }166  public void publishEvent(UploadVersion version, EventType eventType) {167    UploadVersionEvent<UploadVersion> event = createEvent(version, eventType);168    log.info("Publishing event - " + event.toString());169    applicationEventPublisher.publishEvent(event);170  }171  public UploadVersionEvent<UploadVersion> createEvent(UploadVersion version, EventType eventType) {172    UploadVersionEvent<UploadVersion> event = new UploadVersionEvent<>();173    event.setEventData(version);174    event.setEventType(eventType);175    return event;176  }177  public void export(BackupDTO backupDTO) throws IOException, ResourceNotFoundException {178    if (!backupDTO.getIsUploadsEnabled()) return;179    log.debug("backup process for upload initiated");180    writeXML("uploads", backupDTO, PageRequest.of(0, 25));181    log.debug("backup process for upload completed");182  }183  public Specification<UploadVersion> getExportXmlSpecification(BackupDTO backupDTO) throws ResourceNotFoundException {184    WorkspaceVersion applicationVersion = workspaceVersionService.find(backupDTO.getWorkspaceVersionId());185    SearchCriteria criteria = new SearchCriteria("workspaceId", SearchOperation.EQUALITY, applicationVersion.getWorkspaceId());186    List<SearchCriteria> params = new ArrayList<>();187    params.add(criteria);188    UploadVersionSpecificationsBuilder uploadSpecificationsBuilder = new UploadVersionSpecificationsBuilder();189    uploadSpecificationsBuilder.params = params;190    return uploadSpecificationsBuilder.build();191  }192  @Override193  public Page<UploadVersion> findAll(Specification<UploadVersion> specification, Pageable pageRequest) {194    return this.uploadVersionRepository.findAll(specification, pageRequest);195  }196  @Override197  protected List<UploadVersionXMLDTO> mapToXMLDTOList(List<UploadVersion> list) {198    return mapper.mapUploads(list, this, null);199  }200  @Override201  protected List<UploadVersionXMLDTO> mapToXMLDTOList(List<UploadVersion> list, BackupDTO backupDTO) {202    return mapper.mapUploads(list, this, backupDTO.getSrcFiles());203  }204  public void delete(UploadVersion version) {205    this.uploadVersionRepository.delete(version);206  }207}...Source:UploadMapper.java  
...7 *8 */9package com.testsigma.mapper;10import com.testsigma.dto.BackupDTO;11import com.testsigma.dto.UploadVersionDTO;12import com.testsigma.dto.api.APIUploadDTO;13import com.testsigma.dto.UploadDTO;14import com.testsigma.dto.export.UploadVersionXMLDTO;15import com.testsigma.dto.export.UploadXMLDTO;16import com.testsigma.model.Upload;17import com.testsigma.model.UploadVersion;18import com.testsigma.service.UploadService;19import com.testsigma.service.UploadVersionService;20import com.testsigma.web.request.UploadRequest;21import org.apache.commons.io.FileUtils;22import org.mapstruct.*;23import java.io.File;24import java.net.URL;25import java.util.ArrayList;26import java.util.List;27@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)28public interface UploadMapper {29    UploadXMLDTO mapTo(Upload upload);30    Upload copy(Upload upload);31    UploadVersion copyVersion(UploadVersion upload);32    UploadVersionXMLDTO mapVersionTo(UploadVersion version);33    List<UploadXMLDTO> mapUploads(List<Upload> uploads);34    UploadDTO map(Upload upload);35    List<UploadDTO> map(List<Upload> uploads);36    Upload map(UploadRequest uploadRequest);37    void merge(UploadRequest uploadRequest, @MappingTarget Upload upload);38    Upload mapTo(UploadXMLDTO upload);39    default List<Upload> mapUploadsList(List<UploadXMLDTO> uploads, UploadService uploadService, BackupDTO importDTO) {40        List<Upload> list = new ArrayList<>();41        try {42            for (UploadXMLDTO uploadXMLDTO : uploads) {43                try {44                    Upload upload = mapTo(uploadXMLDTO);45                    list.add(upload);46                } catch (Exception e) {47                    e.printStackTrace();48                }49            }50        } catch (Exception e) {51            e.printStackTrace();52        }53        return list;54    }55    default List<UploadVersionXMLDTO> mapUploads(List<UploadVersion> versions, UploadVersionService versionService, File srcFiles) {56        List<UploadVersionXMLDTO> list = new ArrayList<>();57        try {58            String uploadFolderName = "upload";59            File uploadFolder = new File(srcFiles.getAbsolutePath() + File.separator + uploadFolderName);60            if (!uploadFolder.exists()) {61                uploadFolder.mkdir();62            }63            for (UploadVersion version : versions) {64                try {65                    UploadVersionXMLDTO xmldto = mapVersionTo(version);66                    FileUtils.copyURLToFile(new URL(versionService.getPreSignedURL(version)), new File(uploadFolder.getAbsolutePath() + File.separator + version.getFileName()));67                    xmldto.setDownloadURL(versionService.getPreSignedURL(version));68                    list.add(xmldto);69                } catch (Exception e) {70                    e.printStackTrace();71                }72            }73        } catch (Exception e) {74            e.printStackTrace();75        }76        return list;77    }78    APIUploadDTO mapApi(Upload upload);79    List<APIUploadDTO> mapApis(List<Upload> uploads);80    List<UploadVersionDTO> mapVersions(List<UploadVersion> versions);81    UploadVersionDTO mapVersion(UploadVersion version);82}...Source:ReSignTask.java  
1package com.testsigma.tasks;2import com.testsigma.model.ProvisioningProfile;3import com.testsigma.model.Upload;4import com.testsigma.model.UploadType;5import com.testsigma.model.UploadVersion;6import com.testsigma.service.*;7import lombok.Data;8import lombok.extern.log4j.Log4j2;9import org.springframework.web.context.WebApplicationContext;10import java.util.List;11@Log4j212@Data13public class ReSignTask implements Runnable {14  private final WebApplicationContext webApplicationContext;15  private final ProvisioningProfileUploadService profileUploadService;16  private final ProvisioningProfileService provisioningProfileService;17  private final ResignService resignService;18  private final ProvisioningProfile profile;19  private final UploadVersionService uploadVersionService;20  private final UploadVersion uploadVersion;21  public ReSignTask(WebApplicationContext webApplicationContext,22                    ProvisioningProfile profile, UploadVersion uploadVersion) {23    super();24    this.webApplicationContext = webApplicationContext;25    this.profile = profile;26    this.uploadVersion = uploadVersion;27    this.profileUploadService = webApplicationContext.getBean(ProvisioningProfileUploadService.class);28    this.resignService = webApplicationContext.getBean(ResignService.class);29    this.uploadVersionService = webApplicationContext.getBean(UploadVersionService.class);30    this.provisioningProfileService = webApplicationContext.getBean(ProvisioningProfileService.class);31  }32  public void run() {33    if (uploadVersion != null) {34      resignUploadForAllProfiles();35    } else {36      resignAllUploads();37    }38  }39  private void resignAllUploads() {40    try {41      log.info(String.format("Resign Upload Task Started For Provision Profile [%s] - [%s] ", profile.getId(),42        profile.getName()));43      resignService.reSignWda(profile);...UploadVersion
Using AI Code Generation
1import com.testsigma.model.UploadVersion;2import com.testsigma.model.UploadVersionRequest;3import com.testsigma.model.UploadVersionResponse;4import com.testsigma.model.UploadVersionResponseData;5import java.io.File;6import java.io.FileInputStream;7import java.io.IOException;8import java.io.InputStream;9import java.util.List;10import java.util.Properties;11import java.util.UUID;12import com.testsigma.model.UploadVersionRequestData;13import com.testsigma.model.UploadVersionRequestDataFile;14import com.testsigma.model.UploadVersionRequestDataFileDetails;15import com.testsigma.model.UploadVersionRequestDataFileDetailsFile;16import com.testsigma.model.UploadVersionRequestDataFileDetailsFileData;17import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataData;18import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataDataData;19import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataDataDataData;20import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataDataDataDataData;21import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataDataDataDataDataData;22import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataDataDataDataDataDataData;23import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataDataDataDataDataDataDataData;24import com.testsigma.model.UploadVersionRequestDataFileDetailsFileDataDataDataDataDataDataDataDataData;25import com.testsigma.model.UploadVersionRequestDataFiUploadVersion
Using AI Code Generation
1import com.testsigma.model.UploadVersion;2public class 2 {3  public static void main(String[] args) {4    UploadVersion uploadVersion = new UploadVersion();5    uploadVersion.setVersionId("1");6    uploadVersion.setVersionName("TestVersion");7    uploadVersion.setVersionDescription("TestDescription");8    uploadVersion.setVersionFile("TestFile");9    uploadVersion.setVersionStatus("TestStatus");10    uploadVersion.setVersionType("TestType");11    uploadVersion.setVersionCreatedBy("TestCreatedBy");12    uploadVersion.setVersionCreatedDate("TestCreatedDate");13    uploadVersion.setVersionLastUpdatedBy("TestLastUpdatedBy");14    uploadVersion.setVersionLastUpdatedDate("TestLastUpdatedDate");15    uploadVersion.setVersionDeletedBy("TestDeletedBy");16    uploadVersion.setVersionDeletedDate("TestDeletedDate");17    uploadVersion.setVersionDeleted("TestDeleted");18  }19}20import com.testsigma.model.TestSuite;21public class 3 {22  public static void main(String[] args) {23    TestSuite testSuite = new TestSuite();24    testSuite.setSuiteId("1");25    testSuite.setSuiteName("TestSuite");26    testSuite.setSuiteDescription("TestDescription");27    testSuite.setSuiteStatus("TestStatus");28    testSuite.setSuiteCreatedBy("TestCreatedBy");29    testSuite.setSuiteCreatedDate("TestCreatedDate");30    testSuite.setSuiteLastUpdatedBy("TestLastUpdatedBy");31    testSuite.setSuiteLastUpdatedDate("TestLastUpdatedDate");32    testSuite.setSuiteDeletedBy("TestDeletedBy");33    testSuite.setSuiteDeletedDate("TestDeletedDate");34    testSuite.setSuiteDeleted("TestDeleted");35  }36}37import com.testsigma.model.TestSuiteVersion;38public class 4 {39  public static void main(String[] args) {40    TestSuiteVersion testSuiteVersion = new TestSuiteVersion();41    testSuiteVersion.setSuiteVersionId("1");42    testSuiteVersion.setSuiteVersionName("TestSuiteVersion");43    testSuiteVersion.setSuiteVersionDescription("TestDescription");44    testSuiteVersion.setSuiteVersionFile("TestFile");45    testSuiteVersion.setSuiteVersionStatus("TestStatus");46    testSuiteVersion.setSuiteVersionType("TestType");UploadVersion
Using AI Code Generation
1import com.testsigma.model.UploadVersion;2import com.testsigma.model.UploadVersionResponse;3import com.testsigma.model.UploadVersionResponseData;4import com.testsigma.model.UploadVersionResponseDataResult;5import com.testsigma.model.UploadVersionResponseDataResultVersion;6import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResource;7import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResource;8import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResource;9import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResourceResource;10import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResourceResourceResource;11import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResourceResourceResourceResource;12import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResourceResourceResourceResourceResource;13import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResourceResourceResourceResourceResourceResource;14import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResourceResourceResourceResourceResourceResourceResource;15import com.testsigma.model.UploadVersionResponseDataResultVersionVersionResourceResourceResourceResUploadVersion
Using AI Code Generation
1package com.testsigma.model;2import java.io.File;3import java.util.List;4import java.util.ArrayList;5import com.testsigma.model.UploadVersion;6import com.testsigma.model.UploadVersionResponse;7import com.testsigma.model.ErrorResponse;8import com.testsigma.model.ApiException;9import com.testsigma.model.Configuration;10import com.testsigma.model.Pair;11public class UploadVersionExample {12public static void main(String[] args) {13try {14UploadVersion apiInstance = new UploadVersion();15try {16UploadVersionResponse result = apiInstance.uploadVersion(versionId, file);17System.out.println(result);18} catch (ApiException e) {19System.err.println("Exception when calling UploadVersion#uploadVersion");20System.err.println("Status code: " + e.getCode());21System.err.println("Reason: " + e.getResponseBody());22System.err.println("Response headers: " + e.getResponseHeaders());23System.err.println("Response body: " + e.getResponseBody());24}25} catch (Exception e) {26e.printStackTrace();27}28}29}UploadVersion
Using AI Code Generation
1import com.testsigma.model.UploadVersion;2import java.util.*;3public class 2 {4public static void main(String[] args) {5UploadVersion uploadversion = new UploadVersion();6uploadversion.setVersionId(“versionId”);7uploadversion.setVersionName(“versionName”);8uploadversion.setVersionDescription(“versionDescription”);9uploadversion.setVersionStatus(“versionStatus”);10uploadversion.setVersionType(“versionType”);11uploadversion.setVersionReleaseDate(“versionReleaseDate”);12uploadversion.setVersionReleaseNotes(“versionReleaseNotes”);13uploadversion.setVersionReleaseOwner(“versionReleaseOwner”);14uploadversion.setVersionReleaseOwnerEmail(“versionReleaseOwnerEmail”);15uploadversion.setVersionReleaseOwnerPhone(“versionReleaseOwnerPhone”);16uploadversion.setVersionReleaseOwnerDepartment(“versionReleaseOwnerDepartment”);17uploadversion.setVersionReleaseOwnerCompany(“versionReleaseOwnerCompany”);18uploadversion.setVersionReleaseOwnerLocation(“versionReleaseOwnerLocation”);19uploadversion.setVersionReleaseOwnerManager(“versionReleaseOwnerManager”);20uploadversion.setVersionReleaseOwnerManagerEmail(“versionReleaseOwnerManagerEmail”);21uploadversion.setVersionReleaseOwnerManagerPhone(“versionReleaseOwnerManagerPhone”);22uploadversion.setVersionReleaseOwnerManagerDepartment(“versionReleaseOwnerManagerDepartment”);23uploadversion.setVersionReleaseOwnerManagerCompany(“versionReleaseOwnerManagerCompany”);24uploadversion.setVersionReleaseOwnerManagerLocation(“versionReleaseOwnerManagerLocation”);25uploadversion.setVersionReleaseOwnerManagerTitle(“versionReleaseOwnerManagerTitle”);26uploadversion.setVersionReleaseOwnerTitle(“versionReleaseOwnerTitle”);27uploadversion.setVersionReleaseOwnerJobFunction(“versionReleaseOwnerJobFunction”);28uploadversion.setVersionReleaseOwnerManagerJobFunction(“versionReleaseOwnerManagerJobFunction”);29uploadversion.setVersionReleaseOwnerManagerNotes(“versionReleaseOwnerManagerNotes”);30uploadversion.setVersionReleaseOwnerNotes(“versionReleaseOwnerNotes”);31uploadversion.setVersionReleaseOwnerManagerAddress(“versionReleaseOwnerManagerAddress”);32uploadversion.setVersionReleaseOwnerAddress(“versionReleaseOwnerAddress”);33uploadversion.setVersionReleaseOwnerManagerCity(“versionReleaseOwnerManagerCity”);34uploadversion.setVersionReleaseOwnerCity(“versionReleaseOwnerCity”);35uploadversion.setVersionReleaseOwnerManagerState(“Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
