Best Python code snippet using avocado_python
test_validators.py
Source:test_validators.py
...51 for v in self.not_bools:52 with self.assertRaises(TypeError):53 b.validate(v)54 self.assertEqual(repr(b), '<Boolean>')55 def test_valid_values(self):56 val = Bool()57 val.validate(val.valid_values[0])58class TestStrings(TestCase):59 long_string = '+'.join(str(i) for i in range(100000))60 danish = '\u00d8rsted F\u00e6lled'61 chinese = '\u590f\u65e5\u7545\u9500\u699c\u5927\u724c\u7f8e'62 strings = ['', '0', '10' '1.0e+10', 'a', 'Ja', 'Artichokes!',63 danish, chinese, long_string]64 not_strings = [0, 1, 1.0e+10, bytes('', 'utf8'),65 bytes(danish, 'utf8'), bytes(chinese, 'utf8'),66 [], [1, 2, 3], {}, {'a': 1, 'b': 2},67 True, False, None, AClass, AClass(), a_func]68 def test_unlimited(self):69 s = Strings()70 for v in self.strings:71 s.validate(v)72 for v in self.not_strings:73 with self.assertRaises(TypeError):74 s.validate(v)75 self.assertEqual(repr(s), '<Strings>')76 def test_min(self):77 for min_len in [0, 1, 5, 10, 100]:78 s = Strings(min_length=min_len)79 for v in self.strings:80 if len(v) >= min_len:81 s.validate(v)82 else:83 with self.assertRaises(ValueError):84 s.validate(v)85 for v in self.not_strings:86 with self.assertRaises(TypeError):87 s.validate(v)88 self.assertEqual(repr(s), '<Strings len>=100>')89 def test_max(self):90 for max_len in [1, 5, 10, 100]:91 s = Strings(max_length=max_len)92 for v in self.strings:93 if len(v) <= max_len:94 s.validate(v)95 else:96 with self.assertRaises(ValueError):97 s.validate(v)98 for v in self.not_strings:99 with self.assertRaises(TypeError):100 s.validate(v)101 self.assertEqual(repr(s), '<Strings len<=100>')102 def test_range(self):103 s = Strings(1, 10)104 for v in self.strings:105 if 1 <= len(v) <= 10:106 s.validate(v)107 else:108 with self.assertRaises(ValueError):109 s.validate(v)110 for v in self.not_strings:111 with self.assertRaises(TypeError):112 s.validate(v)113 self.assertEqual(repr(s), '<Strings 1<=len<=10>')114 # single-valued range115 self.assertEqual(repr(Strings(10, 10)), '<Strings len=10>')116 def test_failed_strings(self):117 with self.assertRaises(TypeError):118 Strings(1, 2, 3)119 with self.assertRaises(TypeError):120 Strings(10, 9)121 with self.assertRaises(TypeError):122 Strings(max_length=0)123 with self.assertRaises(TypeError):124 Strings(min_length=1e12)125 for length in [-1, 3.5, '2', None]:126 with self.assertRaises(TypeError):127 Strings(max_length=length)128 with self.assertRaises(TypeError):129 Strings(min_length=length)130 def test_valid_values(self):131 val = Strings()132 val.validate(val.valid_values[0])133class TestNumbers(TestCase):134 numbers = [0, 1, -1, 0.1, -0.1, 100, 1000000, 1.0, 3.5, -2.3e6, 5.5e15,135 1.34e-10, -2.5e-5, math.pi, math.e,136 # warning: True==1 and False==0137 True, False,138 # warning: +/- inf are allowed if max & min are not specified!139 -float("inf"), float("inf"),140 # numpy scalars141 np.int64(36), np.float32(-1.123)142 ]143 not_numbers = ['', None, '1', [], {}, [1, 2], {1: 1},144 b'good', AClass, AClass(), a_func]145 def test_unlimited(self):146 n = Numbers()147 for v in self.numbers:148 n.validate(v)149 for v in self.not_numbers:150 with self.assertRaises(TypeError):151 n.validate(v)152 # special case - nan now raises a ValueError rather than a TypeError153 with self.assertRaises(ValueError):154 n.validate(float('nan'))155 n.validate(n.valid_values[0])156 def test_min(self):157 for min_val in [-1e20, -1, -0.1, 0, 0.1, 10]:158 n = Numbers(min_value=min_val)159 n.validate(n.valid_values[0])160 for v in self.numbers:161 if v >= min_val:162 n.validate(v)163 else:164 with self.assertRaises(ValueError):165 n.validate(v)166 for v in self.not_numbers:167 with self.assertRaises(TypeError):168 n.validate(v)169 with self.assertRaises(ValueError):170 n.validate(float('nan'))171 def test_max(self):172 for max_val in [-1e20, -1, -0.1, 0, 0.1, 10]:173 n = Numbers(max_value=max_val)174 n.validate(n.valid_values[0])175 for v in self.numbers:176 if v <= max_val:177 n.validate(v)178 else:179 with self.assertRaises(ValueError):180 n.validate(v)181 for v in self.not_numbers:182 with self.assertRaises(TypeError):183 n.validate(v)184 with self.assertRaises(ValueError):185 n.validate(float('nan'))186 def test_range(self):187 n = Numbers(0.1, 3.5)188 for v in self.numbers:189 if 0.1 <= v <= 3.5:190 n.validate(v)191 else:192 with self.assertRaises(ValueError):193 n.validate(v)194 for v in self.not_numbers:195 with self.assertRaises(TypeError):196 n.validate(v)197 with self.assertRaises(ValueError):198 n.validate(float('nan'))199 self.assertEqual(repr(n), '<Numbers 0.1<=v<=3.5>')200 def test_failed_numbers(self):201 with self.assertRaises(TypeError):202 Numbers(1, 2, 3)203 with self.assertRaises(TypeError):204 Numbers(1, 1) # min >= max205 for val in self.not_numbers:206 with self.assertRaises(TypeError):207 Numbers(max_value=val)208 with self.assertRaises(TypeError):209 Numbers(min_value=val)210class TestInts(TestCase):211 ints = [0, 1, 10, -1, 100, 1000000, int(-1e15), int(1e15),212 # warning: True==1 and False==0 - we *could* prohibit these, using213 # isinstance(v, bool)214 True, False,215 # np scalars216 np.int64(3)]217 not_ints = [0.1, -0.1, 1.0, 3.5, -2.3e6, 5.5e15, 1.34e-10, -2.5e-5,218 math.pi, math.e, '', None, float("nan"), float("inf"),219 -float("inf"), '1', [], {}, [1, 2], {1: 1}, b'good',220 AClass, AClass(), a_func]221 def test_unlimited(self):222 n = Ints()223 n.validate(n.valid_values[0])224 for v in self.ints:225 n.validate(v)226 for v in self.not_ints:227 with self.assertRaises(TypeError):228 n.validate(v)229 def test_min(self):230 for min_val in self.ints:231 n = Ints(min_value=min_val)232 for v in self.ints:233 if v >= min_val:234 n.validate(v)235 else:236 with self.assertRaises(ValueError):237 n.validate(v)238 for v in self.not_ints:239 with self.assertRaises(TypeError):240 n.validate(v)241 def test_max(self):242 for max_val in self.ints:243 n = Ints(max_value=max_val)244 for v in self.ints:245 if v <= max_val:246 n.validate(v)247 else:248 with self.assertRaises(ValueError):249 n.validate(v)250 for v in self.not_ints:251 with self.assertRaises(TypeError):252 n.validate(v)253 def test_range(self):254 n = Ints(0, 10)255 for v in self.ints:256 if 0 <= v <= 10:257 n.validate(v)258 else:259 with self.assertRaises(ValueError):260 n.validate(v)261 for v in self.not_ints:262 with self.assertRaises(TypeError):263 n.validate(v)264 self.assertEqual(repr(n), '<Ints 0<=v<=10>')265 self.assertTrue(n.is_numeric)266 def test_failed_numbers(self):267 with self.assertRaises(TypeError):268 Ints(1, 2, 3)269 with self.assertRaises(TypeError):270 Ints(1, 1) # min >= max271 for val in self.not_ints:272 with self.assertRaises((TypeError, OverflowError)):273 Ints(max_value=val)274 with self.assertRaises((TypeError, OverflowError)):275 Ints(min_value=val)276class TestPermissiveInts(TestCase):277 def test_close_to_ints(self):278 validator = PermissiveInts()279 validator.validate(validator.valid_values[0])280 a = 0281 b = 10282 values = np.linspace(a, b, b-a+1)283 for i in values:284 validator.validate(i)285 def test_bad_values(self):286 validator = PermissiveInts(0, 10)287 validator.validate(validator.valid_values[0])288 a = 0289 b = 10290 values = np.linspace(a, b, b-a+2)291 for j,i in enumerate(values):292 if j == 0 or j == 11:293 validator.validate(i)294 else:295 with self.assertRaises(TypeError):296 validator.validate(i)297class TestEnum(TestCase):298 enums = [299 [True, False],300 [1, 2, 3],301 [True, None, 1, 2.3, 'Hi!', b'free', (1, 2), float("inf")]302 ]303 # enum items must be immutable - tuple OK, list bad.304 not_enums = [[], [[1, 2], [3, 4]]]305 def test_good(self):306 for enum in self.enums:307 e = Enum(*enum)308 for v in enum:309 e.validate(v)310 for v in [22, 'bad data', [44, 55]]:311 with self.assertRaises((ValueError, TypeError)):312 e.validate(v)313 self.assertEqual(repr(e), '<Enum: {}>'.format(repr(set(enum))))314 # Enum is never numeric, even if its members are all numbers315 # because the use of is_numeric is for sweeping316 self.assertFalse(e.is_numeric)317 def test_bad(self):318 for enum in self.not_enums:319 with self.assertRaises(TypeError):320 Enum(*enum)321 def test_valid_values(self):322 for enum in self.enums:323 e = Enum(*enum)324 for val in e._valid_values:325 e.validate(val)326class TestMultiples(TestCase):327 divisors = [3, 7, 11, 13]328 not_divisors = [0, -1, -5, -1e15, 0.1, -0.1, 1.0, 3.5,329 -2.3e6, 5.5e15, 1.34e-10, -2.5e-5,330 math.pi, math.e, '', None, float("nan"), float("inf"),331 -float("inf"), '1', [], {}, [1, 2], {1: 1}, b'good',332 AClass, AClass(), a_func]333 multiples = [0, 1, 10, -1, 100, 1000000, int(-1e15), int(1e15),334 # warning: True==1 and False==0 - we *could* prohibit these, using335 # isinstance(v, bool)336 True, False,337 # numpy scalars338 np.int64(2)]339 not_multiples = [0.1, -0.1, 1.0, 3.5, -2.3e6, 5.5e15, 1.34e-10, -2.5e-5,340 math.pi, math.e, '', None, float("nan"), float("inf"),341 -float("inf"), '1', [], {}, [1, 2], {1: 1}, b'good',342 AClass, AClass(), a_func]343 def test_divisors(self):344 for d in self.divisors:345 n = Multiples(divisor=d)346 for v in [d * e for e in self.multiples]:347 n.validate(v)348 for v in self.multiples:349 if v == 0:350 continue351 with self.assertRaises(ValueError):352 n.validate(v)353 for v in self.not_multiples:354 with self.assertRaises(TypeError):355 n.validate(v)356 for d in self.not_divisors:357 with self.assertRaises(TypeError):358 n = Multiples(divisor=d)359 n = Multiples(divisor=3, min_value=1, max_value=10)360 self.assertEqual(361 repr(n), '<Ints 1<=v<=10, Multiples of 3>')362 def test_valid_values(self):363 for d in self.divisors:364 n = Multiples(divisor=d)365 n.validate(n._valid_values[0])366class TestPermissiveMultiples(TestCase):367 divisors = [40e-9, -1, 0.2225, 1/3, np.pi/2]368 multiples = [[800e-9, -40e-9, 0, 1],369 [3, -4, 0, -1, 1],370 [1.5575, -167.9875, 0],371 [2/3, 3, 1, 0, -5/3, 1e4],372 [np.pi, 5*np.pi/2, 0, -np.pi/2]]373 not_multiples = [[801e-9, 4.002e-5],374 [1.5, 0.9999999],375 [0.2226],376 [0.6667, 28/9],377 [3*np.pi/4]]378 def test_passing(self):379 for divind, div in enumerate(self.divisors):380 val = PermissiveMultiples(div)381 for mult in self.multiples[divind]:382 val.validate(mult)383 def test_not_passing(self):384 for divind, div in enumerate(self.divisors):385 val = PermissiveMultiples(div)386 for mult in self.not_multiples[divind]:387 with self.assertRaises(ValueError):388 val.validate(mult)389 # finally, a quick test that the precision is indeed setable390 def test_precision(self):391 pm_lax = PermissiveMultiples(35e-9, precision=3e-9)392 pm_lax.validate(72e-9)393 pm_strict = PermissiveMultiples(35e-9, precision=1e-10)394 with self.assertRaises(ValueError):395 pm_strict.validate(70.2e-9)396 def test_valid_values(self):397 for div in self.divisors:398 pm = PermissiveMultiples(div)399 for val in pm.valid_values:400 pm.validate(val)401class TestMultiType(TestCase):402 def test_good(self):403 m = MultiType(Strings(2, 4), Ints(10, 1000))404 for v in [10, 11, 123, 1000, 'aa', 'mop', 'FRED']:405 m.validate(v)406 for v in [9, 1001, 'Q', 'Qcode', None, 100.0, b'nice', [], {},407 a_func, AClass, AClass(), True, False]:408 with self.assertRaises(ValueError):409 m.validate(v)410 self.assertEqual(411 repr(m), '<MultiType: Strings 2<=len<=4, Ints 10<=v<=1000>')412 self.assertTrue(m.is_numeric)413 self.assertFalse(MultiType(Strings(), Enum(1, 2)).is_numeric)414 def test_bad(self):415 for args in [[], [1], [Strings(), True]]:416 with self.assertRaises(TypeError):417 MultiType(*args)418 def test_valid_values(self):419 m = MultiType(Strings(2, 4), Ints(10, 32))420 for val in m.valid_values:421 m.validate(val)422class TestArrays(TestCase):423 def test_type(self):424 m = Arrays(min_value=0.0, max_value=3.2, shape=(2, 2))425 for v in ['somestring', 4, 2, [[2, 0], [1, 2]]]:426 with self.assertRaises(TypeError):427 m.validate(v)428 def test_min_max(self):429 m = Arrays(min_value=-5, max_value=50, shape=(2, 2))430 v = np.array([[2, 0], [1, 2]])431 m.validate(v)432 v = 100*v433 with self.assertRaises(ValueError):434 m.validate(v)435 v = -1*v436 with self.assertRaises(ValueError):437 m.validate(v)438 m = Arrays(min_value=-5, shape=(2, 2))439 v = np.array([[2, 0], [1, 2]])440 m.validate(v*100)441 def test_shape(self):442 m = Arrays(min_value=-5, max_value=50, shape=(2, 2))443 v = np.array([[2, 0], [1, 2], [2, 3]])444 with self.assertRaises(ValueError):445 m.validate(v)446 # should pass if no shape specified447 m = Arrays(min_value=-5, max_value=50)448 m.validate(v)449 v = np.array([[2, 0], [1, 2]])450 m.validate(v)451 def test_valid_values(self):452 val = Arrays(min_value=-5, max_value=50, shape=(2, 2))453 val.validate(val.valid_values[0])454class TestLists(TestCase):455 def test_type(self):456 l = Lists()457 v1 = ['a', 'b', 5]458 l.validate(v1)459 v2 = 234460 with self.assertRaises(TypeError):461 l.validate(v2)462 def test_elt_vals(self):463 l = Lists(Ints(max_value=10))464 v1 = [0, 1, 5]465 l.validate(v1)466 v2 = [0, 1, 11]467 with self.assertRaises(ValueError):468 l.validate(v2)469 def test_valid_values(self):470 l = Lists(Ints(max_value=10))471 l.validate(l.valid_values[0])472class TestCallable(TestCase):473 def test_callable(self):474 c = Callable()475 def test_func():476 return True477 c.validate(test_func)478 test_int = 5479 with self.assertRaises(TypeError):480 c.validate(test_int)481 def test_valid_values(self):482 c = Callable()483 c.validate(c.valid_values[0])484class TestDict(TestCase):485 def test_dict(self):486 d = Dict()487 test_dict = {}488 d.validate(test_dict)489 test_int = 5490 with self.assertRaises(TypeError):491 d.validate(test_int)492 def test_valid_values(self):493 d = Dict()...
test_main.py
Source:test_main.py
...12sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))13class TestTimeSeries30min(unittest.TestCase):14 # valid values (checks thath the arrays are not empty15 # and have the same length)16 def test_valid_values(self):17 dates, openings, closings, max, min = get_step_30min(18 1638057600, 'btceur')19 self.assertTrue((len(dates) == len(openings) == len(20 closings) == len(max) == len(min)) != 0)21 # wrong values (checks the correct response in case of22 # unaccepted variable types)23 def test_wrong_values(self):24 self.assertEqual(get_step_30min("1638057600", 'btceur'), None)25 self.assertEqual(get_step_30min(0, 0), None)26 # corner case (checks the correct response in case of timestamp27 # smaller or equal to 0 and an empty string)28 def test_empty_values(self):29 self.assertEqual(get_step_30min(0, ""), None)30 self.assertEqual(get_step_3days(-2, ""), None)31class TestTimeSeries4hours(unittest.TestCase):32 # valid values (checks thath the arrays are not empty33 # and have the same length)34 def test_valid_values(self):35 dates, openings, closings, max, min = get_step_4hours(36 1638057600, 'btceur')37 self.assertTrue((len(dates) == len(openings) == len(38 closings) == len(max) == len(min)) != 0)39 # wrong values (checks the correct response in case of40 # unaccepted variable types)41 def test_wrong_values(self):42 self.assertEqual(get_step_4hours("1638057600", 'btceur'), None)43 self.assertEqual(get_step_4hours(0, 0), None)44 # corner case (checks the correct response in case of timestamp45 # smaller or equal to 0 and an empty string)46 def test_empty_values(self):47 self.assertEqual(get_step_4hours(0, ""), None)48 self.assertEqual(get_step_3days(-2, ""), None)49class TestTimeSeries12hours(unittest.TestCase):50 # valid values (checks thath the arrays are not empty51 # and have the same length)52 def test_valid_values(self):53 dates, openings, closings, max, min = get_step_12hours(54 1638057600, 'btceur')55 self.assertTrue((len(dates) == len(openings) == len(56 closings) == len(max) == len(min)) != 0)57 # wrong values (checks the correct response in case of58 # unaccepted variable types)59 def test_wrong_values(self):60 self.assertEqual(get_step_12hours("1638057600", 'btceur'), None)61 self.assertEqual(get_step_12hours(0, 0), None)62 # corner case (checks the correct response in case of timestamp63 # smaller or equal to 0 and an empty string)64 def test_empty_values(self):65 self.assertEqual(get_step_12hours(0, ""), None)66 self.assertEqual(get_step_3days(-2, ""), None)67class TestTimeSeriesOneday(unittest.TestCase):68 # valid values (checks thath the arrays are not empty69 # and have the same length)70 def test_valid_values(self):71 dates, openings, closings, max, min = get_step_oneday(72 1638057600, 'btceur')73 self.assertTrue((len(dates) == len(openings) == len(74 closings) == len(max) == len(min)) != 0)75 # wrong values (checks the correct response in case of76 # unaccepted variable types)77 def test_wrong_values(self):78 self.assertEqual(get_step_oneday("1638057600", 'btceur'), None)79 self.assertEqual(get_step_oneday(0, 0), None)80 # corner case (checks the correct response in case of timestamp81 # smaller or equal to 0 and an empty string)82 def test_empty_values(self):83 self.assertEqual(get_step_oneday(0, ""), None)84 self.assertEqual(get_step_3days(-2, ""), None)85class TestTimeSeries3days(unittest.TestCase):86 # valid values (checks thath the arrays are not empty87 # and have the same length)88 def test_valid_values(self):89 dates, openings, closings, max, min = get_step_3days(90 1638057600, 'btceur')91 self.assertTrue((len(dates) == len(openings) == len(92 closings) == len(max) == len(min)) != 0)93 # wrong values (checks the correct response in case of94 # unaccepted variable types)95 def test_wrong_values(self):96 self.assertEqual(get_step_3days("1638057600", 'btceur'), None)97 self.assertEqual(get_step_3days(0, 0), None)98 # corner case (checks the correct response in case of timestamp99 # smaller or equal to 0 and an empty string)100 def test_empty_values(self):101 self.assertEqual(get_step_3days(0, ""), None)102 self.assertEqual(get_step_3days(-2, ""), None)...
unit_test.py
Source:unit_test.py
...18DEFAULT_TEST_FIELD_VALUE = ''19class TestField(unittest.TestCase):20 required_field = BaseField(required=True, nullable=True)21 non_required_field = BaseField(required=False, nullable=False)22 def test_valid_values(self, value=DEFAULT_TEST_FIELD_VALUE):23 raised = False24 try:25 self.required_field.validate_value(value)26 self.non_required_field.validate_value(value)27 except:28 raised = True29 self.assertFalse(raised)30 def test_invalid_values(self, value=DEFAULT_TEST_FIELD_VALUE):31 if value != DEFAULT_TEST_FIELD_VALUE:32 with self.assertRaises(TypeError):33 self.required_field.validate_value(value)34 self.non_required_field.validate_value(value)35 @cases([None])36 def test_field_requirements(self, value):37 with self.assertRaises(TypeError):38 self.required_field.required_field_validation(value)39 self.non_required_field.required_field_validation(value)40 41class TestPhoneField(TestField):42 required_field = PhoneField(required=True, nullable=True)43 non_required_field = PhoneField(required=False, nullable=True)44 @cases([45 '79175002040', '79175002060', 7917500204046 ])47 def test_valid_values(self, phone_value):48 super().test_valid_values(phone_value)49 @cases([50 '89164104549', '+79175002040', '09164104549', '717500204',51 100, 'lorem ipsum'52 ])53 def test_invalid_field(self, phone_value):54 super().test_invalid_values(phone_value)55 56class TestEmailFiled(TestField):57 required_field = EmailField(required=True, nullable=True)58 non_required_field = EmailField(required=False, nullable=True)59 # valid cases60 @cases([61 'stupnikov@otus.ru', 'stupnikov@otus.com', 'ãã¾@otus.ru', 'ç·@otus.ru',62 'ÐÑÑеÑпомÑнÑÑÑй@otus.ru'63 ])64 def test_valid_values(self, email_value):65 super().test_valid_values(email_value)66 # invalid cases 67 @cases([68 100, 200, 'stupnikov', 'stupnikovotus'69 ])70 def test_invalid_values(self, email_value):71 super().test_invalid_values(email_value)72class TestGenderFieldFiled(TestField):73 required_field = GenderField(required=True, nullable=True)74 non_required_field = GenderField(required=False, nullable=True)75 # valid cases76 @cases([77 0,1,278 ])79 def test_valid_values(self, gender_value):80 super().test_valid_values(gender_value)81 # invalid cases 82 @cases([83 'M', 'F', '3', 5, '1', '01', -184 ])85 def test_invalid_values(self, gender_value):86 super().test_invalid_values(gender_value)87class TestDateField(TestField):88 required_field = DateField(required=True, nullable=True)89 non_required_field = DateField(required=False, nullable=True)90 # valid cases91 @cases([92 "01.01.1990", "01.01.2000", "01.02.1890"93 ])94 def test_valid_values(self, date_value):95 super().test_valid_values(date_value)96 # invalid cases 97 @cases([98 "01.01.18901", 'XXX'99 ])100 def test_invalid_values(self, date_value):101 super().test_invalid_values(date_value)102class TestBirthdayField(TestField):103 required_field = BirthDayField(required=True, nullable=True)104 non_required_field = BirthDayField(required=False, nullable=True)105 # valid cases106 @cases([107 "01.01.1990", "01.01.2000", 108 ])109 def test_valid_values(self, bdate_value):110 super().test_valid_values(bdate_value)111 # invalid cases 112 @cases([113 "01.01.1890", 'XXX'114 ])115 def test_invalid_values(self, bdate_value):116 super().test_invalid_values(bdate_value)117class TestClientIdsField(TestField):118 required_field = ClientIDsField(required=True, nullable=True)119 non_required_field = ClientIDsField(required=False, nullable=True)120 @cases([121 [1, 2, 3], [1,2], [0]122 ])123 def test_valid_values(self, clients_id_values):124 super().test_valid_values(clients_id_values)125 @cases([126 'client_id', ['0',1,2]127 ])128 def test_invalid_values(self, clients_id_values):129 super().test_invalid_values(clients_id_values)130if __name__ == "__main__":...
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!!