def setUp(self):
     source_root = os.path.dirname(os.path.realpath(__file__))
     self.source_root = Path(source_root)
     root_path = get_root_path() / "test_projectcsv"
     self.serial_no = self.serial_no = "123"
     by_serial_no = False
     self.path = SavePath(root_path, self.serial_no, by_serial_no)
Example #2
0
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
Example #3
0
 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()
class TestProjectCsv(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_projectcsv"
        self.serial_no = self.serial_no = "123"
        by_serial_no = False
        self.path = SavePath(root_path, self.serial_no, by_serial_no)

    def test_generate(self):
        self.path.mkdirs()
        data_path = self.source_root / "fixtures" / "data"
        data_file = data_path / 'full_data.json'
        data = None
        with open(str(data_file), 'r') as f:
            data = json.load(f, object_pairs_hook=OrderedDict)
        filename = self.path.root_path / "cumulative.csv"
        filename = str(filename)
        projectcsv.generate(filename, self.serial_no, data)
Example #5
0
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 setUp(self):
     root_path = get_root_path() / "test_diagram"
     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 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 test_cd_up(self):
     path = SavePath('save/path', 'SerialNo', False)
     path.cd_up()
     self.assertEqual(str(path), 'save')
 def test_cd(self):
     path = SavePath('save/path', 'SerialNo', False)
     path.cd('dir?')
     self.assertEqual(str(path), str(Path('save/path') / 'dir~'))
 def test_by_serial_no(self):
     path = SavePath('/save/path', 'SerialNo')
     self.assertEqual(str(path), str(Path('/save/path') / 'SerialNo'))
 def test_expand_user(self):
     path = SavePath('~', 'SerialNo', False)
     self.assertEqual(str(path), os.path.expanduser('~'))
 def test_make_safe_str(self):
     unsafe_str = "/\\:*?\"<>|"
     safe_str = SavePath.make_safe_str(unsafe_str)
     self.assertEqual(safe_str, '~~~~~~~~~')
Example #13
0
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
Example #14
0
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)