How to use _create_new_network method in tempest

Best Python code snippet using tempest_python

test_network_basic_ops.py

Source:test_network_basic_ops.py Github

copy

Full Screen

...185 server = self._create_server(self.network)186 self._associate_floating_ip(floating_ip, server)187 self.floating_ip_tuple = Floating_IP_tuple(188 floating_ip, server)189 def _create_new_network(self, create_gateway=False):190 self.new_net = self._create_network()191 if create_gateway:192 self.new_subnet = self._create_subnet(193 network=self.new_net)194 else:195 self.new_subnet = self._create_subnet(196 network=self.new_net,197 gateway_ip=None)198 def _hotplug_server(self):199 old_floating_ip, server = self.floating_ip_tuple200 ip_address = old_floating_ip['floating_ip_address']201 private_key = self._get_server_key(server)202 ssh_client = self.get_remote_client(203 ip_address, private_key=private_key)204 old_nic_list = self._get_server_nics(ssh_client)205 # get a port from a list of one item206 port_list = self._list_ports(device_id=server['id'])207 self.assertEqual(1, len(port_list))208 old_port = port_list[0]209 interface = self.interface_client.create_interface(210 server_id=server['id'],211 net_id=self.new_net['id'])['interfaceAttachment']212 self.addCleanup(self.ports_client.wait_for_resource_deletion,213 interface['port_id'])214 self.addCleanup(test_utils.call_and_ignore_notfound_exc,215 self.interface_client.delete_interface,216 server['id'], interface['port_id'])217 def check_ports():218 self.new_port_list = [port for port in219 self._list_ports(device_id=server['id'])220 if port['id'] != old_port['id']]221 return len(self.new_port_list) == 1222 if not test_utils.call_until_true(223 check_ports, CONF.network.build_timeout,224 CONF.network.build_interval):225 raise exceptions.TimeoutException(226 "No new port attached to the server in time (%s sec)! "227 "Old port: %s. Number of new ports: %d" % (228 CONF.network.build_timeout, old_port,229 len(self.new_port_list)))230 new_port = self.new_port_list[0]231 def check_new_nic():232 new_nic_list = self._get_server_nics(ssh_client)233 self.diff_list = [n for n in new_nic_list if n not in old_nic_list]234 return len(self.diff_list) == 1235 if not test_utils.call_until_true(236 check_new_nic, CONF.network.build_timeout,237 CONF.network.build_interval):238 raise exceptions.TimeoutException("Interface not visible on the "239 "guest after %s sec"240 % CONF.network.build_timeout)241 num, new_nic = self.diff_list[0]242 ssh_client.assign_static_ip(nic=new_nic,243 addr=new_port['fixed_ips'][0][244 'ip_address'])245 ssh_client.set_nic_state(nic=new_nic)246 def _get_server_nics(self, ssh_client):247 reg = re.compile(r'(?P<num>\d+): (?P<nic_name>\w+):')248 ipatxt = ssh_client.get_ip_list()249 return reg.findall(ipatxt)250 def _check_network_internal_connectivity(self, network,251 should_connect=True):252 """via ssh check VM internal connectivity:253 - ping internal gateway and DHCP port, implying in-tenant connectivity254 pinging both, because L3 and DHCP agents might be on different nodes255 """256 floating_ip, server = self.floating_ip_tuple257 # get internal ports' ips:258 # get all network ports in the new network259 internal_ips = (p['fixed_ips'][0]['ip_address'] for p in260 self._list_ports(tenant_id=server['tenant_id'],261 network_id=network['id'])262 if p['device_owner'].startswith('network'))263 self._check_server_connectivity(floating_ip,264 internal_ips,265 should_connect)266 def _check_network_external_connectivity(self):267 """ping default gateway to imply external connectivity"""268 if not CONF.network.public_network_id:269 msg = 'public network not defined.'270 LOG.info(msg)271 return272 # We ping the external IP from the instance using its floating IP273 # which is always IPv4, so we must only test connectivity to274 # external IPv4 IPs if the external network is dualstack.275 v4_subnets = [s for s in self._list_subnets(276 network_id=CONF.network.public_network_id) if s['ip_version'] == 4]277 self.assertEqual(1, len(v4_subnets),278 "Found %d IPv4 subnets" % len(v4_subnets))279 external_ips = [v4_subnets[0]['gateway_ip']]280 self._check_server_connectivity(self.floating_ip_tuple.floating_ip,281 external_ips)282 def _check_server_connectivity(self, floating_ip, address_list,283 should_connect=True):284 ip_address = floating_ip['floating_ip_address']285 private_key = self._get_server_key(self.floating_ip_tuple.server)286 ssh_source = self.get_remote_client(287 ip_address, private_key=private_key)288 for remote_ip in address_list:289 if should_connect:290 msg = ("Timed out waiting for %s to become "291 "reachable") % remote_ip292 else:293 msg = "ip address %s is reachable" % remote_ip294 try:295 self.assertTrue(self._check_remote_connectivity296 (ssh_source, remote_ip, should_connect),297 msg)298 except Exception:299 LOG.exception("Unable to access {dest} via ssh to "300 "floating-ip {src}".format(dest=remote_ip,301 src=floating_ip))302 raise303 @test.attr(type='smoke')304 @decorators.idempotent_id('f323b3ba-82f8-4db7-8ea6-6a895869ec49')305 @test.services('compute', 'network')306 def test_network_basic_ops(self):307 """Basic network operation test308 For a freshly-booted VM with an IP address ("port") on a given309 network:310 - the Tempest host can ping the IP address. This implies, but311 does not guarantee (see the ssh check that follows), that the312 VM has been assigned the correct IP address and has313 connectivity to the Tempest host.314 - the Tempest host can perform key-based authentication to an315 ssh server hosted at the IP address. This check guarantees316 that the IP address is associated with the target VM.317 - the Tempest host can ssh into the VM via the IP address and318 successfully execute the following:319 - ping an external IP address, implying external connectivity.320 - ping an external hostname, implying that dns is correctly321 configured.322 - ping an internal IP address, implying connectivity to another323 VM on the same network.324 - detach the floating-ip from the VM and verify that it becomes325 unreachable326 - associate detached floating ip to a new VM and verify connectivity.327 VMs are created with unique keypair so connectivity also asserts that328 floating IP is associated with the new VM instead of the old one329 Verifies that floating IP status is updated correctly after each change330 """331 self._setup_network_and_servers()332 self.check_public_network_connectivity(should_connect=True)333 self._check_network_internal_connectivity(network=self.network)334 self._check_network_external_connectivity()335 self._disassociate_floating_ips()336 self.check_public_network_connectivity(should_connect=False,337 msg="after disassociate "338 "floating ip")339 self._reassociate_floating_ips()340 self.check_public_network_connectivity(should_connect=True,341 msg="after re-associate "342 "floating ip")343 @decorators.idempotent_id('b158ea55-472e-4086-8fa9-c64ac0c6c1d0')344 @testtools.skipUnless(test.is_extension_enabled('net-mtu', 'network'),345 'No way to calculate MTU for networks')346 @test.services('compute', 'network')347 def test_mtu_sized_frames(self):348 """Validate that network MTU sized frames fit through."""349 self._setup_network_and_servers()350 self.check_public_network_connectivity(351 should_connect=True, mtu=self.network['mtu'])352 @decorators.idempotent_id('1546850e-fbaa-42f5-8b5f-03d8a6a95f15')353 @testtools.skipIf(CONF.network.shared_physical_network,354 'Connectivity can only be tested when in a '355 'multitenant network environment')356 @decorators.skip_because(bug="1610994")357 @test.services('compute', 'network')358 def test_connectivity_between_vms_on_different_networks(self):359 """Test connectivity between VMs on different networks360 For a freshly-booted VM with an IP address ("port") on a given361 network:362 - the Tempest host can ping the IP address.363 - the Tempest host can ssh into the VM via the IP address and364 successfully execute the following:365 - ping an external IP address, implying external connectivity.366 - ping an external hostname, implying that dns is correctly367 configured.368 - ping an internal IP address, implying connectivity to another369 VM on the same network.370 - Create another network on the same tenant with subnet, create371 an VM on the new network.372 - Ping the new VM from previous VM failed since the new network373 was not attached to router yet.374 - Attach the new network to the router, Ping the new VM from375 previous VM succeed.376 """377 self._setup_network_and_servers()378 self.check_public_network_connectivity(should_connect=True)379 self._check_network_internal_connectivity(network=self.network)380 self._check_network_external_connectivity()381 self._create_new_network(create_gateway=True)382 self._create_server(self.new_net)383 self._check_network_internal_connectivity(network=self.new_net,384 should_connect=False)385 router_id = self.router['id']386 self.routers_client.add_router_interface(387 router_id, subnet_id=self.new_subnet['id'])388 self.addCleanup(test_utils.call_and_ignore_notfound_exc,389 self.routers_client.remove_router_interface,390 router_id, subnet_id=self.new_subnet['id'])391 self._check_network_internal_connectivity(network=self.new_net,392 should_connect=True)393 @decorators.idempotent_id('c5adff73-e961-41f1-b4a9-343614f18cfa')394 @testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,395 'NIC hotplug not available')396 @testtools.skipIf(CONF.network.port_vnic_type in ['direct', 'macvtap'],397 'NIC hotplug not supported for '398 'vnic_type direct or macvtap')399 @test.services('compute', 'network')400 def test_hotplug_nic(self):401 """Test hotplug network interface402 1. Create a network and a VM.403 2. Check connectivity to the VM via a public network.404 3. Create a new network, with no gateway.405 4. Bring up a new interface406 5. check the VM reach the new network407 """408 self._setup_network_and_servers()409 self.check_public_network_connectivity(should_connect=True)410 self._create_new_network()411 self._hotplug_server()412 self._check_network_internal_connectivity(network=self.new_net)413 @decorators.idempotent_id('04b9fe4e-85e8-4aea-b937-ea93885ac59f')414 @testtools.skipIf(CONF.network.shared_physical_network,415 'Router state can be altered only with multitenant '416 'networks capabilities')417 @test.services('compute', 'network')418 def test_update_router_admin_state(self):419 """Test to update admin state up of router420 1. Check public connectivity before updating421 admin_state_up attribute of router to False422 2. Check public connectivity after updating423 admin_state_up attribute of router to False424 3. Check public connectivity after updating425 admin_state_up attribute of router to True426 """427 self._setup_network_and_servers()428 self.check_public_network_connectivity(429 should_connect=True, msg="before updating "430 "admin_state_up of router to False")431 self._update_router_admin_state(self.router, False)432 # TODO(alokmaurya): Remove should_check_floating_ip_status=False check433 # once bug 1396310 is fixed434 self.check_public_network_connectivity(435 should_connect=False, msg="after updating "436 "admin_state_up of router to False",437 should_check_floating_ip_status=False)438 self._update_router_admin_state(self.router, True)439 self.check_public_network_connectivity(440 should_connect=True, msg="after updating "441 "admin_state_up of router to True")442 @decorators.idempotent_id('d8bb918e-e2df-48b2-97cd-b73c95450980')443 @testtools.skipIf(CONF.network.shared_physical_network,444 'network isolation not available')445 @testtools.skipUnless(CONF.scenario.dhcp_client,446 "DHCP client is not available.")447 @test.services('compute', 'network')448 def test_subnet_details(self):449 """Tests that subnet's extra configuration details are affecting VMs.450 This test relies on non-shared, isolated tenant networks.451 NOTE: Neutron subnets push data to servers via dhcp-agent, so any452 update in subnet requires server to actively renew its DHCP lease.453 1. Configure subnet with dns nameserver454 2. retrieve the VM's configured dns and verify it matches the one455 configured for the subnet.456 3. update subnet's dns457 4. retrieve the VM's configured dns and verify it matches the new one458 configured for the subnet.459 TODO(yfried): add host_routes460 any resolution check would be testing either:461 * l3 forwarding (tested in test_network_basic_ops)462 * Name resolution of an external DNS nameserver - out of scope for463 Tempest464 """465 # this test check only updates (no actual resolution) so using466 # arbitrary ip addresses as nameservers, instead of parsing CONF467 initial_dns_server = '1.2.3.4'468 alt_dns_server = '9.8.7.6'469 # renewal should be immediate.470 # Timeouts are suggested by salvatore-orlando in471 # https://bugs.launchpad.net/neutron/+bug/1412325/comments/3472 renew_delay = CONF.network.build_interval473 renew_timeout = CONF.network.build_timeout474 self._setup_network_and_servers(dns_nameservers=[initial_dns_server])475 self.check_public_network_connectivity(should_connect=True)476 floating_ip, server = self.floating_ip_tuple477 ip_address = floating_ip['floating_ip_address']478 private_key = self._get_server_key(server)479 ssh_client = self.get_remote_client(480 ip_address, private_key=private_key)481 dns_servers = [initial_dns_server]482 servers = ssh_client.get_dns_servers()483 self.assertEqual(set(dns_servers), set(servers),484 'Looking for servers: {trgt_serv}. '485 'Retrieved DNS nameservers: {act_serv} '486 'From host: {host}.'487 .format(host=ssh_client.ssh_client.host,488 act_serv=servers,489 trgt_serv=dns_servers))490 self.subnet = self.subnets_client.update_subnet(491 self.subnet['id'], dns_nameservers=[alt_dns_server])['subnet']492 # asserts that Neutron DB has updated the nameservers493 self.assertEqual([alt_dns_server], self.subnet['dns_nameservers'],494 "Failed to update subnet's nameservers")495 def check_new_dns_server():496 # NOTE: Server needs to renew its dhcp lease in order to get new497 # definitions from subnet498 # NOTE(amuller): we are renewing the lease as part of the retry499 # because Neutron updates dnsmasq asynchronously after the500 # subnet-update API call returns.501 ssh_client.renew_lease(fixed_ip=floating_ip['fixed_ip_address'])502 if ssh_client.get_dns_servers() != [alt_dns_server]:503 LOG.debug("Failed to update DNS nameservers")504 return False505 return True506 self.assertTrue(test_utils.call_until_true(check_new_dns_server,507 renew_timeout,508 renew_delay),509 msg="DHCP renewal failed to fetch "510 "new DNS nameservers")511 @decorators.idempotent_id('f5dfcc22-45fd-409f-954c-5bd500d7890b')512 @testtools.skipUnless(CONF.network_feature_enabled.port_admin_state_change,513 "Changing a port's admin state is not supported "514 "by the test environment")515 @test.services('compute', 'network')516 def test_update_instance_port_admin_state(self):517 """Test to update admin_state_up attribute of instance port518 1. Check public and project connectivity before updating519 admin_state_up attribute of instance port to False520 2. Check public and project connectivity after updating521 admin_state_up attribute of instance port to False522 3. Check public and project connectivity after updating523 admin_state_up attribute of instance port to True524 """525 self._setup_network_and_servers()526 floating_ip, server = self.floating_ip_tuple527 server_id = server['id']528 port_id = self._list_ports(device_id=server_id)[0]['id']529 server_pip = server['addresses'][self.network['name']][0]['addr']530 server2 = self._create_server(self.network)531 server2_fip = self.create_floating_ip(server2)532 private_key = self._get_server_key(server2)533 ssh_client = self.get_remote_client(server2_fip['floating_ip_address'],534 private_key=private_key)535 self.check_public_network_connectivity(536 should_connect=True, msg="before updating "537 "admin_state_up of instance port to False")538 self._check_remote_connectivity(ssh_client, dest=server_pip,539 should_succeed=True)540 self.ports_client.update_port(port_id, admin_state_up=False)541 self.check_public_network_connectivity(542 should_connect=False, msg="after updating "543 "admin_state_up of instance port to False",544 should_check_floating_ip_status=False)545 self._check_remote_connectivity(ssh_client, dest=server_pip,546 should_succeed=False)547 self.ports_client.update_port(port_id, admin_state_up=True)548 self.check_public_network_connectivity(549 should_connect=True, msg="after updating "550 "admin_state_up of instance port to True")551 self._check_remote_connectivity(ssh_client, dest=server_pip,552 should_succeed=True)553 @decorators.idempotent_id('759462e1-8535-46b0-ab3a-33aa45c55aaa')554 @test.services('compute', 'network')555 def test_preserve_preexisting_port(self):556 """Test preserve pre-existing port557 Tests that a pre-existing port provided on server boot is not deleted558 if the server is deleted.559 Nova should unbind the port from the instance on delete if the port was560 not created by Nova as part of the boot request.561 We should also be able to boot another server with the same port.562 """563 # Setup the network, create a port and boot the server from that port.564 self._setup_network_and_servers(boot_with_port=True)565 _, server = self.floating_ip_tuple566 self.assertEqual(1, len(self.ports),567 'There should only be one port created for '568 'server %s.' % server['id'])569 port_id = self.ports[0]['port']570 self.assertIsNotNone(port_id,571 'Server should have been created from a '572 'pre-existing port.')573 # Assert the port is bound to the server.574 port_list = self._list_ports(device_id=server['id'],575 network_id=self.network['id'])576 self.assertEqual(1, len(port_list),577 'There should only be one port created for '578 'server %s.' % server['id'])579 self.assertEqual(port_id, port_list[0]['id'])580 # Delete the server.581 self.servers_client.delete_server(server['id'])582 waiters.wait_for_server_termination(self.servers_client, server['id'])583 # Assert the port still exists on the network but is unbound from584 # the deleted server.585 port = self.ports_client.show_port(port_id)['port']586 self.assertEqual(self.network['id'], port['network_id'])587 self.assertEqual('', port['device_id'])588 self.assertEqual('', port['device_owner'])589 # Boot another server with the same port to make sure nothing was590 # left around that could cause issues.591 server = self._create_server(self.network, port['id'])592 port_list = self._list_ports(device_id=server['id'],593 network_id=self.network['id'])594 self.assertEqual(1, len(port_list),595 'There should only be one port created for '596 'server %s.' % server['id'])597 self.assertEqual(port['id'], port_list[0]['id'])598 @test.requires_ext(service='network', extension='l3_agent_scheduler')599 @decorators.idempotent_id('2e788c46-fb3f-4ac9-8f82-0561555bea73')600 @test.services('compute', 'network')601 def test_router_rescheduling(self):602 """Tests that router can be removed from agent and add to a new agent.603 1. Verify connectivity604 2. Remove router from all l3-agents605 3. Verify connectivity is down606 4. Assign router to new l3-agent (or old one if no new agent is607 available)608 5. Verify connectivity609 """610 # TODO(yfried): refactor this test to be used for other agents (dhcp)611 # as well612 list_hosts = (self.admin_manager.routers_client.613 list_l3_agents_hosting_router)614 schedule_router = (self.admin_manager.network_agents_client.615 create_router_on_l3_agent)616 unschedule_router = (self.admin_manager.network_agents_client.617 delete_router_from_l3_agent)618 agent_list_alive = set(a["id"] for a in619 self._list_agents(agent_type="L3 agent") if620 a["alive"] is True)621 self._setup_network_and_servers()622 # NOTE(kevinbenton): we have to use the admin credentials to check623 # for the distributed flag because self.router only has a project view.624 admin = self.admin_manager.routers_client.show_router(625 self.router['id'])626 if admin['router'].get('distributed', False):627 msg = "Rescheduling test does not apply to distributed routers."628 raise self.skipException(msg)629 self.check_public_network_connectivity(should_connect=True)630 # remove resource from agents631 hosting_agents = set(a["id"] for a in632 list_hosts(self.router['id'])['agents'])633 no_migration = agent_list_alive == hosting_agents634 LOG.info("Router will be assigned to {mig} hosting agent".635 format(mig="the same" if no_migration else "a new"))636 for hosting_agent in hosting_agents:637 unschedule_router(hosting_agent, self.router['id'])638 self.assertNotIn(hosting_agent,639 [a["id"] for a in640 list_hosts(self.router['id'])['agents']],641 'unscheduling router failed')642 # verify resource is un-functional643 self.check_public_network_connectivity(644 should_connect=False,645 msg='after router unscheduling',646 )647 # schedule resource to new agent648 target_agent = list(hosting_agents if no_migration else649 agent_list_alive - hosting_agents)[0]650 schedule_router(target_agent,651 router_id=self.router['id'])652 self.assertEqual(653 target_agent,654 list_hosts(self.router['id'])['agents'][0]['id'],655 "Router failed to reschedule. Hosting agent doesn't match "656 "target agent")657 # verify resource is functional658 self.check_public_network_connectivity(659 should_connect=True,660 msg='After router rescheduling')661 @test.requires_ext(service='network', extension='port-security')662 @testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,663 'NIC hotplug not available')664 @decorators.idempotent_id('7c0bb1a2-d053-49a4-98f9-ca1a1d849f63')665 @test.services('compute', 'network')666 def test_port_security_macspoofing_port(self):667 """Tests port_security extension enforces mac spoofing668 Neutron security groups always apply anti-spoof rules on the VMs. This669 allows traffic to originate and terminate at the VM as expected, but670 prevents traffic to pass through the VM. Anti-spoof rules are not671 required in cases where the VM routes traffic through it.672 The test steps are :673 1. Create a new network.674 2. Connect (hotplug) the VM to a new network.675 3. Check the VM can ping a server on the new network ("peer")676 4. Spoof the mac address of the new VM interface.677 5. Check the Security Group enforces mac spoofing and blocks pings via678 spoofed interface (VM cannot ping the peer).679 6. Disable port-security of the spoofed port- set the flag to false.680 7. Retest 3rd step and check that the Security Group allows pings via681 the spoofed interface.682 """683 spoof_mac = "00:00:00:00:00:01"684 # Create server685 self._setup_network_and_servers()686 self.check_public_network_connectivity(should_connect=True)687 self._create_new_network()688 self._hotplug_server()689 fip, server = self.floating_ip_tuple690 new_ports = self._list_ports(device_id=server["id"],691 network_id=self.new_net["id"])692 spoof_port = new_ports[0]693 private_key = self._get_server_key(server)694 ssh_client = self.get_remote_client(fip['floating_ip_address'],695 private_key=private_key)696 spoof_nic = ssh_client.get_nic_name_by_mac(spoof_port["mac_address"])697 peer = self._create_server(self.new_net)698 peer_address = peer['addresses'][self.new_net['name']][0]['addr']699 self._check_remote_connectivity(ssh_client, dest=peer_address,700 nic=spoof_nic, should_succeed=True)701 ssh_client.set_mac_address(spoof_nic, spoof_mac)...

