/
devsec
/
anothertap
Обзор
Документация
Войти
/
devsec
/
anothertap
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
examples/create_examples.py
709 строк
26 KB
devsec
clean code gitignore
24 авг 2025, 21:27
24 авг 2025, 21:27
75a9527
Код
Авторство
О чём код?
""" Example devices and test plans for demonstrating the Test Automation Platform """ import sys import json from pathlib import Path from datetime import datetime # Add the src directory to Python path src_path = Path(__file__).parent.parent / "src" sys.path.insert(0, str(src_path)) from models.device import Device, ConnectionType, DeviceStatus from models.test_plan import TestPlan, PlanStatus from models.test_step import TestStep, StepType, StepStatus def create_example_devices(): """Create example measurement devices""" devices = [] # Example 1: Network-connected multimeter multimeter = Device( name="Keysight 34461A Multimeter", manufacturer="Keysight", model="34461A", serial_number="MY12345678", connection_type=ConnectionType.TCPIP, connection_string="TCPIP::192.168.1.100::INSTR", description="6.5-digit bench digital multimeter with Truevolt technology", capabilities={ "voltage_ranges": ["100mV", "1V", "10V", "100V", "1000V"], "current_ranges": ["1mA", "10mA", "100mA", "1A", "3A"], "resistance_ranges": ["100Ω", "1kΩ", "10kΩ", "100kΩ", "1MΩ", "10MΩ", "100MΩ"], "measurement_types": ["DC Voltage", "AC Voltage", "DC Current", "AC Current", "Resistance", "Temperature"] } ) devices.append(multimeter) # Example 2: Function generator function_gen = Device( name="Rigol DG1032Z Function Generator", manufacturer="Rigol", model="DG1032Z", serial_number="DG1A000000001", connection_type=ConnectionType.TCPIP, connection_string="TCPIP::192.168.1.101::INSTR", description="30 MHz Function/Arbitrary Waveform Generator", capabilities={ "waveforms": ["Sine", "Square", "Ramp", "Pulse", "Noise", "Arbitrary"], "frequency_range": "1µHz to 30MHz", "amplitude_range": "1mVpp to 10Vpp", "channels": 2 } ) devices.append(function_gen) # Example 3: Power supply power_supply = Device( name="Keithley 2230-30-1 Power Supply", manufacturer="Keithley", model="2230-30-1", serial_number="04400001", connection_type=ConnectionType.USB, connection_string="USB0::0x05E6::0x2230::04400001::INSTR", description="Triple Channel DC Power Supply", capabilities={ "channels": 3, "voltage_range_ch1": "0-30V", "current_range_ch1": "0-1.5A", "voltage_range_ch2": "0-30V", "current_range_ch2": "0-1.5A", "voltage_range_ch3": "0-5V", "current_range_ch3": "0-5A" } ) devices.append(power_supply) # Example 4: Oscilloscope oscilloscope = Device( name="Tektronix MSO64 Oscilloscope", manufacturer="Tektronix", model="MSO64", serial_number="C010001", connection_type=ConnectionType.TCPIP, connection_string="TCPIP::192.168.1.102::INSTR", description="Mixed Signal Oscilloscope, 1 GHz, 4+16 channels", capabilities={ "bandwidth": "1GHz", "analog_channels": 4, "digital_channels": 16, "sample_rate": "6.25 GS/s", "record_length": "62.5M points" } ) devices.append(oscilloscope) # Example 5: Simulated Power Supply for Testing sim_power_supply = Device( name="Simulated Power Supply", manufacturer="Test Equipment Inc.", model="TPS-3030", serial_number="SIM123456", connection_type=ConnectionType.SIMULATION, connection_string="SIM::POWER_SUPPLY", description="Simulated programmable DC power supply for testing", simulation_mode=True, simulation_config={ "device_type": "power_supply", "max_voltage": 30.0, "max_current": 3.0, "firmware_version": "1.2.3" }, capabilities={ "voltage_range": "0-30V", "current_range": "0-3A", "simulation": True } ) devices.append(sim_power_supply) # Example 6: Simulated Multimeter for Testing sim_multimeter = Device( name="Simulated Multimeter", manufacturer="Measurement Corp.", model="DMM-1000", serial_number="SIM789012", connection_type=ConnectionType.SIMULATION, connection_string="SIM::MULTIMETER", description="Simulated digital multimeter for testing", simulation_mode=True, simulation_config={ "device_type": "multimeter", "voltage_ranges": ["100mV", "1V", "10V", "100V", "1000V"], "current_ranges": ["10mA", "100mA", "1A", "3A"], "firmware_version": "2.1.0" }, capabilities={ "measurement_types": ["DC Voltage", "AC Voltage", "DC Current", "AC Current", "Resistance"], "simulation": True } ) devices.append(sim_multimeter) # Example 7: Simulated Function Generator for Testing sim_function_gen = Device( name="Simulated Function Generator", manufacturer="Signal Systems", model="FG-2500", serial_number="SIM345678", connection_type=ConnectionType.SIMULATION, connection_string="SIM::FUNCTION_GENERATOR", description="Simulated arbitrary waveform generator for testing", simulation_mode=True, simulation_config={ "device_type": "function_generator", "max_frequency": 25000000, # 25 MHz "max_amplitude": 10.0, # 10V "waveforms": ["SIN", "SQU", "TRI", "RAMP", "NOIS"], "firmware_version": "3.0.1" }, capabilities={ "waveforms": ["Sine", "Square", "Triangle", "Ramp", "Noise"], "frequency_range": "1µHz to 25MHz", "amplitude_range": "1mVpp to 10Vpp", "simulation": True } ) devices.append(sim_function_gen) return devices def create_example_test_plans(): """Create example test plans""" test_plans = [] # Get device IDs (in real scenario, these would be loaded from device manager) device_ids = { "multimeter": "multimeter_id_placeholder", "function_gen": "function_gen_id_placeholder", "power_supply": "power_supply_id_placeholder", "oscilloscope": "oscilloscope_id_placeholder" } # Test Plan 1: Basic Device Communication Test basic_comm_plan = TestPlan( name="Basic Device Communication Test", description="Test basic SCPI communication with all connected devices", version="1.0.0", author="Test Engineer", category="Communication", tags=["basic", "communication", "scpi"], priority="High" ) # Add identification steps for each device devices = [ ("multimeter", "Multimeter"), ("function_gen", "Function Generator"), ("power_supply", "Power Supply"), ("oscilloscope", "Oscilloscope") ] for device_key, device_name in devices: step = TestStep( name=f"Identify {device_name}", description=f"Send *IDN? query to {device_name}", device_id=device_ids[device_key], step_type=StepType.SCPI_QUERY, scpi_command="*IDN?", timeout=5.0 ) basic_comm_plan.steps.append(step) test_plans.append(basic_comm_plan) # Test Plan 2: DC Voltage Measurement voltage_test_plan = TestPlan( name="DC Voltage Measurement Test", description="Test DC voltage measurement capabilities using function generator and multimeter", version="1.0.0", author="Test Engineer", category="Measurement", tags=["voltage", "measurement", "dc"], priority="Normal" ) # Setup steps setup_steps = [ TestStep( name="Reset Function Generator", description="Send reset command to function generator", device_id=device_ids["function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="*RST" ), TestStep( name="Configure Function Generator", description="Set function generator to DC output", device_id=device_ids["function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="SOUR1:FUNC DC" ), TestStep( name="Set Output Voltage to 1V", description="Set function generator output to 1V DC", device_id=device_ids["function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="SOUR1:VOLT:OFFS 1.0" ), TestStep( name="Enable Output", description="Turn on function generator output", device_id=device_ids["function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="OUTP1 ON" ) ] voltage_test_plan.setup_steps = setup_steps # Main test steps main_steps = [ TestStep( name="Configure Multimeter for DC Voltage", description="Set multimeter to DC voltage measurement mode", device_id=device_ids["multimeter"], step_type=StepType.SCPI_COMMAND, scpi_command="CONF:VOLT:DC 10,0.001" ), TestStep( name="Wait for Settling", description="Wait for signal to settle", device_id="", step_type=StepType.DELAY, parameters={"delay_time": 2.0} ), TestStep( name="Measure DC Voltage", description="Read DC voltage measurement from multimeter", device_id=device_ids["multimeter"], step_type=StepType.SCPI_QUERY, scpi_command="READ?", validation_rules=[ {"type": "numeric_range", "min": 0.95, "max": 1.05} ] ), TestStep( name="Change Voltage to 2V", description="Set function generator output to 2V DC", device_id=device_ids["function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="SOUR1:VOLT:OFFS 2.0" ), TestStep( name="Wait for Settling", description="Wait for signal to settle", device_id="", step_type=StepType.DELAY, parameters={"delay_time": 1.0} ), TestStep( name="Measure DC Voltage 2V", description="Read DC voltage measurement from multimeter", device_id=device_ids["multimeter"], step_type=StepType.SCPI_QUERY, scpi_command="READ?", validation_rules=[ {"type": "numeric_range", "min": 1.95, "max": 2.05} ] ) ] voltage_test_plan.steps = main_steps # Teardown steps teardown_steps = [ TestStep( name="Disable Output", description="Turn off function generator output", device_id=device_ids["function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="OUTP1 OFF" ), TestStep( name="Reset Function Generator", description="Reset function generator to default state", device_id=device_ids["function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="*RST" ) ] voltage_test_plan.teardown_steps = teardown_steps test_plans.append(voltage_test_plan) # Test Plan 3: Power Supply Output Test power_test_plan = TestPlan( name="Power Supply Output Test", description="Test power supply output accuracy using multimeter", version="1.0.0", author="Test Engineer", category="Power", tags=["power", "supply", "output", "accuracy"], priority="Normal", repeat_count=3 # Run 3 times for repeatability ) # Test multiple voltage levels voltage_levels = [5.0, 12.0, 24.0] for voltage in voltage_levels: # Set voltage power_test_plan.steps.append(TestStep( name=f"Set Power Supply to {voltage}V", description=f"Set power supply channel 1 to {voltage}V", device_id=device_ids["power_supply"], step_type=StepType.SCPI_COMMAND, scpi_command=f"SOUR1:VOLT {voltage}" )) # Enable output power_test_plan.steps.append(TestStep( name=f"Enable Output for {voltage}V Test", description="Enable power supply output", device_id=device_ids["power_supply"], step_type=StepType.SCPI_COMMAND, scpi_command="OUTP1 ON" )) # Wait for settling power_test_plan.steps.append(TestStep( name="Wait for Voltage Settling", description="Wait for output voltage to settle", device_id="", step_type=StepType.DELAY, parameters={"delay_time": 1.0} )) # Measure voltage power_test_plan.steps.append(TestStep( name=f"Measure {voltage}V Output", description=f"Measure power supply output with multimeter", device_id=device_ids["multimeter"], step_type=StepType.SCPI_QUERY, scpi_command="READ?", validation_rules=[ {"type": "numeric_range", "min": voltage * 0.98, "max": voltage * 1.02} ] )) # Disable output power_test_plan.steps.append(TestStep( name=f"Disable Output after {voltage}V Test", description="Disable power supply output", device_id=device_ids["power_supply"], step_type=StepType.SCPI_COMMAND, scpi_command="OUTP1 OFF" )) test_plans.append(power_test_plan) # Test Plan 3: Simulation Test simulation_test_plan = TestPlan( name="Simulation Demonstration Test", description="Demonstrate testing capabilities using simulated devices", version="1.0.0", author="Test Engineer", category="Simulation", tags=["simulation", "demo", "testing"], priority="Low" ) # Add simulated device IDs (placeholders) sim_device_ids = { "sim_power_supply": "sim_power_supply_id_placeholder", "sim_multimeter": "sim_multimeter_id_placeholder", "sim_function_gen": "sim_function_gen_id_placeholder" } # Test simulated power supply sim_power_steps = [ TestStep( name="Reset Simulated Power Supply", description="Send reset command to simulated power supply", device_id=sim_device_ids["sim_power_supply"], step_type=StepType.SCPI_COMMAND, scpi_command="*RST" ), TestStep( name="Check Power Supply Identity", description="Query simulated power supply identification", device_id=sim_device_ids["sim_power_supply"], step_type=StepType.SCPI_QUERY, scpi_command="*IDN?" ), TestStep( name="Set Voltage to 12V", description="Set simulated power supply voltage to 12V", device_id=sim_device_ids["sim_power_supply"], step_type=StepType.SCPI_COMMAND, scpi_command="VOLT 12.0" ), TestStep( name="Enable Power Supply Output", description="Turn on simulated power supply output", device_id=sim_device_ids["sim_power_supply"], step_type=StepType.SCPI_COMMAND, scpi_command="OUTP ON" ), TestStep( name="Measure Output Voltage", description="Measure simulated power supply output voltage", device_id=sim_device_ids["sim_power_supply"], step_type=StepType.SCPI_QUERY, scpi_command="VOLT:MEAS?" ), TestStep( name="Measure Output Current", description="Measure simulated power supply output current", device_id=sim_device_ids["sim_power_supply"], step_type=StepType.SCPI_QUERY, scpi_command="CURR:MEAS?" ) ] # Test simulated multimeter sim_multimeter_steps = [ TestStep( name="Reset Simulated Multimeter", description="Send reset command to simulated multimeter", device_id=sim_device_ids["sim_multimeter"], step_type=StepType.SCPI_COMMAND, scpi_command="*RST" ), TestStep( name="Configure for DC Voltage", description="Configure simulated multimeter for DC voltage measurement", device_id=sim_device_ids["sim_multimeter"], step_type=StepType.SCPI_COMMAND, scpi_command="CONF:VOLT:DC" ), TestStep( name="Measure DC Voltage", description="Perform DC voltage measurement with simulated multimeter", device_id=sim_device_ids["sim_multimeter"], step_type=StepType.SCPI_QUERY, scpi_command="MEAS:VOLT:DC?" ), TestStep( name="Configure for Resistance", description="Configure simulated multimeter for resistance measurement", device_id=sim_device_ids["sim_multimeter"], step_type=StepType.SCPI_COMMAND, scpi_command="CONF:RES" ), TestStep( name="Measure Resistance", description="Perform resistance measurement with simulated multimeter", device_id=sim_device_ids["sim_multimeter"], step_type=StepType.SCPI_QUERY, scpi_command="MEAS:RES?" ) ] # Test simulated function generator sim_function_gen_steps = [ TestStep( name="Reset Simulated Function Generator", description="Send reset command to simulated function generator", device_id=sim_device_ids["sim_function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="*RST" ), TestStep( name="Set Sine Wave", description="Configure simulated function generator for sine wave", device_id=sim_device_ids["sim_function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="FUNC SIN" ), TestStep( name="Set Frequency to 1kHz", description="Set simulated function generator frequency to 1kHz", device_id=sim_device_ids["sim_function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="FREQ 1000" ), TestStep( name="Set Amplitude to 2Vpp", description="Set simulated function generator amplitude to 2Vpp", device_id=sim_device_ids["sim_function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="VOLT 2.0" ), TestStep( name="Enable Function Generator Output", description="Turn on simulated function generator output", device_id=sim_device_ids["sim_function_gen"], step_type=StepType.SCPI_COMMAND, scpi_command="OUTP ON" ), TestStep( name="Query Current Frequency", description="Query current frequency setting", device_id=sim_device_ids["sim_function_gen"], step_type=StepType.SCPI_QUERY, scpi_command="FREQ?" ) ] # Combine all simulation steps simulation_test_plan.steps.extend(sim_power_steps) simulation_test_plan.steps.extend(sim_multimeter_steps) simulation_test_plan.steps.extend(sim_function_gen_steps) test_plans.append(simulation_test_plan) return test_plans def save_examples_to_files(): """Save example devices and test plans to JSON files""" # Create examples directory examples_dir = Path("examples") examples_dir.mkdir(exist_ok=True) # Save example devices devices = create_example_devices() devices_data = { "devices": [{ 'id': device.id, 'name': device.name, 'manufacturer': device.manufacturer, 'model': device.model, 'serial_number': device.serial_number, 'connection_type': device.connection_type.value, 'connection_string': device.connection_string, 'description': device.description, 'capabilities': device.capabilities, 'custom_properties': device.custom_properties, 'status': device.status.value, 'last_error': device.last_error, 'simulation_mode': getattr(device, 'simulation_mode', False), 'simulation_config': getattr(device, 'simulation_config', {}) } for device in devices], "version": "1.0.0", "created_at": datetime.now().isoformat(), "description": "Example measurement devices for Test Automation Platform" } with open(examples_dir / "example_devices.json", 'w', encoding='utf-8') as f: json.dump(devices_data, f, indent=2, ensure_ascii=False) # Save example test plans test_plans = create_example_test_plans() for i, plan in enumerate(test_plans): plan_data = { "test_plan": { 'id': plan.id, 'name': plan.name, 'description': plan.description, 'version': plan.version, 'author': plan.author, 'created_date': plan.created_date, 'modified_date': plan.modified_date, 'steps': [{ 'id': step.id, 'name': step.name, 'description': step.description, 'device_id': step.device_id, 'step_type': step.step_type.value, 'scpi_command': step.scpi_command, 'expected_response': step.expected_response, 'timeout': step.timeout, 'retry_count': step.retry_count, 'delay_before': step.delay_before, 'delay_after': step.delay_after, 'enabled': step.enabled, 'parameters': step.parameters, 'validation_rules': step.validation_rules, 'status': step.status.value, 'execution_time': step.execution_time, 'response': step.response, 'error_message': step.error_message, 'timestamp': step.timestamp } for step in plan.steps], 'setup_steps': [{ 'id': step.id, 'name': step.name, 'description': step.description, 'device_id': step.device_id, 'step_type': step.step_type.value, 'scpi_command': step.scpi_command, 'expected_response': step.expected_response, 'timeout': step.timeout, 'retry_count': step.retry_count, 'delay_before': step.delay_before, 'delay_after': step.delay_after, 'enabled': step.enabled, 'parameters': step.parameters, 'validation_rules': step.validation_rules, 'status': step.status.value, 'execution_time': step.execution_time, 'response': step.response, 'error_message': step.error_message, 'timestamp': step.timestamp } for step in plan.setup_steps], 'teardown_steps': [{ 'id': step.id, 'name': step.name, 'description': step.description, 'device_id': step.device_id, 'step_type': step.step_type.value, 'scpi_command': step.scpi_command, 'expected_response': step.expected_response, 'timeout': step.timeout, 'retry_count': step.retry_count, 'delay_before': step.delay_before, 'delay_after': step.delay_after, 'enabled': step.enabled, 'parameters': step.parameters, 'validation_rules': step.validation_rules, 'status': step.status.value, 'execution_time': step.execution_time, 'response': step.response, 'error_message': step.error_message, 'timestamp': step.timestamp } for step in plan.teardown_steps], 'stop_on_failure': plan.stop_on_failure, 'max_execution_time': plan.max_execution_time, 'repeat_count': plan.repeat_count, 'parallel_execution': plan.parallel_execution, 'tags': plan.tags, 'category': plan.category, 'priority': plan.priority, 'requirements': plan.requirements, 'custom_properties': plan.custom_properties, 'status': plan.status.value, 'current_step_index': plan.current_step_index, 'start_time': plan.start_time, 'end_time': plan.end_time, 'total_execution_time': plan.total_execution_time, 'current_iteration': plan.current_iteration, 'passed_steps': plan.passed_steps, 'failed_steps': plan.failed_steps, 'skipped_steps': plan.skipped_steps, 'error_message': plan.error_message, 'execution_log': plan.execution_log }, "version": "1.0.0", "exported_at": datetime.now().isoformat() } filename = f"example_test_plan_{i+1}_{plan.name.lower().replace(' ', '_')}.json" with open(examples_dir / filename, 'w', encoding='utf-8') as f: json.dump(plan_data, f, indent=2, ensure_ascii=False) print(f"Created {len(devices)} example devices and {len(test_plans)} example test plans in {examples_dir}") return devices, test_plans if __name__ == "__main__": # Generate example files when run directly save_examples_to_files()