Cara membuat pemuat data uji sederhana
Diterbitkan: 2022-02-23Pendahuluan
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!
