diff --git a/tests/nvs/cfg.json b/tests/nvs/cfg.json
new file mode 100644
index 00000000000..c1b23d46842
--- /dev/null
+++ b/tests/nvs/cfg.json
@@ -0,0 +1,39 @@
+{
+  "targets": [
+    {
+      "name": "esp32",
+      "fqbn":[
+        "espressif:esp32:esp32:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=dio",
+        "espressif:esp32:esp32:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=dout,FlashFreq=40",
+        "espressif:esp32:esp32:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=qio",
+        "espressif:esp32:esp32:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=qout,FlashFreq=40"
+      ]
+    },
+    {
+      "name": "esp32s2",
+      "fqbn": [
+        "espressif:esp32:esp32s2:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=dio",
+        "espressif:esp32:esp32s2:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=dout,FlashFreq=40",
+        "espressif:esp32:esp32s2:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=qio",
+        "espressif:esp32:esp32s2:PSRAM=enabled,PartitionScheme=huge_app,FlashMode=qout,FlashFreq=40"
+      ]
+    },
+    {
+      "name": "esp32c3",
+      "fqbn": [
+        "espressif:esp32:esp32c3:PartitionScheme=huge_app,FlashMode=dio",
+        "espressif:esp32:esp32c3:PartitionScheme=huge_app,FlashMode=dout,FlashFreq=40",
+        "espressif:esp32:esp32c3:PartitionScheme=huge_app,FlashMode=qio",
+        "espressif:esp32:esp32c3:PartitionScheme=huge_app,FlashMode=qout,FlashFreq=40"
+      ]
+    },
+    {
+      "name": "esp32s3",
+      "fqbn": [
+        "espressif:esp32:esp32s3:PSRAM=opi,USBMode=default,PartitionScheme=huge_app,FlashMode=qio",
+        "espressif:esp32:esp32s3:PSRAM=opi,USBMode=default,PartitionScheme=huge_app,FlashMode=qio120",
+        "espressif:esp32:esp32s3:PSRAM=opi,USBMode=default,PartitionScheme=huge_app,FlashMode=dio"
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/nvs/nvs.ino b/tests/nvs/nvs.ino
new file mode 100644
index 00000000000..7bfe25ff00b
--- /dev/null
+++ b/tests/nvs/nvs.ino
@@ -0,0 +1,36 @@
+#include <Preferences.h>
+
+Preferences preferences;
+
+void setup() {
+  Serial.begin(115200);
+ 
+  while (!Serial) {
+    ;
+  }
+
+  preferences.begin("my-app", false);
+
+  // Get the counter value, if the key does not exist, return a default value of 0
+  unsigned int counter = preferences.getUInt("counter", 0);
+
+  // Print the counter to Serial Monitor
+  Serial.printf("Current counter value: %u\n", counter);
+
+  // Increase counter by 1
+  counter++;
+
+  // Store the counter to the Preferences
+  preferences.putUInt("counter", counter);
+
+  // Close the Preferences
+  preferences.end();
+  
+  // Wait 1 second
+  delay(1000);
+
+  // Restart ESP
+  ESP.restart();
+}
+
+void loop() {}
diff --git a/tests/nvs/test_nvs.py b/tests/nvs/test_nvs.py
new file mode 100644
index 00000000000..656ab544ee2
--- /dev/null
+++ b/tests/nvs/test_nvs.py
@@ -0,0 +1,7 @@
+def test_nvs(dut):
+     dut.expect('Current counter value: 0')
+     dut.expect('Current counter value: 1')
+     dut.expect('Current counter value: 2')
+     dut.expect('Current counter value: 3')
+     dut.expect('Current counter value: 4')
+     dut.expect('Current counter value: 5')
\ No newline at end of file