Cara membuat pemuat data uji sederhana

Diterbitkan: 2022-02-23

Pendahuluan

Proyek SQL tidak terlalu populer di kalangan keluarga pengujian. Test Engineer biasanya lebih suka bekerja dengan UI atau API. Tetapi ada banyak proyek di mana logika bisnis terletak pada basis data relasional atau gudang data dan cepat atau lambat Anda perlu melakukan beberapa pengujian pada DB/DW.

Dalam proyek tersebut, dengan cara yang sama seperti di proyek lainnya, pengujian manual masih merupakan pendekatan yang valid dan memerlukan persiapan beberapa konfigurasi data pengujian. Ini bisa menyakitkan ketika bekerja dengan beberapa skrip sql data uji, banyak objek DB, dan skema DB. Dalam artikel ini, saya akan menunjukkan kepada Anda cara membuat pemuat data uji sederhana.

Antarmuka pengguna

Kami akan menggunakan Python dan SQL Server sebagai penyimpanan data. Pertama mari kita buat UI sederhana untuk aplikasi desktop. Saya menganggap semua perpustakaan sudah terinstal, dan jika tidak, maka "pip install [paket]"

Pengaturan Jendela

 sistem impor
impor acak
dari PyQt4.QtCore impor pyqtSlot,SIGNAL,SLOT
dari impor PyQt4.QtGui *
dari impor PyQt4.QtCore *
waktu impor

       aplikasi = QApplication(sys.argv)
       w = QWidget()
       w.setWindowTitle('Penghasil Data Uji')
       w.resize(180, 240)
       w.setFixedSize(800, 460)

       w.setStyleSheet("warna-latar belakang: putih;")

Blok Kode 1. Jendela pengaturan .

Dimulai dengan jendela kosong sebagai widget.

Bilah Kemajuan

Sekarang mari tambahkan bilah kemajuan ke pemuat data pengujian kami. Ini akan memberi tahu kami saat memuat atau menghapus data selesai. Nilai awal jelas diatur ke 0.

 kelas QProgBar(QProgressBar):

       nilai = 0

   @pyqtSlot()
   def peningkatanNilai(progressBar):
           progressBar.setValue(progressBar.value)
           progressBar.value = progressBar.value+1

bar = QProgBar(w)
bar.resize(320,30)
bar.setNilai(0)
bar.move (460.400)

Blok Kode 2. Mengatur bilah kemajuan

Blok Kode 2. berisi beberapa hal yang akan dijelaskan:

  • peningkatanNilai metode yang akan meningkatkan nilai bilah kemajuan
  • QProgBar(w) Widget QProgressBar menyediakan bilah kemajuan

Label

Kami membutuhkan label untuk tombol, drop down, kolom input, dll.

 lNama = QLabel(w)
{...}

lName.setText("Nama")
lNama.pindah(60,60)
{...}

Blok Kode 3. Mengatur label

Dan penjelasan Blok Kode 3.

  • {…} Jelas, saya tidak akan memasukkan semua kode, jadi mulai sekarang saya akan menggunakan {…} ini untuk menginformasikan “kelanjutan kode di sini”.
  • QLabel(w) -Widget QLabel menyediakan teks

Tombol, kotak centang, dan bidang masukan

Mari kita lihat beberapa elemen lagi di aplikasi kita, dimulai dengan tombol tindakan.

 btnDelete = QPushButton('Hapus Data Uji', w)
btnLoad = QPushButton('Muat Data Uji', w)
{...}

skema = QComboBox(w)
schema.addItem("Skema Uji")
schema.move(200,10)
schema.resize(120,25)

database = QLineEdit(w)
database.move(30, 10)
database.resize(120,25)
database.setPlaceholderText("Nama DB")

nama1 = QCheckBox('Nama 1', w)
nama1.move(30, 85)
nama1.setDiperiksa(Benar)
{...}

Blok Kode 4. Mengatur label

Elemen aplikasi yang didefinisikan dalam Blok Kode 4 adalah:

  • QPushButton('') – Widget QPushButton menyediakan tombol
  • QComboBox(w) – Widget QComboBox adalah daftar drop-down
  • QLineEdit(w) – Widget QLineEdit adalah input teks satu baris.
  • QCheckBox – Widget QCheckBox menyediakan kotak centang dengan label teks

tindakan

Sekarang tiba bagian menyenangkan. Kami akan membuat tindakan dan menghubungkan sinyal dengan slot.

 @pyqtSlot()
def on_click_loadData():
       bar.setNilai(25)
       namaDaftar = []
       {...}

       db = str(database.teks())
       {...}

       if(name1.isChecked()==Benar):
       nameList.append("Nama 1")
       {...}
       if(len(Daftar nama)>0):
       Nama = str(nameList[randomValueGenerator(len(nameList))-1])

       bar.setNilai(50)
       if(str(schema.currentText())=='Skema Tes'):
       addTestData(db, 'Tes', Nama, {...})
       {...}
       bar.setValue(75)
       bar.setNilai(100)

def on_click_deleteData():
       bar.setNilai(25)
       db = str(database.teks())
       bar.setNilai(50)
       if(str(schema.currentText())=='Skema Tes'):
       deleteTestData(db, 'Uji')
       {...}
       bar.setValue(75)
       bar.setNilai(100)

{...}

def randomValueGenerator(len):
       kembalikan random.randint(1,len)

btnStructure.clicked.connect(on_click_createStructure)
btnStructure.move(20, 400)
btnStructure.resize(120,30)

btnLoad.clicked.connect(on_click_loadData)
btnLoad.move(160, 400)
btnLoad.resize(120,30)

btnDelete.clicked.connect(on_click_deleteData)
btnHapus.move(300, 400)
btnDelete.resize(120,30)

w.tampilkan()
aplikasi.exec_()

Blok Kode 5. Mengatur label

Ini adalah bagian kode yang cukup panjang. Mari kita lihat lebih dekat apa yang baru saja kita terapkan:

  • on_click_loadData() – kita memanggil fungsi addTestData() dan menggunakan

btn.clicked.connect() fungsi

  • on_click_deleteData() – kita memanggil fungsi deleteTestData() dan menggunakan

btn.clicked.connect() fungsi

  • randomValueGenerator() – mengembalikan nilai int acak dari rentang yang ditentukan
  • btn.clicked.connect() – kita menghubungkan sinyal dengan slot
  • w.show() – tampilkan widget
  • app.exec_() -mengeksekusi aplikasi

tindakan DB

Aplikasi kami membutuhkan tindakan SQL yang terhubung dengan tindakan tombol. Kami akan menggunakan konektor pyodbc untuk terhubung ke SQL Server DB. Saya berasumsi skema DB sudah ada dan kita tidak perlu membuat objek DB seperti tabel dll.

Tambahkan data pengujian

Fungsi addTestData mengambil nilai dari UI dan meneruskannya ke kueri SQL. Tapi mari kita lihat seluruh kode:

  • Membuka koneksi ke SQL Server DB dengan mendefinisikan dbAddress
  • Menetapkan nilai id – jika id tabel bukan merupakan kenaikan otomatis, kita perlu mengetahui nilai id berikutnya yang akan digunakan
  • definisi kueri SQL. Kami akan memberikan beberapa nilai dari UI.
 impor pyodbc
impor ConfigParser

config = ConfigParser.RawConfigParser()
config.read('../resources/env.properties')
daftar = []
login = 'myFancyLogin'

def addTestData(db, skema, Nama {...}):
   mencoba:
      dbAddress = "Driver={SQL Server};Server=localhost\SQLEXPRESS; 
                   Database="+db+";Trusted_Connection=ya; 
                   kamu;pwd="
      cnx = pyodbc.connect(dbAddress)
      kursor = cnx.cursor()+schema+"].[kandidat] ORDER BY ID 
            DESC"
      id = returnValue(cnx, kursor, id)
      Id = str(id + 1)

      skema = str(skema)

      testQuery = 'PILIH DB_NAME() AS [Database Saat Ini];'
      kandidat = "MASUKKAN KE ["+skema+"].[kandidat]      
                    NILAI("+Id+",'"+Nama+"',{...}")"
      returnDBName(cnx, kursor, testQuery)

      daftar = [calon]
      executeQuery(cnx, kursor, daftar)

   kecuali pyodbc.Error sebagai e:
      cetak (e)
      cetak 'kesalahan dalam fungsi addTestData'
   kalau tidak:
      cnx.close()

Blok Kode 6. Tambahkan metode data uji

Hapus data pengujian

Penghapusan data uji ditangani oleh fungsi deleteTestData(db,schema). Ini hanya memiliki 2 parameter (db,skema). Artinya kita ingin membersihkan seluruh meja tanpa membawa apa yang ada di dalamnya.

 def deleteTestData(db, skema):
   mencoba:
      dbAddress = "Driver={SQL Server};Server=localhost\SQLEXPRESS;
                   Database="+db+";Trusted_Connection=ya;
                   kamu;pwd="
      cnx = pyodbc.connect(dbAddress)
      kursor = cnx.kursor()
 
      skema = str(skema)
 
      testQuery = 'PILIH DB_NAME() AS [Database Saat Ini];'
      kandidat = "HAPUS DARI ["+skema+"].[kandidat]"
      kandidatDiproses = "HAPUS DARI 
                             ["+skema+"].[kandidatDiproses]"
 
      returnDBName(cnx, kursor, testQuery)
 
      list = [kandidat, kandidat Diproses]
      executeQuery(cnx, kursor, daftar)

   kecuali:
      print 'kesalahan dalam fungsi deleteTestData'
   kalau tidak:
      cnx.close()

Blok Kode 7. Hapus metode data pengujian

Utilitas

Dan beberapa fungsi utils yang digunakan oleh fungsi addTestData() dan deleteTestData():

 def executeQuery(cnx, kursor, daftar):
   untuk saya dalam daftar:
   kursor.jalankan(i)
   cnx.komit()

def returnDBName(cnx, kursor, dbQuery):
   kursor.jalankan(dbQuery)
   Nilai = cursor.fetchone()
   Nilai = Nilai[0]
   Nilai = str(Nilai)

Blok Kode 8. Fungsi util

File Exe

Saat ini, kami dapat menggunakan kode kami jika Python diinstal dan kami dapat mengkompilasi kode, tetapi bagaimana jika kami hanya ingin memiliki file yang dapat dieksekusi? Pustaka py2exe memungkinkan untuk membuat file yang dapat dieksekusi dari kode Python (Blok Kode 9):

 dari pengaturan impor distutils.core
impor py2exe
      
setup(windows=[nama file dengan widget],
   data_file = data_file,
   opsi={ 'py2exe': {
      "termasuk":['sip'],
      "dll_excludes": ['MSVFW32.dll',
      'AVIFIL32.dll',
      'AVICAP32.dll',
      'ADVAPI32.dll',
      'CRYPT32.dll',
      'WLDAP32.dll',
      'MSVCP90.dll']
      }
   })

Blok Kode 9. Membuat file .exe

Hasil

Dan inilah hasil dari pekerjaan kami. Semoga Anda menikmati tutorialnya!