How to use _compare_resource_attrs method in tempest

Best Python code snippet using tempest_python

test_sf_networks.py

Source:test_sf_networks.py Github

copy

Full Screen

...101 value from self._subnet_data102 """103 return dict((key, self._subnet_data[self._ip_version][key])104 for key in include_keys)105 def _compare_resource_attrs(self, actual, expected):106 exclude_keys = set(actual).symmetric_difference(expected)107 self.assertThat(actual, custom_matchers.MatchesDictExceptForKeys(108 expected, exclude_keys))109 def _delete_network(self, network):110 # Deleting network also deletes its subnets if exists111 self.client.delete_network(network['id'])112 if network in self.networks:113 self.networks.remove(network)114 for subnet in self.subnets:115 if subnet['network_id'] == network['id']:116 self.subnets.remove(subnet)117 def _create_verify_delete_subnet(self, cidr=None, mask_bits=None,118 **kwargs):119 network = self.create_network()120 net_id = network['id']121 gateway = kwargs.pop('gateway', None)122 subnet = self.create_subnet(network, gateway, cidr, mask_bits,123 **kwargs)124 compare_args_full = dict(gateway_ip=gateway, cidr=cidr,125 mask_bits=mask_bits, **kwargs)126 compare_args = dict((k, v) for k, v in six.iteritems(compare_args_full)127 if v is not None)128 if 'dns_nameservers' in set(subnet).intersection(compare_args):129 self.assertEqual(sorted(compare_args['dns_nameservers']),130 sorted(subnet['dns_nameservers']))131 del subnet['dns_nameservers'], compare_args['dns_nameservers']132 self._compare_resource_attrs(subnet, compare_args)133 self.client.delete_network(net_id)134 body = self.client.list_networks()135 networks_list = [net['id'] for net in body['networks']]136 self.assertNotIn(net_id, networks_list)137 self.networks.pop()138 self.subnets.pop()139 def _create_verify_delete_subnet_add_router_interface(self, cidr=None,140 mask_bits=None,141 **kwargs):142 # create network and subnet143 network = self.create_network()144 net_id = network['id']145 gateway = kwargs.pop('gateway', None)146 subnet = self.create_subnet(network, gateway, cidr, mask_bits,147 **kwargs)148 compare_args_full = dict(gateway_ip=gateway, cidr=cidr,149 mask_bits=mask_bits, **kwargs)150 compare_args = dict((k, v) for k, v in six.iteritems(compare_args_full)151 if v is not None)152 self._compare_resource_attrs(subnet, compare_args)153 self.assertTrue(subnet['enable_dhcp'])154 # create router and add router interface155 router = self.client.create_router(156 name=data_utils.rand_name('router-'))157 router_id = router['router']['id']158 self.client.add_router_interface_with_subnet_id(159 router_id, subnet['id'])160 # remove router_interface and delete router161 self.client.remove_router_interface_with_subnet_id(162 router_id, subnet['id'])163 self.client.delete_router(router_id)164 # delete network165 self.client.delete_network(net_id)166 body = self.client.list_networks()167 networks_list = [net['id'] for net in body['networks']]168 self.assertNotIn(net_id, networks_list)169 self.networks.pop()170 self.subnets.pop()171 def _try_delete_network(self, net_id):172 # delete network, if it exists173 try:174 self.client.delete_network(net_id)175 # if network is not found, this means it was deleted in the test176 except lib_exc.NotFound:177 pass178 def _create_test_server(cls, tenant_network, validatable=False, **kwargs):179 """Wrapper utility that returns a test server.180 This wrapper utility calls the common create test server and181 returns a test server. The purpose of this wrapper is to minimize182 the impact on the code of the tests already using this183 function.184 """185 tenant_network = tenant_network186 body, servers = compute.create_test_server(187 cls.os,188 validatable,189 validation_resources=cls.validation_resources,190 tenant_network=tenant_network,191 **kwargs)192 return body193 @test.idempotent_id('9b1416a1-55fd-11e5-8f81-00e0666de3ce')194 def test_sf_delete_network_without_subnet(self):195 # Creates a network196 name = data_utils.rand_name('network-')197 body = self.client.create_network(name=name)198 network = body['network']199 net_id = network['id']200 # Delete network while the subnet not exists201 body = self.client.delete_network(net_id)202 # Verify that the network got deleted.203 self.assertRaises(lib_exc.NotFound,204 self.client.show_network,205 net_id)206 @test.idempotent_id('19cde411-560f-11e5-b5ea-00e0666de3ce')207 def test_sf_create_subnet_with_default_gw_v4(self):208 # Ip version is IPv4209 net = netaddr.IPNetwork(CONF.network.tenant_network_cidr)210 gateway_ip = str(netaddr.IPAddress(net.first + 1))211 name = data_utils.rand_name('network-')212 network = self.client.create_network(name=name)['network']213 self.addCleanup(self._delete_network, network)214 subnet = self.create_subnet(network,215 gateway=gateway_ip,216 ip_version=4)217 # Verifies Subnet GW in IPv4218 self.assertEqual(subnet['gateway_ip'], gateway_ip)219 @test.idempotent_id('9f2a7640-56ce-11e5-8fd4-00e0666de3ce')220 def test_sf_create_delete_subnet_with_dns_server(self):221 self._create_verify_delete_subnet(222 **self.subnet_dict(['dns_nameservers']))223 @test.idempotent_id('083e6000-56d0-11e5-9f76-00e0666de3ce')224 def test_sf_create_delete_subnet_with_dhcp_disabled(self):225 self._create_verify_delete_subnet(enable_dhcp=False)226 @test.idempotent_id('0eb18cb0-56e3-11e5-9833-00e0666de3ce')227 def test_sf_update_subnet_with_gw(self):228 name = data_utils.rand_name('network-')229 network = self.client.create_network(name=name)['network']230 self.addCleanup(self._delete_network, network)231 subnet = self.create_subnet(232 network, **self.subnet_dict(['gateway', 'allocation_pools']))233 subnet_id = subnet['id']234 new_gateway = str(netaddr.IPAddress(235 self._subnet_data[self._ip_version]['gateway']) + 1)236 # Verify subnet update237 kwargs = {'gateway_ip': new_gateway}238 new_name = "sf-new-subnet"239 body = self.client.update_subnet(subnet_id, name=new_name,240 **kwargs)241 updated_subnet = body['subnet']242 kwargs['name'] = new_name243 self._compare_resource_attrs(updated_subnet, kwargs)244 @test.idempotent_id('2be96930-c7c5-11e5-bdd7-00e0666534ba')245 def test_sf_show_network_and_subnet(self):246 # Creates a network and subnet247 name = data_utils.rand_name('network-')248 network = self.client.create_network(name=name)['network']249 net_id = network['id']250 self.addCleanup(self._delete_network, network)251 subnet = self.create_subnet(network)252 subnet_id = subnet['id']253 net_detail = self.client.show_network(net_id)['network']254 self.assertEqual(net_detail['name'], name)255 subnet_detail = self.client.show_subnet(subnet_id)['subnet']256 self.assertEqual(subnet_detail['network_id'], net_id)257 self.assertTrue(subnet['enable_dhcp'])258 @test.idempotent_id('8d35a521-56e9-11e5-96eb-00e0666de3ce')259 def test_sf_update_subnet_add_remove_router_interfaces(self):260 name = data_utils.rand_name('network-')261 network = self.client.create_network(name=name)['network']262 self.addCleanup(self._delete_network, network)263 subnet = self.create_subnet(264 network, **self.subnet_dict(['gateway', 'allocation_pools']))265 subnet_id = subnet['id']266 # create router and add router interface267 router = self.client.create_router(268 name=data_utils.rand_name('router-'))269 router_id = router['router']['id']270 self.client.add_router_interface_with_subnet_id(271 router_id, subnet_id)272 # remove router_interface and delete router273 self.client.remove_router_interface_with_subnet_id(274 router_id, subnet_id)275 self.client.delete_router(router_id)276 @test.idempotent_id('6ad1b9de-575e-11e5-a9ef-00e0666de3ce')277 def test_sf_update_subnet_host_routes_dhcp_disable(self):278 name = data_utils.rand_name('network-')279 network = self.client.create_network(name=name)['network']280 self.addCleanup(self._delete_network, network)281 subnet = self.create_subnet(282 network, **self.subnet_dict(['gateway', 'host_routes',283 'dns_nameservers',284 'allocation_pools']))285 subnet_id = subnet['id']286 # Verify subnet update287 new_host_routes = self._subnet_data[self._ip_version][288 'new_host_routes']289 kwargs = {'host_routes': new_host_routes, 'enable_dhcp': False}290 new_name = "sf-new-subnet"291 body = self.client.update_subnet(subnet_id, name=new_name,292 **kwargs)293 updated_subnet = body['subnet']294 kwargs['name'] = new_name295 self._compare_resource_attrs(updated_subnet, kwargs)296 @test.idempotent_id('e62ab50f-56eb-11e5-b695-00e0666de3ce')297 def test_sf_update_subnet_dns_server(self):298 name = data_utils.rand_name('network-')299 network = self.client.create_network(name=name)['network']300 self.addCleanup(self._delete_network, network)301 subnet = self.create_subnet(302 network, **self.subnet_dict(['gateway', 'host_routes',303 'dns_nameservers',304 'allocation_pools']))305 subnet_id = subnet['id']306 # Verify subnet update307 new_dns_nameservers = self._subnet_data[self._ip_version][308 'new_dns_nameservers']309 kwargs = {'dns_nameservers': new_dns_nameservers, 'enable_dhcp': True}310 new_name = "sf-new-subnet"311 body = self.client.update_subnet(subnet_id, name=new_name,312 **kwargs)313 updated_subnet = body['subnet']314 kwargs['name'] = new_name315 self.assertEqual(sorted(updated_subnet['dns_nameservers']),316 sorted(kwargs['dns_nameservers']))317 del subnet['dns_nameservers'], kwargs['dns_nameservers']318 self._compare_resource_attrs(updated_subnet, kwargs)319 @test.attr(type='smoke')320 @test.idempotent_id('0fb0efc0-56ed-11e5-8a03-00e0666de3ce')321 def test_sf_update_subnet_gw_allocation_pools(self):322 name = data_utils.rand_name('network-')323 network = self.client.create_network(name=name)['network']324 self.addCleanup(self._delete_network, network)325 subnet = self.create_subnet(326 network, **self.subnet_dict(['gateway', 'allocation_pools']))327 subnet_id = subnet['id']328 new_gateway = netaddr.IPAddress(329 self._subnet_data[self._ip_version]['gateway']) + 1330 new_allocation_pools = [{'start': str(new_gateway + 1), 'end':331 str(new_gateway + 7)}]332 # Verify subnet update333 kwargs = {'gateway_ip': str(new_gateway), 'allocation_pools':334 new_allocation_pools}335 new_name = "sf-new-subnet"336 body = self.client.update_subnet(subnet_id, name=new_name,337 **kwargs)338 updated_subnet = body['subnet']339 kwargs['name'] = new_name340 self._compare_resource_attrs(updated_subnet, kwargs)341 @test.idempotent_id('a4d9ec4c-0306-4111-a75c-db01a709030b')342 def test_sf_create_delete_subnet_multi_attributes(self):343 self._create_verify_delete_subnet(344 enable_dhcp=True,345 **self.subnet_dict(['gateway', 'allocation_pools']))346 @test.idempotent_id('e4d9af2e-5697-11e5-b3d1-00e0666de3ce')347 def test_sf_create_delete_subnet_gw_add_router_interfaces(self):348 self._create_verify_delete_subnet_add_router_interface(349 enable_dhcp=True,350 **self.subnet_dict(['gateway']))351 @test.idempotent_id('ceb82db0-5699-11e5-bbec-00e0666de3ce')352 def test_sf_create_delete_subnet_gw_dns(self):353 self._create_verify_delete_subnet(354 enable_dhcp=True,...

Full Screen

Full Screen

test_subnets.py

Source:test_subnets.py Github

copy

Full Screen

...182 self.delete_subnet(net_id)183 # if network is not found, this means it was deleted in the test184 except exceptions.NotFound:185 pass186 def _compare_resource_attrs(self, actual, expected):187 exclude_keys = set(actual).symmetric_difference(expected)188 self.assertThat(actual, custom_matchers.MatchesDictExceptForKeys(189 expected, exclude_keys))190 def _create_verify_delete_subnet(self, cidr=None, mask_bits=None,191 **kwargs):192 network = self._create_network(_auto_clean_up=True)193 net_id = network['id']194 gateway = kwargs.pop('gateway', None)195 subnet = self._create_subnet(network, gateway, cidr, mask_bits,196 **kwargs)197 compare_args_full = dict(gateway_ip=gateway, cidr=cidr,198 mask_bits=mask_bits, **kwargs)199 compare_args = (dict((k, v)200 for k, v in six.iteritems(compare_args_full)201 if v is not None))202 if 'dns_nameservers' in set(subnet).intersection(compare_args):203 self.assertEqual(sorted(compare_args['dns_nameservers']),204 sorted(subnet['dns_nameservers']))205 del subnet['dns_nameservers'], compare_args['dns_nameservers']206 self._compare_resource_attrs(subnet, compare_args)207 self._delete_network(net_id)208 @decorators.idempotent_id('2ecbc3ab-93dd-44bf-a827-95beeb008e9a')209 def test_create_update_delete_network_subnet(self):210 # Create a network211 network = self._create_network(_auto_clean_up=True)212 net_id = network['id']213 self.assertEqual('ACTIVE', network['status'])214 # Verify network update215 new_name = data_utils.rand_name('new-adm-netwk')216 body = self.update_network(net_id, name=new_name)217 updated_net = body['network']218 self.assertEqual(updated_net['name'], new_name)219 # Find a cidr that is not in use yet and create a subnet with it220 subnet = self._create_subnet(network)221 subnet_id = subnet['id']222 # Verify subnet update223 new_name = data_utils.rand_name('new-subnet')224 body = self.update_subnet(subnet_id, name=new_name)225 updated_subnet = body['subnet']226 self.assertEqual(updated_subnet['name'], new_name)227 self._delete_network(net_id)228 @decorators.idempotent_id('a2cf6398-aece-4256-88a6-0dfe8aa44975')229 def test_show_network(self):230 # Verify the details of a network231 body = self.show_network(self.network['id'])232 network = body['network']233 for key in ['id', 'name']:234 self.assertEqual(network[key], self.network[key])235 @decorators.idempotent_id('5b42067d-4b9d-4f04-bb6a-adb9756ebe0c')236 def test_show_network_fields(self):237 # Verify specific fields of a network238 fields = ['id', 'name']239 body = self.show_network(self.network['id'], fields=fields)240 network = body['network']241 self.assertEqual(sorted(network.keys()), sorted(fields))242 for field_name in fields:243 self.assertEqual(network[field_name], self.network[field_name])244 @decorators.idempotent_id('324be3c2-457d-4e21-b0b3-5106bbbf1a28')245 def test_list_networks(self):246 # Verify the network exists in the list of all networks247 body = self.list_networks()248 networks = [network['id'] for network in body['networks']249 if network['id'] == self.network['id']]250 self.assertNotEmpty(networks, "Created network not found in the list")251 @decorators.idempotent_id('3a934a8d-6b52-427e-af49-3dfdd224fdeb')252 def test_list_networks_fields(self):253 # Verify specific fields of the networks254 fields = ['id', 'name']255 body = self.list_networks(fields=fields)256 networks = body['networks']257 self.assertNotEmpty(networks, "Network list returned is empty")258 for network in networks:259 self.assertEqual(sorted(network.keys()), sorted(fields))260 @decorators.idempotent_id('5f6616c4-bfa7-4308-8eab-f45d75c94c6d')261 def test_show_subnet(self):262 # Verify the details of a subnet263 body = self.show_subnet(self.subnet['id'])264 subnet = body['subnet']265 self.assertNotEmpty(subnet, "Subnet returned has no fields")266 for key in ['id', 'cidr']:267 self.assertIn(key, subnet)268 self.assertEqual(subnet[key], self.subnet[key])269 @decorators.idempotent_id('2f326955-551e-4e9e-a4f6-e5db77c34c8d')270 def test_show_subnet_fields(self):271 # Verify specific fields of a subnet272 fields = ['id', 'network_id']273 body = self.show_subnet(self.subnet['id'], fields=fields)274 subnet = body['subnet']275 self.assertEqual(sorted(subnet.keys()), sorted(fields))276 for field_name in fields:277 self.assertEqual(subnet[field_name], self.subnet[field_name])278 @decorators.idempotent_id('66631557-2466-4827-bba6-d961b0242be3')279 def test_list_subnets(self):280 # Verify the subnet exists in the list of all subnets281 body = self.list_subnets()282 subnets = [subnet['id'] for subnet in body['subnets']283 if subnet['id'] == self.subnet['id']]284 self.assertNotEmpty(subnets, "Created subnet not found in the list")285 @decorators.idempotent_id('3d5ea69b-f122-43e7-b7f4-c78586629eb8')286 def test_list_subnets_fields(self):287 # Verify specific fields of subnets288 fields = ['id', 'network_id']289 body = self.list_subnets(fields=fields)290 subnets = body['subnets']291 self.assertNotEmpty(subnets, "Subnet list returned is empty")292 for subnet in subnets:293 self.assertEqual(sorted(subnet.keys()), sorted(fields))294 @decorators.idempotent_id('e966bb2f-402c-49b7-8147-b275cee584c4')295 def test_delete_network_with_subnet(self):296 # Creates a network297 network = self._create_network(_auto_clean_up=True)298 net_id = network['id']299 # Find a cidr that is not in use yet and create a subnet with it300 subnet = self._create_subnet(network)301 subnet_id = subnet['id']302 # Delete network while the subnet still exists303 self._delete_network(net_id)304 # Verify that the subnet got automatically deleted.305 self.assertRaises(exceptions.NotFound,306 self.show_subnet, subnet_id)307 @decorators.idempotent_id('8aba0e1b-4b70-4181-a8a4-792c08db699d')308 def test_create_delete_subnet_without_gateway(self):309 self._create_verify_delete_subnet()310 @decorators.idempotent_id('67364a4b-6725-4dbe-84cf-504bdb20ac06')311 def test_create_delete_subnet_with_gw(self):312 self._create_verify_delete_subnet(313 **self.subnet_dict(['gateway']))314 @decorators.idempotent_id('f8f43e65-5090-4902-b5d2-2b610505cca6')315 def test_create_delete_subnet_with_allocation_pools(self):316 self._create_verify_delete_subnet(317 **self.subnet_dict(['allocation_pools']))318 @decorators.idempotent_id('5b085669-97e6-48e0-b99e-315a9b4d8482')319 def test_create_delete_subnet_with_gw_and_allocation_pools(self):320 self._create_verify_delete_subnet(**self.subnet_dict(321 ['gateway', 'allocation_pools']))322 @decorators.skip_because(bug="1501827")323 @decorators.idempotent_id('3c4c36a1-684b-4e89-8e71-d528f19322a0')324 def test_create_delete_subnet_with_host_routes_and_dns_nameservers(self):325 self._create_verify_delete_subnet(326 **self.subnet_dict(['host_routes', 'dns_nameservers']))327 @decorators.idempotent_id('df518c87-b817-48b5-9365-bd1daaf68955')328 def test_create_delete_subnet_with_dns_nameservers(self):329 self._create_verify_delete_subnet(330 **self.subnet_dict(['dns_nameservers']))331 @decorators.idempotent_id('b6822feb-6760-4052-b550-f0fe8bac7451')332 def test_create_delete_subnet_with_dhcp_enabled(self):333 self._create_verify_delete_subnet(enable_dhcp=True)334 @decorators.skip_because(bug="1501827")335 @decorators.idempotent_id('3c4c36a1-684a-4e89-8e71-d528f19324a0')336 def test_update_subnet_gw_dns_host_routes_dhcp(self):337 network = self._create_network(_auto_clean_up=True)338 subnet_attrs = ['gateway', 'host_routes',339 'dns_nameservers', 'allocation_pools']340 subnet_dict = self.subnet_dict(subnet_attrs)341 subnet = self._create_subnet(network, **subnet_dict)342 subnet_id = subnet['id']343 new_gateway = str(netaddr.IPAddress(344 self._subnet_data[self._ip_version]['gateway']) + 1)345 # Verify subnet update346 new_host_routes = self._subnet_data[self._ip_version][347 'new_host_routes']348 new_dns_nameservers = self._subnet_data[self._ip_version][349 'new_dns_nameservers']350 kwargs = {'host_routes': new_host_routes,351 'dns_nameservers': new_dns_nameservers,352 'gateway_ip': new_gateway, 'enable_dhcp': True}353 new_name = "New_subnet"354 body = self.update_subnet(subnet_id, name=new_name, **kwargs)355 updated_subnet = body['subnet']356 kwargs['name'] = new_name357 self.assertEqual(sorted(updated_subnet['dns_nameservers']),358 sorted(kwargs['dns_nameservers']))359 del subnet['dns_nameservers'], kwargs['dns_nameservers']360 self._compare_resource_attrs(updated_subnet, kwargs)361 self._delete_network(network['id'])362 @decorators.idempotent_id('a5caa7d9-ab71-4278-a57c-d6631b7474f8')363 def test_update_subnet_gw_dns_dhcp(self):364 network = self._create_network(_auto_clean_up=True)365 subnet_attrs = ['gateway',366 'dns_nameservers', 'allocation_pools']367 subnet_dict = self.subnet_dict(subnet_attrs)368 subnet = self._create_subnet(network, **subnet_dict)369 subnet_id = subnet['id']370 new_gateway = str(netaddr.IPAddress(371 self._subnet_data[self._ip_version]['gateway']) + 1)372 # Verify subnet update373 new_dns_nameservers = self._subnet_data[self._ip_version][374 'new_dns_nameservers']375 kwargs = {'dns_nameservers': new_dns_nameservers,376 'gateway_ip': new_gateway, 'enable_dhcp': True}377 new_name = "New_subnet"378 body = self.update_subnet(subnet_id, name=new_name, **kwargs)379 updated_subnet = body['subnet']380 kwargs['name'] = new_name381 self.assertEqual(sorted(updated_subnet['dns_nameservers']),382 sorted(kwargs['dns_nameservers']))383 del subnet['dns_nameservers'], kwargs['dns_nameservers']384 self._compare_resource_attrs(updated_subnet, kwargs)385 self._delete_network(network['id'])386 @decorators.skip_because(bug="1501827")387 @decorators.idempotent_id('a5caa7d5-ab71-4278-a57c-d6631b7474f8')388 def test_create_delete_subnet_all_attributes(self):389 self._create_verify_delete_subnet(390 enable_dhcp=True,391 **self.subnet_dict(['gateway',392 'host_routes',393 'dns_nameservers']))394 @decorators.idempotent_id('a5caa7d9-ab71-4278-a57c-d6631b7474c8')395 def test_create_delete_subnet_with_gw_dns(self):396 self._create_verify_delete_subnet(397 enable_dhcp=True,398 **self.subnet_dict(['gateway',...

Full Screen

Full Screen

test_vlan_network_action.py

Source:test_vlan_network_action.py Github

copy

Full Screen

...133# def subnet_dict(self, include_keys):134# return dict((key, self._subnet_data[self._ip_version][key])135# for key in include_keys)136#137# def _compare_resource_attrs(self, actual, expected):138# exclude_keys = set(actual).symmetric_difference(expected)139# self.assertThat(actual, custom_matchers.MatchesDictExceptForKeys(140# expected, exclude_keys))141 def _delete_network(self, network):142 self.networks_client.delete_network(network['id'])143 if network in self.networks:144 self.networks.remove(network)145 for subnet in self.subnets:146 if subnet['network_id'] == network['id']:147 self.subnets.remove(subnet)148# def _create_verify_delete_subnet(self, cidr=None, mask_bits=None,149# **kwargs):150# network = self.create_network()151# net_id = network['id']152# gateway = kwargs.pop('gateway', None)153# subnet = self.create_subnet(network, gateway, cidr, mask_bits,154# **kwargs)155# compare_args_full = dict(gateway_ip=gateway, cidr=cidr,156# mask_bits=mask_bits, **kwargs)157# compare_args = dict((k, v) for k, v in six.iteritems(compare_args_full)158# if v is not None)159#160# if 'dns_nameservers' in set(subnet).intersection(compare_args):161# self.assertEqual(sorted(compare_args['dns_nameservers']),162# sorted(subnet['dns_nameservers']))163# del subnet['dns_nameservers'], compare_args['dns_nameservers']164#165# self._compare_resource_attrs(subnet, compare_args)166# self.networks_client.delete_network(net_id)167# self.networks.pop()168# self.subnets.pop()169# ...

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 tempest automation tests on LambdaTest cloud grid

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

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful