diff --git a/tests/src/Functional/BackupMigrateEnablingTest.php b/tests/src/Functional/BackupMigrateEnablingTest.php
new file mode 100644
index 0000000..e6e00c3
--- /dev/null
+++ b/tests/src/Functional/BackupMigrateEnablingTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Drupal\Tests\backup_migrate\Functional;
+
+use Drupal\Core\Menu\MenuTreeParameters;
+use Drupal\Tests\BrowserTestBase;
+
+
+/**
+ * Checks if module enabling doesn't break the site
+ *
+ * @group backup_migrate
+ */
+class BackupMigrateEnablingTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['backup_migrate'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $strictConfigSchema = FALSE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Tests if site opens with no errors
+   */
+  public function testEnabling() {
+    $this->drupalGet('');
+    $this->assertSession()->statusCodeEquals(200);
+  }
+
+}
diff --git a/tests/src/Functional/BackupMigratePageLoadTest.php b/tests/src/Functional/BackupMigratePageLoadTest.php
new file mode 100644
index 0000000..b6db1c3
--- /dev/null
+++ b/tests/src/Functional/BackupMigratePageLoadTest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\Tests\backup_migrate\Functional;
+
+use Drupal\Core\Menu\MenuTreeParameters;
+use Drupal\Tests\BrowserTestBase;
+
+
+/**
+ * Checks if pages loads successfully
+ *
+ * @group backup_migrate
+ */
+class BackupMigratePageLoadTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['backup_migrate'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $strictConfigSchema = FALSE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Tests if site quick backup function loads
+   */
+  public function testPages() {
+
+    //Ensure backup_migrate folder exists. `admin/config/development/backup_migrate/backups` url will fail without this.
+    $path = 'private://backup_migrate/';
+    file_prepare_directory($path, FILE_CREATE_DIRECTORY);
+
+    $this->drupalLogin($this->drupalCreateUser(['perform backup', 'administer backup and migrate', 'restore from backup', 'delete backup files', 'access backup files']));
+
+    $urls = [
+      'admin/config/development/backup_migrate' => ['text' => 'QUICK BACKUP'],
+      'admin/config/development/backup_migrate/advanced' => ['text' => 'Advanced Backup'],
+      'admin/config/development/backup_migrate/restore' => ['text' => 'Restore'],
+      'admin/config/development/backup_migrate/backups' => ['text' => 'Backups'],
+      'admin/config/development/backup_migrate/schedule' => ['text' => 'Schedule'],
+      'admin/config/development/backup_migrate/schedule/add' => ['text' => 'Add schedule'],
+      'admin/config/development/backup_migrate/settings' => ['text' => 'Settings'],
+      'admin/config/development/backup_migrate/settings/add' => ['text' => 'Add settings profile'],
+      'admin/config/development/backup_migrate/settings/destination' => ['text' => 'Backup Destination'],
+      'admin/config/development/backup_migrate/settings/destination/add' => ['text' => 'Add destination'],
+      'admin/config/development/backup_migrate/settings/source' => ['text' => 'Backup sources'],
+      'admin/config/development/backup_migrate/settings/source/add' => ['text' => 'Add Backup Source'],
+    ];
+
+    foreach($urls as $url => $settings) {
+      $this->drupalGet($url);
+      $this->assertSession()->statusCodeEquals($settings['status']);
+      $this->assertSession()->pageTextContains($settings['text']);
+    }
+  }
+
+}
diff --git a/tests/src/Functional/BackupMigratePermissionsTest.php b/tests/src/Functional/BackupMigratePermissionsTest.php
new file mode 100644
index 0000000..6a5a66d
--- /dev/null
+++ b/tests/src/Functional/BackupMigratePermissionsTest.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace Drupal\Tests\backup_migrate\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests backup migrate permissions functionality.
+ *
+ * @group backup_migrate
+ */
+class BackupMigratePermissionsTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['backup_migrate'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $strictConfigSchema = FALSE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Tests access for anonymous users
+   */
+  public function testAnonymous() {
+    $this->drupalGet('admin/config/development/backup_migrate');
+    $this->assertSession()->statusCodeEquals(403);
+  }
+
+  /**
+   * Tests access for 'administer backup and migrate' permission
+   */
+  public function testAdminister() {
+    $this->drupalLogin($this->drupalCreateUser(['administer backup and migrate']));
+    $this->drupalGet('admin/config/development/backup_migrate/settings');
+    $this->assertSession()->statusCodeEquals(200);
+  }
+
+  /**
+   * Tests access for 'perform backup' permission
+   */
+  public function testPerform() {
+    $this->drupalLogin($this->drupalCreateUser(['perform backup']));
+    $this->drupalGet('admin/config/development/backup_migrate');
+    $this->assertSession()->statusCodeEquals(200);
+  }
+
+  /**
+   * Tests access for 'restore from backup' permission
+   */
+  public function testRestore() {
+    $this->drupalLogin($this->drupalCreateUser(['restore from backup']));
+    $this->drupalGet('admin/config/development/backup_migrate/restore');
+    $this->assertSession()->statusCodeEquals(200);
+  }
+
+  /**
+   * Tests access for 'access backup files' permission
+   */
+  public function testAccessBackupFiles() {
+    //Ensure backup_migrate folder exists
+    $path = 'private://backup_migrate/';
+    file_prepare_directory($path, FILE_CREATE_DIRECTORY);
+    $this->drupalLogin($this->drupalCreateUser(['access backup files']));
+    $this->drupalGet('admin/config/development/backup_migrate/backups');
+    $this->assertSession()->statusCodeEquals(200);
+  }
+
+  /**
+   * Tests access for 'delete backup files' permission
+   */
+  public function testDeleteBackupFiles() {
+    $this->drupalLogin($this->drupalCreateUser(['delete backup files']));
+    $this->drupalGet('admin/config/development/backup_migrate/settings/destination/backups/private_files/delete/none.mysql.gz');
+    $this->assertSession()->statusCodeEquals(200);
+  }
+
+}
diff --git a/tests/src/Functional/BackupMigrateQuickBackupTest.php b/tests/src/Functional/BackupMigrateQuickBackupTest.php
new file mode 100644
index 0000000..ecbeacc
--- /dev/null
+++ b/tests/src/Functional/BackupMigrateQuickBackupTest.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Drupal\Tests\backup_migrate\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+
+
+/**
+ * Tests backup migrate quick backup functionality.
+ *
+ * @group backup_migrate
+ */
+class BackupMigrateQuickBackupTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['backup_migrate'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $strictConfigSchema = FALSE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Tests quick backup
+   */
+  public function testQuickBackup() {
+
+    //Ensure backup_migrate folder exists
+    $path = 'private://backup_migrate/';
+    file_prepare_directory($path, FILE_CREATE_DIRECTORY);
+
+    $this->drupalLogin($this->drupalCreateUser(['perform backup', 'administer backup and migrate']));
+    $this->drupalGet('admin/config/development/backup_migrate');
+    $this->assertSession()->statusCodeEquals(200);
+
+    //submit the quick backup form
+    $data = [
+      'source_id' => 'default_db',
+      'destination_id' => 'private_files'
+    ];
+    $this->submitForm($data, t('Backup now'));
+
+    //get backups page
+    $this->drupalGet('admin/config/development/backup_migrate/backups');
+    $this->assertSession()->statusCodeEquals(200);
+
+    //searching for the existing backups
+    $page = $this->getSession()->getPage();
+    $table = $page->find('css', 'table');
+    $row = $table->find('css', sprintf('tbody tr:contains("%s")', '.mysql.gz'));
+    $this->assertNotNull($row);
+
+  }
+
+}
+
+
+
