mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 04:42:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | |
| # SPDX-License-Identifier: Unlicense OR CC0-1.0
 | |
| """
 | |
| Test case for iperf example.
 | |
| 
 | |
| This test case might have problem running on windows:
 | |
| 
 | |
| - use `sudo killall iperf` to force kill iperf, didn't implement windows version
 | |
| 
 | |
| The test env wifi_iperf do need the following config::
 | |
| 
 | |
|   wifi_iperf:
 | |
|     ap_ssid: "myssid"
 | |
|     ap_password: "mypassword"
 | |
|     pc_nic: "eth1"
 | |
| 
 | |
| """
 | |
| import os
 | |
| from typing import Callable
 | |
| 
 | |
| import pytest
 | |
| from common_test_methods import get_env_config_variable
 | |
| from common_test_methods import get_host_ip_by_interface
 | |
| from idf_iperf_test_util import IperfUtility
 | |
| from pytest_embedded import Dut
 | |
| 
 | |
| # configurations
 | |
| RETRY_COUNT_FOR_BEST_PERFORMANCE = 2
 | |
| NO_BANDWIDTH_LIMIT = -1  # iperf send bandwith is not limited
 | |
| 
 | |
| # Use default value `99` for config with best performance.
 | |
| BEST_PERFORMANCE_CONFIG = '99'
 | |
| 
 | |
| 
 | |
| @pytest.mark.esp32
 | |
| @pytest.mark.temp_skip_ci(targets=['esp32s2', 'esp32c3', 'esp32s3'], reason='lack of runners (run only for ESP32)')
 | |
| @pytest.mark.timeout(1200)
 | |
| @pytest.mark.wifi_iperf
 | |
| @pytest.mark.parametrize('config', [
 | |
|     BEST_PERFORMANCE_CONFIG
 | |
| ], indirect=True)
 | |
| def test_wifi_throughput_basic(
 | |
|     dut: Dut,
 | |
|     log_performance: Callable[[str, str], None],
 | |
|     check_performance: Callable[[str, float, str], None],
 | |
| ) -> None:
 | |
|     """
 | |
|     steps: |
 | |
|       1. test TCP tx rx and UDP tx rx throughput
 | |
|       2. compare with the pre-defined pass standard
 | |
|     """
 | |
|     # 1. wait for DUT
 | |
|     dut.expect('iperf>')
 | |
| 
 | |
|     # 2. preparing
 | |
|     env_name = 'wifi_iperf'
 | |
|     pc_nic = get_env_config_variable(env_name, 'pc_nic')
 | |
|     pc_nic_ip = get_host_ip_by_interface(pc_nic)
 | |
|     pc_iperf_log_file = os.path.join(dut.logdir, 'pc_iperf_log.md')
 | |
|     ap_info = {
 | |
|         'ssid': get_env_config_variable(env_name, 'ap_ssid'),
 | |
|         'password': get_env_config_variable(env_name, 'ap_password'),
 | |
|     }
 | |
| 
 | |
|     test_result = {
 | |
|         'tcp_tx': IperfUtility.TestResult('tcp', 'tx', BEST_PERFORMANCE_CONFIG),
 | |
|         'tcp_rx': IperfUtility.TestResult('tcp', 'rx', BEST_PERFORMANCE_CONFIG),
 | |
|         'udp_tx': IperfUtility.TestResult('udp', 'tx', BEST_PERFORMANCE_CONFIG),
 | |
|         'udp_rx': IperfUtility.TestResult('udp', 'rx', BEST_PERFORMANCE_CONFIG),
 | |
|     }
 | |
| 
 | |
|     test_utility = IperfUtility.IperfTestUtility(dut, BEST_PERFORMANCE_CONFIG, ap_info['ssid'], ap_info['password'],
 | |
|                                                  pc_nic_ip, pc_iperf_log_file, test_result)
 | |
| 
 | |
|     # 3. run test for TCP Tx, Rx and UDP Tx, Rx
 | |
|     for _ in range(RETRY_COUNT_FOR_BEST_PERFORMANCE):
 | |
|         test_utility.run_all_cases(0, NO_BANDWIDTH_LIMIT)
 | |
| 
 | |
|     # 4. log performance and compare with pass standard
 | |
|     for throughput_type in test_result:
 | |
|         log_performance('{}_throughput'.format(throughput_type),
 | |
|                         '{:.02f} Mbps'.format(test_result[throughput_type].get_best_throughput()))
 | |
| 
 | |
|     # do check after logging, otherwise test will exit immediately if check fail, some performance can't be logged.
 | |
|     for throughput_type in test_result:
 | |
|         check_performance('{}_throughput'.format(throughput_type),
 | |
|                           test_result[throughput_type].get_best_throughput(), dut.target)
 | 
