How to use __construct method of TestSuite class

Best Phpunit code snippet using TestSuite.__construct

xarUnitTest.php

Source:xarUnitTest.php Github

copy

Full Screen

...30 public $testcases = []; // array which holds all testcases31 /**32 * Constructor just sets the name attribute33 */34 public function __construct($name='Default')35 {36 $this->name=$name;37 }38 /**39 * Add a testcase object to the testsuite40 */41 public function AddTestCase($testClass, $name='')42 {43 // Make sure the class exist44 if (class_exists($testClass) && (get_parent_class($testClass) == 'xarTestCase')) {45 if ($name=='') {46 $name=$testClass;47 }48 // Base dir is one dir up from the testsdir49 $basedir = $this->_parentdir(getcwd());50 // Add a new testCase object into the array.51 $this->testcases[$name]=new xarTestCase($testClass, $name, true, $basedir);52 }53 }54 /**55 * Count the number of testcases in this suite56 */57 public function CountTestCases()58 {59 return count($this->testcases);60 }61 /**62 * Run the testcases63 */64 public function run()65 {66 foreach ($this->testcases as $testcase) {67 $testcase->runTests();68 }69 }70 public function _parentdir($dir)71 {72 // FIXME :Get the parent dir of the dir inserted, dirty hack73 chdir('..');74 $toreturn=getcwd();75 chdir($dir);76 return $toreturn;77 }78 public function report($type, $show_results=true)79 {80 $report = new xarTestReport($type);81 $report->instance->present([$this], $show_results);82 }83}84/**85 * Base class for reporters86 *87 */88class xarTestReport89{90 public $instance;91 /**92 * Abstract presentation function, this should be implemented in93 * the subclasses94 *95 */96 public function present(array $testsuites=[], $show_results=true)97 {98 }99 /**100 * Constructor instantiates the right type of object101 * make it a singleton, so the constructor is actually called only once102 * during a test run.103 */104 public function __construct($type='text')105 {106 static $instance=null;107 // what type to instantiate108 if (!isset($instance)) {109 switch ($type) {110 case 'html':111 $instance = new xarHTMLTestReport();112 break;113 default:114 $instance = new xarTextTestReport();115 break;116 }117 }118 $this->instance = $instance;119 }120 /**121 * For which revision marker are we running the testreport122 */123 public function getTopOfTrunk()124 {125 $tot = exec('bk changes -r+ -d:REV:');126 return $tot;127 }128}129class xarTextTestReport extends xarTestReport130{131 // Constructor must be here, otherwise we get into a loop132 public function __construct()133 {134 // Because the constructor is only called once (singleton) during a test135 // run, the per testrun output should go in here. In this case, a simple136 // header which tells us at which point in the repository we're running the tests137 echo "Running tests for top of tree revision: ".$this->getTopOfTrunk()."\n";138 }139 // Presentation function140 public function present(array $testsuites=[], $show_results=true)141 {142 foreach ($testsuites as $testsuite) {143 // Only include suites with testcases144 if ($testsuite->countTestCases() > 0) {145 echo "TestSuite: ".$testsuite->name."\n";146 $nroftestcases = $testsuite->CountTestCases();147 foreach (array_keys($testsuite->testcases) as $casekey) {148 echo "|- TestCase: ".$testsuite->testcases[$casekey]->name."\n";149 if ($show_results) {150 $tests =& $testsuite->testcases[$casekey]->_tests;151 foreach (array_keys($tests) as $key) {152 $result =& $tests[$key]->result;153 if ($nroftestcases != 1) {154 echo "|";155 } else {156 echo " ";157 }158 if (!empty($result->message)) {159 echo " |- ". str_pad($result->message, UT_OUTLENGTH, ".", STR_PAD_RIGHT) .160 (get_class($result)=="xarTestSuccess" ? "Passed" : "FAILED") . "\n";161 } else {162 echo " |- ". str_pad("WARNING: invalid result in $key()", UT_OUTLENGTH, ".", STR_PAD_RIGHT) .163 (get_class($result)=="xarTestSuccess" ? "Passed" : "FAILED") . "\n";164 }165 }166 }167 $nroftestcases--;168 }169 }170 }171 }172}173class xarHTMLTestReport extends xarTestReport174{175 public function __construct()176 {177 // Because the constructor is only called once (singleton) during a test178 // run, the per testrun output should go in here. In this case, a simple179 // header which tells us at which point in the repository we're running the tests180 echo "Running tests for top of tree revision: ".$this->getTopOfTrunk()."\n";181 }182 // Presentation function183 public function present(array $testsuites=[], $show_results=true)184 {185 foreach ($testsuites as $testsuite) {186 // Only include suites with testcases187 if ($testsuite->countTestCases() > 0) {188 echo "<br />";189 echo "TestSuite: ".$testsuite->name;190 $nroftestcases = $testsuite->CountTestCases();191 foreach (array_keys($testsuite->testcases) as $casekey) {192 echo "<br />&#160;&#160;";193 echo "|- TestCase: ".$testsuite->testcases[$casekey]->name;194 if ($show_results) {195 $tests =& $testsuite->testcases[$casekey]->tests;196 foreach (array_keys($tests) as $key) {197 $result =& $tests[$key]->result;198 if ($nroftestcases != 1) {199 echo " |";200 } else {201 echo " ";202 }203 if (!empty($result->message)) {204 echo "&#160;&#160;|- ". str_pad($result->message, UT_OUTLENGTH, ".", STR_PAD_RIGHT) .205 (get_class($result)=="xarTestSuccess" ? "Passed" : "FAILED");206 } else {207 echo "&#160;&#160;|- ". str_pad("WARNING: invalid result in $key()", UT_OUTLENGTH, ".", STR_PAD_RIGHT) .208 (get_class($result)=="xarTestSuccess" ? "Passed" : "FAILED");209 }210 echo get_class($result);211 echo "<br />";212 }213 }214 $nroftestcases--;215 }216 }217 }218 }219}220/**221 * class xarTestCase gathers info for the tests for a certain class222 *223 *224 */225class xarTestCase extends xarTestAssert226{227 public $name; // Name of this testcase228 public $tests = []; // xarTest objects229 public $_basedir; // from which directory should tests be running230 public $expected; // the expected output from the test231 public $actual; // the actual output of the test232 /**233 * Construct the testCase, make sure we only construct the234 * array of test objects once235 */236 public function __construct($testClass='', $name='', $init=false, $basedir='')237 {238// if (get_parent_class($testClass) == 'xarTestCase') {239 if ($init) {240 $clazz = new $testClass();241 $this->name=$name;242 $this->_basedir=$basedir;243 $clazz->_collecttests();244 $this->tests = $clazz->tests;245 }246// }247 }248 // Abstract functions, these should be implemented in the actual test class249 public function setup()250 {251 }252 // Precondition for a testcase default to true when not defined253 public function precondition()254 {255 return true;256 }257 public function teardown()258 {259 }260 public function runTests()261 {262 $savedir=getcwd();263// chdir($this->_basedir);264 foreach (array_keys($this->tests) as $key) {265 $this->tests[$key]->run();266 }267 chdir($savedir);268 }269 public function pass($msg='Passed')270 {271 $res = ['value' => true, 'msg' => $msg];272 return $res;273 }274 public function fail($msg='Failed')275 {276 $res = ['value' => false, 'msg' => $msg];277 return $res;278 }279 // private functions280 public function _collecttests()281 {282 $methods = get_class_methods($this);283 foreach ($methods as $method) {284 if (substr($method, 0, strlen(UT_PREFIXTESTMETHOD)) == UT_PREFIXTESTMETHOD &&285 strtolower($method) != strtolower(get_class($this))) {286 $this->tests[$method] = new xarTest($this, $method);287 }288 }289 }290}291/**292 * Class to hold the actual test293 */294class xarTest295{296 public $_parentobject;297 public $_testmethod;298 public $result;299 public $expected; // the expected output from the test300 public $actual; // the actual output of the test301 public function __construct(&$container, $method)302 {303 $this->_parentobject=& $container;304 $this->_testmethod=$method;305 }306 public function run()307 {308 $testcase= $this->_parentobject;309 $testmethod=$this->_testmethod;310 $testcase->setup();311 // Run the actual testmethod312 $result=$testcase->$testmethod();313 if ($testcase->precondition()) {314 $this->result = new xarTestResult($result);315 if ($result['value'] === true) {316 $this->result = new xarTestSuccess($result['msg']);317 } else {318 $this->result = new xarTestFailure($result['msg']);319 }320 } else {321 $this->result = new xarTestException($result);322 }323 $testcase->teardown();324 $this->expected = $testcase->expected;325 $this->actual = $testcase->actual;326 }327}328/**329 * Testresults330 *331 * This class constructs the xarTestResult object in the xarTest object332 * depending on the outcome of the called testmethod a different object333 * is created334 *335 */336class xarTestResult337{338 public $message;339 public function __construct($result)340 {341 }342}343class xarTestSuccess extends xarTestResult344{345 public function __construct($msg)346 {347 $this->message=$msg;348 }349}350class xarTestFailure extends xarTestResult351{352 public function __construct($msg)353 {354 $this->message=$msg;355 }356}357class xarTestException extends xarTestResult358{359 public function __construct($result)360 {361 $this->message=$result['msg'];362 }363}364class xarTestAssert365{366 // Abstract functions which should be implemented in subclasses367 // function fail($msg='no message') {}368 // function pass($msg='no message') {}369 public function assertEquals($expected, $actual, $delta = 0, $msg='Test for Equals')370 {371 if ((is_array($actual) && is_array($expected)) ||372 (is_object($actual) && is_object($expected))) {373 if (is_array($actual) && is_array($expected)) {...

