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!!
