Best Vstest code snippet using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.MessageConverter
TestRequestSender.cs
Source:TestRequestSender.cs  
...440                    break;441                case MessageType.AttachDebugger:442                    var testProcessAttachDebuggerPayload = _dataSerializer.DeserializePayload<TestProcessAttachDebuggerPayload>(message);443                    TPDebug.Assert(testProcessAttachDebuggerPayload is not null, "testProcessAttachDebuggerPayload is null");444                    AttachDebuggerInfo attachDebugerInfo = MessageConverter.ConvertToAttachDebuggerInfo(testProcessAttachDebuggerPayload, message, _protocolVersion);445                    bool result = testRunEventsHandler.AttachDebuggerToProcess(attachDebugerInfo);446                    var resultMessage = _dataSerializer.SerializePayload(447                        MessageType.AttachDebuggerCallback,448                        result,449                        _protocolVersion);450                    EqtTrace.Verbose("TestRequestSender.OnExecutionMessageReceived: Sending AttachDebugger with message: {0}", message);451                    _channel.Send(resultMessage);452                    break;453            }454        }455        catch (Exception exception)456        {457            // If we failed to process the incoming message, initiate client (testhost) abort, because we can't recover, and don't wait458            // for it to exit and write into error stream, because it did not do anything wrong, so no error is coming there459            OnTestRunAbort(testRunEventsHandler, exception, getClientError: false);460        }461    }462    private void OnDiscoveryMessageReceived(ITestDiscoveryEventsHandler2 discoveryEventsHandler, MessageReceivedEventArgs args)463    {464        try465        {466            var rawMessage = args.Data;467            TPDebug.Assert(rawMessage is not null, "rawMessage is null");468            // Currently each of the operations are not separate tasks since they should not each take much time. This is just a notification.469            EqtTrace.Verbose("TestRequestSender.OnDiscoveryMessageReceived: Received message: {0}", rawMessage);470            // Send raw message first to unblock handlers waiting to send message to IDEs471            discoveryEventsHandler.HandleRawMessage(rawMessage);472            var data = _dataSerializer.DeserializeMessage(rawMessage);473            if (data is null)474            {475                EqtTrace.Error("TestRequestSender.OnDiscoveryMessageReceived: Deserialized message is null: {0}", rawMessage);476                OnDiscoveryAbort(discoveryEventsHandler, null, false);477                return;478            }479            switch (data.MessageType)480            {481                case MessageType.TestCasesFound:482                    var testCases = _dataSerializer.DeserializePayload<IEnumerable<TestCase>>(data);483                    discoveryEventsHandler.HandleDiscoveredTests(testCases);484                    break;485                case MessageType.DiscoveryComplete:486                    var payload = _dataSerializer.DeserializePayload<DiscoveryCompletePayload>(data);487                    TPDebug.Assert(payload is not null, "payload is null");488                    var discoveryCompleteEventArgs = new DiscoveryCompleteEventArgs489                    {490                        TotalCount = payload.TotalTests,491                        IsAborted = payload.IsAborted,492                        FullyDiscoveredSources = payload.FullyDiscoveredSources,493                        PartiallyDiscoveredSources = payload.PartiallyDiscoveredSources,494                        NotDiscoveredSources = payload.NotDiscoveredSources,495                        DiscoveredExtensions = payload.DiscoveredExtensions,496                        SkippedDiscoveredSources = payload.SkippedDiscoverySources,497                    };498                    discoveryCompleteEventArgs.Metrics = payload.Metrics;499                    discoveryEventsHandler.HandleDiscoveryComplete(500                        discoveryCompleteEventArgs,501                        payload.LastDiscoveredTests);502                    SetOperationComplete();503                    break;504                case MessageType.TestMessage:505                    var testMessagePayload = _dataSerializer.DeserializePayload<TestMessagePayload>(506                        data);507                    TPDebug.Assert(testMessagePayload is not null, "testMessagePayload is null");508                    discoveryEventsHandler.HandleLogMessage(509                        testMessagePayload.MessageLevel,510                        testMessagePayload.Message);511                    break;512            }513        }514        catch (Exception ex)515        {516            OnDiscoveryAbort(discoveryEventsHandler, ex, false);517        }518    }519    private void OnTestRunAbort(IInternalTestRunEventsHandler testRunEventsHandler, Exception? exception, bool getClientError)520    {521        if (IsOperationComplete())522        {523            EqtTrace.Verbose("TestRequestSender: OnTestRunAbort: Operation is already complete. Skip error message.");524            return;525        }526        EqtTrace.Verbose("TestRequestSender: OnTestRunAbort: Set operation complete.");527        SetOperationComplete();528        var reason = GetAbortErrorMessage(exception, getClientError);529        EqtTrace.Error("TestRequestSender: Aborting test run because {0}", reason);530        LogErrorMessage(string.Format(CultureInfo.CurrentCulture, CommonResources.AbortedTestRun, reason));531        // notify test run abort to vstest console wrapper.532        var completeArgs = new TestRunCompleteEventArgs(null, false, true, exception, null, null, TimeSpan.Zero);533        var payload = new TestRunCompletePayload { TestRunCompleteArgs = completeArgs };534        var rawMessage = _dataSerializer.SerializePayload(MessageType.ExecutionComplete, payload);535        testRunEventsHandler.HandleRawMessage(rawMessage);536        // notify of a test run complete and bail out.537        testRunEventsHandler.HandleTestRunComplete(completeArgs, null, null, null);538    }539    private void OnDiscoveryAbort(ITestDiscoveryEventsHandler2 eventHandler, Exception? exception, bool getClientError)540    {541        if (IsOperationComplete())542        {543            EqtTrace.Verbose("TestRequestSender.OnDiscoveryAbort: Operation is already complete. Skip error message.");544            return;545        }546        EqtTrace.Verbose("TestRequestSender.OnDiscoveryAbort: Set operation complete.");547        SetOperationComplete();548        var discoveryCompleteEventArgs = new DiscoveryCompleteEventArgs(-1, true);549        if (GetAbortErrorMessage(exception, getClientError) is string reason)550        {551            EqtTrace.Error("TestRequestSender.OnDiscoveryAbort: Aborting test discovery because {0}.", reason);552            LogErrorMessage(string.Format(CultureInfo.CurrentCulture, CommonResources.AbortedTestDiscoveryWithReason, reason));553        }554        else555        {556            EqtTrace.Error("TestRequestSender.OnDiscoveryAbort: Aborting test discovery.");557            LogErrorMessage(CommonResources.AbortedTestDiscovery);558        }559        // Notify discovery abort to IDE test output560        var payload = new DiscoveryCompletePayload()561        {562            IsAborted = true,563            LastDiscoveredTests = null,564            TotalTests = -1565        };566        var rawMessage = _dataSerializer.SerializePayload(MessageType.DiscoveryComplete, payload);567        eventHandler.HandleRawMessage(rawMessage);568        // Complete discovery569        eventHandler.HandleDiscoveryComplete(discoveryCompleteEventArgs, null);570    }571    private string? GetAbortErrorMessage(Exception? exception, bool getClientError)572    {573        EqtTrace.Verbose("TestRequestSender.GetAbortErrorMessage: Exception: " + exception);574        // It is also possible for an operation to abort even if client has not575        // disconnected, because we initiate client abort when there is error in processing incoming messages.576        // in this case, we will use the exception as the failure result, if it is present. Otherwise we will577        // try to wait for the client process to exit, and capture it's error output (we are listening to it's standard and578        // error output in the ClientExited callback).579        if (!getClientError)580        {581            return exception?.Message;582        }583        EqtTrace.Verbose("TestRequestSender.GetAbortErrorMessage: Client has disconnected. Wait for standard error.");584        // Wait for test host to exit for a moment585        // TODO: this timeout is 10 seconds, make it also configurable like the other famous timeout that is 100ms586        if (_clientExited.Wait(_clientExitedWaitTime))587        {588            // Set a default message of test host process exited and additionally specify the error if we were able to get it589            // from error output of the process590            EqtTrace.Info("TestRequestSender.GetAbortErrorMessage: Received test host error message.");591            var reason = CommonResources.TestHostProcessCrashed;592            if (!string.IsNullOrWhiteSpace(_clientExitErrorMessage))593            {594                reason = $"{reason} : {_clientExitErrorMessage}";595            }596            return reason;597        }598        else599        {600            EqtTrace.Info("TestRequestSender.GetAbortErrorMessage: Timed out waiting for test host error message.");601            return CommonResources.UnableToCommunicateToTestHost;602        }603    }604    private void LogErrorMessage(string message)605    {606        if (_messageEventHandler == null)607        {608            EqtTrace.Error("TestRequestSender.LogErrorMessage: Message event handler not set. Error: " + message);609            return;610        }611        // Log to vstest console612        _messageEventHandler.HandleLogMessage(TestMessageLevel.Error, message);613        // Log to vs ide test output614        var testMessagePayload = new TestMessagePayload { MessageLevel = TestMessageLevel.Error, Message = message };615        var rawMessage = _dataSerializer.SerializePayload(MessageType.TestMessage, testMessagePayload);616        _messageEventHandler.HandleRawMessage(rawMessage);617    }618    private bool IsOperationComplete()619    {620        return _operationCompleted == 1;621    }622    private void SetOperationComplete()623    {624        // When sharing the testhost between discovery and execution we must keep the625        // testhost alive after completing the operation it was spawned for. As such we626        // suppress the test request sender channel close taking place here. This channel627        // will be closed when the test session owner decides to dispose of the test session628        // object.629        if (!CloseConnectionOnOperationComplete)630        {631            return;632        }633        // Complete the currently ongoing operation (Discovery/Execution)634        EqtTrace.Verbose("TestRequestSender.SetOperationComplete: Setting operation complete.");635        _communicationEndpoint.Stop();636        Interlocked.CompareExchange(ref _operationCompleted, 1, 0);637    }638    private static ICommunicationEndPoint SetCommunicationEndPoint(TestHostConnectionInfo testhostConnectionInfo)639    {640        // TODO: Use factory to get the communication endpoint. It will abstract out the type of communication endpoint like socket, shared memory or named pipe etc.,641        // The connectionInfo here is what is provided to testhost, but we are in runner, and so the role needs642        // to be reversed. If testhost starts as client, then runner must be host, and in reverse.643        if (testhostConnectionInfo.Role != ConnectionRole.Client)644        {645            EqtTrace.Verbose("TestRequestSender is acting as client.");646            return new SocketClient();647        }648        else649        {650            EqtTrace.Verbose("TestRequestSender is acting as server.");651            return new SocketServer();652        }653    }654}655internal class MessageConverter656{657#pragma warning disable IDE0060 // Remove unused parameter // TODO: Use or remove this parameter and the associated method658    internal static AttachDebuggerInfo ConvertToAttachDebuggerInfo(TestProcessAttachDebuggerPayload attachDebuggerPayload, Message message, int protocolVersion)659#pragma warning restore IDE0060 // Remove unused parameter660    {661        // There is nothing to do differently based on those versions.662        //var sourceVersion = GetVersion(message);663        //var targetVersion = protocolVersion;664        return new AttachDebuggerInfo665        {666            ProcessId = attachDebuggerPayload.ProcessID,667            TargetFramework = attachDebuggerPayload?.TargetFramework,668        };669    }...MessageConverter
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;2using Microsoft.VisualStudio.TestPlatform.ObjectModel;3using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;4using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;5using System;6using System.Collections.Generic;7using System.Linq;8using System.Text;9using System.Threading.Tasks;10{11    {12        public static void Main(string[] args)13        {14            var messageConverter = new MessageConverter();15            var message = new TestRunMessage("Test Run Message");16            var messagePayload = messageConverter.Serialize(message);17            var deserializedMessage = messageConverter.Deserialize(messagePayload);18            Console.WriteLine(deserializedMessage.Message);19        }20    }21}MessageConverter
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8    {9        static void Main(string[] args)10        {11            var message = MessageConverter.SerializePayload(MessageType.VersionCheck, new VersionCheckPayload { Version = "test" });12            var message2 = MessageConverter.DeserializeMessage(message);13            Console.WriteLine(message2.MessageType);14            Console.WriteLine(message2.Payload);15            Console.ReadLine();16        }17    }18}MessageConverter
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;7using Microsoft.VisualStudio.TestPlatform.ObjectModel;8using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;9{10    {11        static void Main(string[] args)12        {13            TestRunMessage testRunMessage = new TestRunMessage()14            {15            };16            var message = MessageConverter.Serialize(testRunMessage);17            var testRunMessage2 = MessageConverter.Deserialize<TestRunMessage>(message);18            Console.WriteLine("Test run message: " + testRunMessage2.Message);19            Console.ReadLine();20        }21    }22}MessageConverter
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;2using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Serialization;3using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.ObjectModel;4using System;5using System.Collections.Generic;6using System.Linq;7using System.Text;8using System.Threading.Tasks;9{10    {11        static void Main(string[] args)12        {13            var message = new TestRunMessage();14            var messageConverter = new MessageConverter();15            var bytes = messageConverter.Serialize(message);16            var deserializedMessage = messageConverter.Deserialize(bytes);17        }18    }19}20using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;21using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Serialization;22using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.ObjectModel;23using System;24using System.Collections.Generic;25using System.Linq;26using System.Text;27using System.Threading.Tasks;28{29    {30        static void Main(string[] args)31        {32            var message = new TestRunMessage();33            var messageConverter = new MessageConverter();34            var bytes = messageConverter.Serialize(message);35            var deserializedMessage = messageConverter.Deserialize(bytes);36        }37    }38}39using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;40using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Serialization;41using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.ObjectModel;42using System;43using System.Collections.Generic;44using System.Linq;45using System.Text;46using System.Threading.Tasks;47{48    {49        static void Main(string[] args)50        {51            var message = new TestRunMessage();52            var messageConverter = new MessageConverter();53            var bytes = messageConverter.Serialize(message);54            var deserializedMessage = messageConverter.Deserialize(bytes);55        }56    }57}58using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;59using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Serialization;60using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.ObjectModel;61using System;62using System.Collections.Generic;63using System.Linq;64using System.Text;65using System.Threading.Tasks;66{67    {68        static void Main(string[] args)69        {70            var message = new TestRunMessage();MessageConverter
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;2using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Interfaces;3using Microsoft.VisualStudio.TestPlatform.ObjectModel;4using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;5using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;6using System;7using System.Collections.Generic;8using System.Diagnostics;9using System.Linq;10using System.Text;11using System.Threading.Tasks;12{13    {14        static void Main(string[] args)15        {16            var testPlatform = TestPlatformFactory.GetTestPlatform();17            var testHostLauncher = testPlatform.GetTestHostManager();18            var testRunRequest = testPlatform.CreateTestRunRequest();19            var testRunCriteria = new TestRunCriteria(neMessageConverter
Using AI Code Generation
1public void TestMethod1()2{3    var message = new TestMessage();4    var converter = new MessageConverter();5    var json = converter.Serialize(message);6    var deserialized = converter.Deserialize<TestMessage>(json);7    Assert.AreEqual(message, deserialized);8}9{10    public string Text { get; set; }11}12public void TestMethod2()13{14    var message = new TestMessage();15    var converter = new MessageConverter();16    var json = converter.Serialize(message);17    var deserialized = converter.Deserialize<TestMessage>(json);18    Assert.AreEqual(message, deserialized);19}20{21    public string Serialize(object message)22    {23        return JsonConvert.SerializeObject(message);24    }25    public T Deserialize<T>(string json)26    {27        return JsonConvert.DeserializeObject<T>(json);28    }29}30public void TestMethod1()31{MessageConverter
Using AI Code Generation
1var messageConverter = new MessageConverter();2var json = Encoding.UTF8.GetString(msg);3var messageConverter = new MessageConverter();4var json = Encoding.UTF8.GetString(msg);5var messageConverter = new MessageConverter();6var msg = messageConverter.SerializePayload(MessageType.TestMessage, new TestMessagePayload { MessageType = TestMessagePayload.MessageType.TestResult, TestResult = new TestResult { DisplayName = "test1", Duration = new TimeSpan(0, 0, 0, 0, 123), ComputerName = "localhost", Outcome = TestOutcome.Passed, ErrorMessage = null, ErrorStackTrace = null, TestRunIdMessageConverter
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;7using Microsoft.VisualStudio.TestPlatform.ObjectModel;8using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;9using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;10using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities;11using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers;12using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers.Interfaces;13{14    {15        public void Initialize(TestLoggerEvents events, string testResultsDir)16        {17            events.TestRunMessage += Events_TestRunMessage;18            events.TestResult += Events_TestResult;19        }20        private void Events_TestResult(object sender, TestResultEventArgs e)21        {22            var messageConverter = new MessageConverter();23            var json = messageConverter.GetJsonString(e.Result);24            Console.WriteLine(json);25        }26        private void Events_TestRunMessage(object sender, TestRunMessageEventArgs e)27        {28            Console.WriteLine(e.Message);29        }30    }31}32using System;33using System.Collections.Generic;34using System.Linq;35using System.Text;36using System.Threading.Tasks;37using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;38using Microsoft.VisualStudio.TestPlatform.ObjectModel;39using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;40using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;41using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities;42using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers;43using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers.Interfaces;44{45    {46        public void Initialize(TestLoggerEvents events, string testResultsDir)47        {48            events.TestRunMessage += Events_TestRunMessage;49            events.TestResult += Events_TestResult;50        }51        private void Events_TestResult(object sender, TestResultEventArgs e)52        {53            var messageConverter = new MessageConverter();54            var json = messageConverter.GetJsonString(e.Result);55            Console.WriteLine(json);56        }57        private void Events_TestRunMessage(object sender, TestRunMessageEventArgs e)58        {59            Console.WriteLine(e.Message);60        }61    }62}63using System;64            var testRunRequest = testPlatform.CreateTestRunRequest();65            var testRunCriteria = new TestRunCriteria(neMessageConverter
Using AI Code Generation
1public void TestMethod1()2{3    var message = new TestMessage();4    var converter = new MessageConverter();5    var json = converter.Serialize(message);6    var deserialized = converter.Deserialize<TestMessage>(json);7    Assert.AreEqual(message, deserialized);8}9{10    public string Text { get; set; }11}12public void TestMethod2()13{14    var message = new TestMessage();15    var converter = new MessageConverter();16    var json = converter.Serialize(message);17    var deserialized = converter.Deserialize<TestMessage>(json);18    Assert.AreEqual(message, deserialized);19}20{21    public string Serialize(object message)22    {23        return JsonConvert.SerializeObject(message);24    }25    public T Deserialize<T>(string json)26    {27        return JsonConvert.DeserializeObject<T>(json);28    }29}30public void TestMethod1()31{MessageConverter
Using AI Code Generation
1var messageConverter = new MessageConverter();2var json = Encoding.UTF8.GetString(msg);3var messageConverter = new MessageConverter();4var json = Encoding.UTF8.GetString(msg);5var messageConverter = new MessageConverter();6var msg = messageConverter.SerializePayload(MessageType.TestMessage, new TestMessagePayload { MessageType = TestMessagePayload.MessageType.TestResult, TestResult = new TestResult { DisplayName = "test1", Duration = new TimeSpan(0, 0, 0, 0, 123), ComputerName = "localhost", Outcome = TestOutcome.Passed, ErrorMessage = null, ErrorStackTrace = null, TestRunIdMessageConverter
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;7using Microsoft.VisualStudio.TestPlatform.ObjectModel;8using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;9using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;10using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities;11using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers;12using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers.Interfaces;13{14    {15        public void Initialize(TestLoggerEvents events, string testResultsDir)16        {17            events.TestRunMessage += Events_TestRunMessage;18            events.TestResult += Events_TestResult;19        }20        private void Events_TestResult(object sender, TestResultEventArgs e)21        {22            var messageConverter = new MessageConverter();23            var json = messageConverter.GetJsonString(e.Result);24            Console.WriteLine(json);25        }26        private void Events_TestRunMessage(object sender, TestRunMessageEventArgs e)27        {28            Console.WriteLine(e.Message);29        }30    }31}32using System;33using System.Collections.Generic;34using System.Linq;35using System.Text;36using System.Threading.Tasks;37using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;38using Microsoft.VisualStudio.TestPlatform.ObjectModel;39using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;40using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;41using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities;42using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers;43using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers.Interfaces;44{45    {46        public void Initialize(TestLoggerEvents events, string testResultsDir)47        {48            events.TestRunMessage += Events_TestRunMessage;49            events.TestResult += Events_TestResult;50        }51        private void Events_TestResult(object sender, TestResultEventArgs e)52        {53            var messageConverter = new MessageConverter();54            var json = messageConverter.GetJsonString(e.Result);55            Console.WriteLine(json);56        }57        private void Events_TestRunMessage(object sender, TestRunMessageEventArgs e)58        {59            Console.WriteLine(e.Message);60        }61    }62}63using System;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!!