Full Screen

Full Screen

LdapNetwork.py

Source:LdapNetwork.py Github

copy

Full Screen

...51 self._remove_old_network()52 forward_zone = self._find_forward_zone()53 reverse_zone = self._find_reverse_zone()54 dhcp_service = self._find_dhcp_service()55 self._create_new_network(forward_zone, reverse_zone, dhcp_service)56 def _remove_old_network(self):57 network_dn = "cn=default,cn=networks,%(ldap/base)s" % self.changeset.ucr58 network_module = modules.get("networks/network")59 modules.init(self.ldap, self.position, network_module)60 try:61 network = univention.admin.objects.get(network_module, None, self.ldap, self.position, network_dn)62 except noObject:63 return64 self.logger.info("Removing '%s'...", network_dn)65 if not self.changeset.no_act:66 network.remove()67 def _find_forward_zone(self):68 forward_module = modules.get("dns/forward_zone")69 modules.init(self.ldap, self.position, forward_module)70 forward_zones = forward_module.lookup(None, self.ldap, "zone=%(domainname)s" % self.changeset.ucr)71 if forward_zones:72 return forward_zones[0].dn73 def _find_reverse_zone(self):74 new_default = self.changeset.new_interfaces.get_default_ipv4_address()75 reverse_module = modules.get("dns/reverse_zone")76 modules.init(self.ldap, self.position, reverse_module)77 reverse_zones = reverse_module.lookup(None, self.ldap, None)78 for zone in reverse_zones:79 zone.open() # may be unneeded80 network = convert_udm_subnet_to_network(zone.info["subnet"])81 if new_default in network:82 return zone.dn83 def _find_dhcp_service(self):84 dhcp_module = modules.get("dhcp/service")85 modules.init(self.ldap, self.position, dhcp_module)86 dhcp_services = dhcp_module.lookup(None, self.ldap, None)87 if dhcp_services:88 return dhcp_services[0].dn89 def _create_new_network(self, forward_zone, reverse_zone, dhcp_service):90 ipv4 = self.changeset.new_interfaces.get_default_ipv4_address()91 network_position = uldap.position(self.position.getDn())92 network_position.setDn("cn=networks,%(ldap/base)s" % self.changeset.ucr)93 network_module = modules.get("networks/network")94 modules.init(self.ldap, self.position, network_module)95 network = network_module.object(None, self.ldap, network_position)96 network.info["name"] = "default"97 network.info["network"] = str(ipv4.network)98 network.info["netmask"] = str(ipv4.netmask)99 if forward_zone:100 network.info["dnsEntryZoneForward"] = forward_zone101 if reverse_zone:102 network.info["dnsEntryZoneReverse"] = reverse_zone103 if dhcp_service:...

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