def test_file_path(self): # By file type path = SavePath('save/path', 'SerialNo', False) file_path = path.file_path(extension=".jpg") self.assertEqual(file_path, str(Path('save/path') / "SerialNo.jpg")) # By serial no path = SavePath('save/path', 'SerialNo') file_path = path.file_path(filename="file?name", extension='.ext') self.assertEqual(file_path, str(Path('save/path/SerialNo') / 'file~name.ext'))
def process_dut(serial_no, settings): # Connect to VNA vna = connect_to_vna(settings['instrument']["address"]) if not vna: return None # Save path save_path = SavePath(settings["save"]["directory"], serial_no, not settings['save']['organize by file']) save_path.mkdirs() # Create scpi log save_path.cd_scpi() save_path.mkdirs() vna.open_log(save_path.file_path("SCPI Log", ".txt")) print_header(vna.log, "R&S Test Automation", rstest.version) vna.print_info() vna.is_error() vna.clear_status() # run measurement result = measure(vna, serial_no, settings) # check for errors, # close log vna.is_error() vna.clear_status() vna.close_log() return result
class TestHtml(unittest.TestCase): def setUp(self): source_root = os.path.dirname(os.path.realpath(__file__)) self.source_root = Path(source_root) root_path = get_root_path() / "test_html" serial_no = self.serial_no = "123" by_serial_no = True self.path = SavePath(root_path, serial_no, by_serial_no) vna = Vna() vna.open_tcp() vna.clear_status() vna.manual_sweep = True timeout_ms = 2 * vna.sweep_time_ms + 5000 vna.start_sweeps() vna.pause(timeout_ms) self.vna = vna self.settings = default_settings.copy() def tearDown(self): self.vna.clear_status() self.vna.close() @classmethod def tearDownClass(self): vna = Vna() vna.open_tcp() vna.close() def test_generate(self): self.path.mkdirs() data_path = self.source_root / "fixtures" / "data" data = None data_files = ['full_data'] for filename in data_files: data_file_path = str(data_path / filename) data = None with open(data_file_path + '.json', 'r') as f: data = json.load(f, object_pairs_hook=OrderedDict) generate(self.path.file_path(filename + '.html'), self.serial_no, self.settings, data)
def measure(vna, serial_no, settings): data = OrderedDict() data['timestamp'] = timestamp() data['instrument'] = OrderedDict() data['instrument']['id string'] = vna.id_string() data['instrument']['options'] = vna.options_string() path = SavePath(settings['save']['directory'], serial_no, not settings['save']['organize by file']) path.mkdirs() # Sweep, save touchstone channels = vna.channels for i in channels: channel = vna.channel(i) ports = get_ports(vna, channel) process_channel(path, channel, ports, settings) # VNA screenshot, # global pass/fail data.update(process_vna(path, vna, settings)) # Diagram screenshots, # trace csv, # limits # markers, # other (skew, prop delay) if settings.is_save_diagrams() or settings.is_save_traces(): data['diagrams'] = OrderedDict() diagrams = vna.diagrams for d in diagrams: diagram = vna.diagram(d) title = strip_limit_from_title(diagram.title) if title: print("Diagram {0}".format(title), flush=True) else: title = "Diagram {0}".format(diagram.index) print(title, flush=True) diagram_data = data['diagrams'][title] \ = process_diagram(path, diagram, settings) traces_data = diagram_data['traces'] \ = OrderedDict() if settings.is_save_traces(): for t in diagram.traces: print(" Trace {0}".format(t), flush=True) trace = diagram._vna.trace(t) name = trace.name traces_data[name] = process_trace(path, trace, settings) if not settings['save']['disable per-test limits']: diagram_limits_from_data(diagram_data) # Create summary if not settings['save']['disable html summary']: print("HTML ", end='', flush=True) path.cd_summary() path.mkdirs() generate_html(path.file_path('summary', '.html'), serial_no, settings, data) print_check() # Remove screenshot binary from data if not settings['save']['disable screenshots']: remove_screenshots(data) # Write data if not settings['save']['disable results json']: print("JSON ", end='', flush=True) path.cd_json() path.mkdirs() with open(path.file_path('summary', '.json'), 'w') as f: json.dump(data, f) print_check() if settings['save']['enable project csv']: print("CSV ", end='', flush=True) filename = path.root_path / "cumulative.csv" filename = str(filename) generate_csv(filename, serial_no, data) print_check() return data
def main(): print("") print("R&S Test Automation") print("===================\n") # For now... settings = default_settings.copy() # Connect to VNA settings["instrument"]["address"] = str(input("Enter the IP Address: ")) print() vna = connect_to_vna(settings['instrument']['address']) if not vna: sys.exit(0) # Save path save_path = SavePath(settings["save"]["directory"], '') save_path.mkdirs() # Create scpi log vna.open_log(save_path.file_path("SCPI Log.txt")) print_header(vna.log, "R&S Test Automation", rstest.version) vna.print_info() vna.is_error() vna.clear_status() print("Rohde & Schwarz {0} {1}-port\n".format(vna.properties.model, vna.properties.physical_ports)) print("-------------------\n") # Close vna connection vna.local() vna.close() vna.close_log() # Measure DUTs until user # says stop response = None while not response in ("n", "no", "q", "quit", "exit"): # serial Number serial_number = str(input("Please enter the device ID/Serial No: ")) print() result = process_dut(serial_number, settings) if not result: sys.exit(0) elif 'limits' in result: message = "DUT {0}" message = message.format(result['limits'].upper()) print(message) print("------------\n") print() # break? print() response = str(input("Measure another DUT? (Y/n): ")) response = response.lower() # end while # end main sys.exit(0)