Full Screen

Full Screen

test.php

Source:test.php Github

copy

Full Screen

...24 * TestCaseResult contains the result of a single TestCase.25 */26class TestCaseResult27{28 public function __construct(TestCase $testCase, $hasPassed) {29 $this->testCase = $testCase;30 $this->hasPassed = $hasPassed;31 }3233 /**34 * Returns true if TestCase passed.35 */36 public function hasPassed() {37 return $this->hasPassed;38 }3940 /**41 * Returns a TestCase of this TestCaseResult.42 */43 public function getTestCase() {44 return $this->testCase;45 }46}4748/**49 * TestSuiteResult contains the test results of TestSuite.50 */51class TestSuiteResult52{53 /**54 * testSuite The target TestSuite55 * testCaseResult An array of instances of TestCaseResult class.56 */57 public function __construct(TestSuite $testSuite, $testCaseResults) {58 $this->testSuite = $testSuite;59 $this->testCaseResults = $testCaseResults;60 }6162 /**63 * Returns the total number of passed test cases.64 */65 public function getTotalPassed() {66 $totalPassed = 0;67 foreach ($this->testCaseResults as $testCaseResult) {68 if ($testCaseResult->hasPassed()) {69 $totalPassed++;70 }71 }72 return $totalPassed;73 }7475 76 /**77 * Returns the total number of failed test cases.78 */79 public function getTotalFailed() {80 return count($this->testCaseResults) - $this->getTotalPassed();81 }8283 /**84 * Returns the test suite.85 */86 public function getTestSuite() {87 return $this->testSuite;88 }8990 /**91 * Returns a TestCaseResult for each test in a TestSuite of this TestSuiteResult.92 */93 public function getTestCaseResults() {94 return $this->testCaseResults;95 }96}9798/**99 * TestSuite represenets a set of tests. 100 * In this case it is a set of tests found in a single directory. 101 */102class TestSuite103{104 private $directory;105 private $testCases;106 107 public function __construct($directory, $testCases) {108 $this->directory = $directory;109 $this->testCases = $testCases;110 }111 112 /** 113 * Returns a directory of the test suite.114 * The test suite contains test from this directory.115 */116 public function getDirectory() {117 return $this->directory;118 }119120 /**121 * Returns test cases.122 * These test cases are all located in a single directory.123 */124 public function getTestCases() {125 return $this->testCases;126 }127}128129interface ITestRunner130{131 public function runTest(TestCase $test);132}133134/**135 * Filters files from directory using a regex.136 */137class FilenameFilter extends FilterIterator 138{139 /**140 * it Base iterator141 * regex Regex to filter file names142 */143 public function __construct(Iterator $it, $regex) {144 $this->regex = $regex;145 parent::__construct($it);146 }147148 /**149 * Overriden function of FilterIterator.150 * Accepts files which satisfy given regex.151 */152 public function accept() {153 return $this->isFile() && preg_match($this->regex, $this->getFilename());154 }155}156157function printHelp() {158 echo "test.php help:\n";159 echo "--help Prints this help.\n"; ...

Full Screen

Full Screen

GroupFilterIterator 2.php

Source:GroupFilterIterator 2.php Github

copy

Full Screen

...21 * @param RecursiveIterator $iterator22 * @param array $groups23 * @param TestSuite $suite24 */25 public function __construct(RecursiveIterator $iterator, array $groups, TestSuite $suite)26 {27 parent::__construct($iterator);28 foreach ($suite->getGroupDetails() as $group => $tests) {29 if (\in_array($group, $groups)) {30 $testHashes = \array_map(31 function ($test) {32 return \spl_object_hash($test);33 },34 $tests35 );36 $this->groupTests = \array_merge($this->groupTests, $testHashes);37 }38 }39 }40 /**41 * @return bool...

Full Screen

Full Screen

GroupFilterIterator.php

Source:GroupFilterIterator.php Github

copy

Full Screen

...21 * @param RecursiveIterator $iterator22 * @param array $groups23 * @param TestSuite $suite24 */25 public function __construct(RecursiveIterator $iterator, array $groups, TestSuite $suite)26 {27 parent::__construct($iterator);28 foreach ($suite->getGroupDetails() as $group => $tests) {29 if (\in_array($group, $groups)) {30 $testHashes = \array_map(31 function ($test) {32 return \spl_object_hash($test);33 },34 $tests35 );36 $this->groupTests = \array_merge($this->groupTests, $testHashes);37 }38 }39 }40 /**41 * @return bool...

Full Screen

Full Screen

index.php

Source:index.php Github

copy

Full Screen

...4ini_set('display_errors', true);5define('ROOT', dirname(__FILE__) . '/');6include 'simpletest/autorun.php';7class IHG_Record_TestSuite extends TestSuite {8 public function __construct() {9 $this->addFile(ROOT.'IHG_Record_MySQL.php');10 $this->addFile(ROOT.'IHG_Record_SQLite.php');11 }12}13class IHG_Record_Set_Testsuite extends TestSuite {14 public function __construct() {15 $this->addFile(ROOT.'IHG_Record_Set.php');16 }17}18class IHG_HTML_TestSuite extends TestSuite {19 public function __construct() {20 $this->addFile(ROOT.'IHG_HTML_Writer.php');21 }22}23class IHG_Formatter_TestSuite extends TestSuite24{25 public function __construct()26 {27 $this->addFile(ROOT . 'IHG_Formatter_List.php');28 }29}...

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1$ts = new TestSuite();2$ts->addTestFile('2.php');3$ts->addTestFile('3.php');4$ts->run(new TextReporter());5$ts = new TestSuite();6$ts->addTestFile('4.php');7$ts->addTestFile('5.php');8$ts->run(new TextReporter());9$ts = new TestSuite();10$ts->addTestFile('6.php');11$ts->addTestFile('7.php');12$ts->run(new TextReporter());13$ts = new TestSuite();14$ts->addTestFile('8.php');15$ts->addTestFile('9.php');16$ts->run(new TextReporter());17$ts = new TestSuite();18$ts->addTestFile('10.php');19$ts->addTestFile('11.php');20$ts->run(new TextReporter());21$ts = new TestSuite();22$ts->addTestFile('12.php');23$ts->addTestFile('13.php');24$ts->run(new TextReporter());25$ts = new TestSuite();26$ts->addTestFile('14.php');27$ts->addTestFile('15.php');28$ts->run(new TextReporter());29$ts = new TestSuite();30$ts->addTestFile('16.php');31$ts->addTestFile('17.php');32$ts->run(new TextReporter());33$ts = new TestSuite();34$ts->addTestFile('18.php');35$ts->addTestFile('19.php');36$ts->run(new TextReporter());37$ts = new TestSuite();

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1require_once 'PHPUnit/Framework/TestSuite.php';2$suite = new PHPUnit_Framework_TestSuite('TestSuite');3$suite->addTestFile('2.php');4$suite->addTestFile('3.php');5$suite->addTestFile('4.php');6$suite->addTestFile('5.php');7$suite->addTestFile('6.php');8$suite->addTestFile('7.php');9$suite->addTestFile('8.php');10$suite->addTestFile('9.php');11$suite->addTestFile('10.php');12$suite->addTestFile('11.php');13$suite->addTestFile('12.php');14$suite->addTestFile('13.php');15$suite->addTestFile('14.php');16$suite->addTestFile('15.php');17$suite->addTestFile('16.php');18$suite->addTestFile('17.php');19$suite->addTestFile('18.php');20$suite->addTestFile('19.php');21$suite->addTestFile('20.php');22$suite->addTestFile('21.php');23$suite->addTestFile('22.php');24$suite->addTestFile('23.php');25$suite->addTestFile('24.php');26$suite->addTestFile('25.php');27$suite->addTestFile('26.php');28$suite->addTestFile('27.php');29$suite->addTestFile('28.php');30$suite->addTestFile('29.php');31$suite->addTestFile('30.php');32$suite->addTestFile('31.php');33$suite->addTestFile('32.php');34$suite->addTestFile('33.php');35$suite->addTestFile('34.php');36$suite->addTestFile('35.php');37$suite->addTestFile('36.php');38$suite->addTestFile('37.php');39$suite->addTestFile('38.php');40$suite->addTestFile('39.php');41$suite->addTestFile('40.php');42$suite->addTestFile('41.php');43$suite->addTestFile('42.php');44$suite->addTestFile('43.php');45$suite->addTestFile('44.php');46$suite->addTestFile('45.php');47$suite->addTestFile('46.php');48$suite->addTestFile('47.php');49$suite->addTestFile('48.php');50$suite->addTestFile('

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1$testSuite = new TestSuite();2$testSuite->addTestFile('2.php');3$testSuite->addTestFile('3.php');4$testSuite->run(new TextReporter());5$testSuite = new TestSuite();6$testSuite->addTestFile('4.php');7$testSuite->addTestFile('5.php');8$testSuite->run(new TextReporter());9$testSuite = new TestSuite();10$testSuite->addTestFile('6.php');11$testSuite->addTestFile('7.php');12$testSuite->run(new TextReporter());13$testSuite = new TestSuite();14$testSuite->addTestFile('8.php');15$testSuite->addTestFile('9.php');16$testSuite->run(new TextReporter());17$testSuite = new TestSuite();18$testSuite->addTestFile('10.php');19$testSuite->addTestFile('11.php');20$testSuite->run(new TextReporter());21$testSuite = new TestSuite();22$testSuite->addTestFile('12.php');23$testSuite->addTestFile('13.php');24$testSuite->run(new TextReporter());25$testSuite = new TestSuite();26$testSuite->addTestFile('14.php');27$testSuite->addTestFile('15.php');28$testSuite->run(new TextReporter());29$testSuite = new TestSuite();30$testSuite->addTestFile('16.php');31$testSuite->addTestFile('17.php');32$testSuite->run(new TextReporter());33$testSuite = new TestSuite();34$testSuite->addTestFile('18.php');35$testSuite->addTestFile('19.php');

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1$obj = new TestSuite();2$obj->testMethod();3$obj->testMethod1();4$obj = new TestSuite();5$obj->testMethod();6$obj->testMethod2();7$obj = new TestSuite();8$obj->testMethod();9$obj->testMethod3();

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1require_once 'PHPUnit/Framework/TestSuite.php';2require_once 'PHPUnit/TextUI/TestRunner.php';3require_once 'PHPUnit/Util/Filter.php';4require_once 'PHPUnit/Util/Log/CSV.php';5require_once 'PHPUnit/Util/Log/JUnit.php';6require_once 'PHPUnit/Util/Log/TAP.php';7require_once 'PHPUnit/Util/Log/TeamCity.php';8require_once 'PHPUnit/Util/Log/Xml.php';9require_once 'PHPUnit/Util/Log/JSON.php';10require_once 'PHPUnit/Util/Log/JSON.php';

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1require_once 'PHPUnit/Framework/TestSuite.php';2require_once 'PHPUnit/TextUI/TestRunner.php';3require_once 'PHPUnit/Util/Filter.php';4require_once 'PHPUnit/Util/Log/TeamCity.php';5require_once 'PHPUnit/Util/Log/TAP.php';6require_once 'PHPUnit/Util/Log/JUnit.php';7require_once 'PHPUnit/Util/Log/CSV.php';8require_once 'PHPUnit/Util/Log/JSON.php';9require_once 'PHPUnit/Util/Log/Graph.php';10require_once 'PHPUnit/Util/Log/JSON.php';11require_once 'PHPUnit/Util/Log/PMD.php';

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1require_once 'PHPUnit/Framework/TestSuite.php';2{3 public function __construct()4 {5 $this->addTestSuite('Test1');6 $this->addTestSuite('Test2');7 }8 public static function suite()9 {10 return new self();11 }12}13require_once 'PHPUnit/Framework/TestSuite.php';14{15 public function __construct()16 {17 $this->addTestSuite('Test1');18 $this->addTestSuite('Test2');19 }20 public static function suite()21 {22 return new self();23 }24}25require_once 'PHPUnit/Framework/TestSuite.php';26{27 public function __construct()28 {29 $this->addTestSuite('Test1');30 $this->addTestSuite('Test2');31 }32 public static function suite()33 {34 return new self();35 }36}37require_once 'PHPUnit/Framework/TestSuite.php';38{39 public function __construct()40 {41 $this->addTestSuite('Test1');42 $this->addTestSuite('Test2');43 }44 public static function suite()45 {46 return new self();47 }48}49require_once 'PHPUnit/Framework/TestSuite.php';50{51 public function __construct()52 {53 $this->addTestSuite('Test1');54 $this->addTestSuite('Test2');55 }56 public static function suite()57 {58 return new self();59 }60}

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1$test = new TestSuite();2$test->add(new TestCaseTest("testTemplateMethod"));3$test->add(new TestCaseTest("testResult"));4$test->add(new TestCaseTest("testFailedResult"));5$test->add(new TestCaseTest("testFailedResultFormatting"));6$test->add(new TestCaseTest("testSuite"));7$test->run($result);8echo $result->getSummary();

Full Screen

Full Screen

__construct

Using AI Code Generation

copy

Full Screen

1$test = new TestSuite('Test1');2$test->addTestFile('Test2.php');3$test->run(new HtmlReporter());4$test = new TestSuite('Test1');5$test->addTestSuite('Test2');6$test->run(new HtmlReporter());7$test = new TestSuite('Test1');8$test->addTestFile('Test2.php');9$test->run(new HtmlReporter());10$test = new TestSuite('Test1');11$test->addTestFile('Test2.php');12$test->run(new HtmlReporter());13$test = new TestSuite('Test1');14$test->addTestFile('Test2.php');15$test->run(new HtmlReporter());16{17 function test1()18 {19 $this->assertTrue(true);20 }21}22{23 function test2()24 {25 $this->assertTrue(true);26 }27}28{29 function test3()30 {31 $this->assertTrue(true);32 }33}34{35 function test4()36 {37 $this->assertTrue(true);38 }39}40{41 function test5()42 {43 $this->assertTrue(true);44 }45}

Full Screen

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Phpunit automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Trigger __construct code on LambdaTest Cloud Grid

Execute automation tests with __construct on a cloud-based Grid of 3000+ real browsers and operating systems for both web and mobile applications.

Test now for Free

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful