Measurement¶
This is an example of how measurements can be saved in tests.
The set_case_measurement function allows to save measurement result to database. The code for this example can be seen inside the hardpy package Measurement.
how to start¶
- Launch
hardpy init measurement. - Launch CouchDB instance.
- Modify the files described below.
- Launch
hardpy run measurement.
test_1.py¶
import pytest
from hardpy import ComparisonOperation as CompOp, NumericMeasurement, set_case_measurement
pytestmark = pytest.mark.module_name("Numeric measurement")
@pytest.mark.case_name("Basic numeric operations")
def test_basic_numeric_operations():
meas0 = NumericMeasurement(value=1.0)
set_case_measurement(meas0)
meas1 = NumericMeasurement(value=10, operation=CompOp.EQ, comparison_value=10)
set_case_measurement(meas1)
meas2 = NumericMeasurement(value=9, operation=CompOp.EQ, comparison_value=10)
set_case_measurement(meas2)
meas3 = NumericMeasurement(value=5, operation=CompOp.NE, comparison_value=3)
set_case_measurement(meas3)
meas4 = NumericMeasurement(value=7, operation=CompOp.GELE, lower_limit=5, upper_limit=10)
set_case_measurement(meas4)
assert meas1.result
assert meas2.result, "value is not equal to 10"
assert meas3.result
assert meas4.result
@pytest.mark.case_name("Advanced numeric measurements")
def test_advanced_numeric_measurements():
voltage_meas = NumericMeasurement(
name="Voltage",
value=1.2,
unit="V",
operation=CompOp.GELE,
lower_limit=1.0,
upper_limit=1.5,
)
set_case_measurement(voltage_meas)
temperature_meas = NumericMeasurement(
name="Temperature",
value=23.5,
unit="°C",
operation=CompOp.GELE,
lower_limit=20,
upper_limit=25,
)
set_case_measurement(temperature_meas)
percentage_meas = NumericMeasurement(
value=98.6,
unit="%",
operation=CompOp.GE,
comparison_value=95,
)
set_case_measurement(percentage_meas)
minutes_meas = NumericMeasurement(
name="Time",
value=30,
unit="′",
operation=CompOp.EQ,
comparison_value=30,
)
set_case_measurement(minutes_meas)
assert all(
[
voltage_meas.result,
temperature_meas.result,
percentage_meas.result,
minutes_meas.result,
],
)
@pytest.mark.case_name("Failed numeric measurements")
def test_failed_numeric_measurements():
high_voltage_meas = NumericMeasurement(
name="High Voltage",
value=15.0,
unit="V",
operation=CompOp.LE,
comparison_value=12.0,
)
set_case_measurement(high_voltage_meas)
low_temp_meas = NumericMeasurement(
name="Low Temp",
value=-10,
unit="°C",
operation=CompOp.GELE,
lower_limit=0,
upper_limit=50,
)
set_case_measurement(low_temp_meas)
raw_meas = NumericMeasurement(name="Raw Value", value=42.0)
set_case_measurement(raw_meas)
rad_meas = NumericMeasurement(value=3.14, unit="rad")
set_case_measurement(rad_meas)
assert not high_voltage_meas.result, "Voltage too high"
assert not low_temp_meas.result, "Temperature too low"
test_2.py¶
import pytest
from hardpy import (
ComparisonOperation as CompOp,
StringMeasurement,
set_case_measurement,
)
pytestmark = pytest.mark.module_name("String measurement")
@pytest.mark.case_name("Basic string operations")
def test_basic_string_operations():
meas1 = StringMeasurement(
value="1.2.1",
operation=CompOp.EQ,
comparison_value="1.2.1",
)
set_case_measurement(meas1)
meas2 = StringMeasurement(
value="ABC",
operation=CompOp.EQ,
comparison_value="abc",
)
set_case_measurement(meas2)
meas3 = StringMeasurement(
value="ABC",
operation=CompOp.EQ,
casesensitive=False,
comparison_value="abc",
)
set_case_measurement(meas3)
assert meas1.result
assert not meas2.result
assert meas3.result
@pytest.mark.case_name("Advanced string measurements")
def test_advanced_string_measurements():
simple_str_meas = StringMeasurement(
value="abc", operation=CompOp.EQ, comparison_value="abc"
)
set_case_measurement(simple_str_meas)
serial_meas = StringMeasurement(
name="Serial Number",
value="SN123456",
operation=CompOp.NE,
comparison_value="SN000000",
)
set_case_measurement(serial_meas)
failed_str_meas = StringMeasurement(
name="Wrong Code", value="FAIL", operation=CompOp.EQ, comparison_value="PASS"
)
set_case_measurement(failed_str_meas)
info_meas = StringMeasurement(value="INFO")
set_case_measurement(info_meas)
assert simple_str_meas.result
assert serial_meas.result
assert not failed_str_meas.result, "Wrong status code"
test_3.py¶
import pytest
from hardpy import (
ComparisonOperation as CompOp,
NumericMeasurement,
set_case_measurement,
)
pytestmark = pytest.mark.module_name("All comparison operations test")
@pytest.mark.case_name("Operation types with brackets")
def test_all_operation_types_with_brackets():
meas_lt = NumericMeasurement(value=4, operation=CompOp.LT, comparison_value=5)
set_case_measurement(meas_lt)
meas_gelt = NumericMeasurement(
value=3,
operation=CompOp.GELT,
lower_limit=2,
upper_limit=4,
)
set_case_measurement(meas_gelt)
meas_legt = NumericMeasurement(
value=1,
operation=CompOp.LEGT,
lower_limit=2,
upper_limit=4,
)
set_case_measurement(meas_legt)
assert meas_lt.result
assert meas_gelt.result
assert meas_legt.result
@pytest.mark.case_name("Edge cases with units")
def test_edge_cases_with_units():
meas_percent = NumericMeasurement(
name="Efficiency",
value=95.5,
unit="%",
operation=CompOp.GELE,
lower_limit=90,
upper_limit=100,
)
set_case_measurement(meas_percent)
meas_degrees = NumericMeasurement(
name="Angle",
value=45,
unit="°",
operation=CompOp.GTLT,
lower_limit=0,
upper_limit=90,
)
set_case_measurement(meas_degrees)
meas_minutes = NumericMeasurement(
name="Duration",
value=30,
unit="′",
operation=CompOp.LE,
comparison_value=60,
)
set_case_measurement(meas_minutes)
meas_voltage = NumericMeasurement(
name="Voltage",
value=3.3,
unit="V",
operation=CompOp.GELT,
lower_limit=3.0,
upper_limit=3.6,
)
set_case_measurement(meas_voltage)
assert meas_percent.result
assert meas_degrees.result
assert meas_minutes.result
assert meas_voltage.result
@pytest.mark.case_name("Boundary value tests")
def test_boundary_value_tests():
meas_gt_boundary = NumericMeasurement(
value=2.1,
operation=CompOp.GTLT,
lower_limit=2,
upper_limit=4,
)
set_case_measurement(meas_gt_boundary)
meas_ge_boundary = NumericMeasurement(
value=2,
operation=CompOp.GELE,
lower_limit=2,
upper_limit=4,
)
set_case_measurement(meas_ge_boundary)
meas_mixed_boundary = NumericMeasurement(
value=4,
operation=CompOp.GTLE,
lower_limit=2,
upper_limit=4,
)
set_case_measurement(meas_mixed_boundary)
assert meas_gt_boundary.result
assert meas_ge_boundary.result
assert meas_mixed_boundary.result