Sabtu 12 Desember 2020, tim Jaminan Kualitas BlankOn mengadakan lokakarya tentang Jaminan Kualitas dengan narasumber pak Kukuh Syafaat (eks tim jaminan kualitas BlankOn). Di tengah presentasi, eh dapat tantangan dari narasumber untuk membawa openQA sebagai media pengujian otomatis untuk BlankOn. š
Sedikit tentang openQA
openQA merupakan perkakas otomasi pengujian khusus untuk sistem operasi. Perkakas ini dibuat oleh tim dari SUSE untuk menguji sistem operasi mereka, khususnya openSUSE. Saat ini, openQA sudah digunakan oleh tim pengembang Fedora dan EndlessOS untuk otomasi pengujian mereka. Dengan openQA, tim Jaminan Kualitas tinggal duduk diam meratapi nasib menonton log pengujian yang dilakukan oleh “worker” dalam antarmuka webUI nya š , kalau kata openQA: “life is too short for manual testing!”
Berikut merupakan arsitektur dari openQA

Ada 2 layanan utama yang ada dalam openQA, yaitu sisi end-user berupa antarmuka web dan sisi worker yang akan menjalankan task-task pengujian. Antarmuka web bisa dilihat contohnya seperti ini. Sedangkan worker berisi os-autoinst (aplikasi yang sebenarnya menjalankan otomasi pengujian) dan di belakang os-autoinst ini nanti akan menjalankan instance QEMU sebagai media pengujiannya.
Kita bisa memasang keseluruhan komponen di atas di dalam satu mesin (webUI dan worker di satu mesin). Atau kalau mau dipisah, kita bisa pisahin komponen webUI di mesin A sedangkan di mesin B hanya ada komponen worker saja. Komponen DB menggunakan POSTGRESQL, ini digunakan untuk menyimpan user yang dapat mengakses openQA dan konfigurasi-konfigurasi lain terkait instance openQA. Untuk webUI nya ini ada apache2 di depannya.
Otentikasi di dalam webUI menggunakan openID, jadi membutuhkan platform pihak ketiga seperti ipsilon.
Skrip test yang digunakan dalam os-autoinst ini menggunakan perl. Kata engineer mereka sih itu mudah, tapi setelah saya coba, ini cukup untuk bikin botak kepala xD . Banyak sekali mejik-mejik di dalamnya yang mesti digali lagi.
Memasang openQA
Kita bisa memasang openQA di beberapa distro, namun paling enak ya masang di atas openSUSE. Karena secara native paketnya tersedia di dalam repository openSUSE. Kalau memaksa di distro lain, berarti perlu bantuan container (docker).
note: Paket openQA ini ternyata sudah tersedia di openSUSE dan Fedora, untuk distro lain belum ngecek
openQA di openSUSE
# memasang openQA dan worker di satu mesin
~ $ sudo zypper in openQA-bootstrap openQA-worker
~ $ sudo /usr/share/openqa/script/openqa-bootstrap
Tunggu hingga proses instalasi selesai, lalu buka browser, kunjungi http://localhost
beres! sesimpel itu, kamvreet š
openQA di Arch Linux š
Karena di ArchLinux ndak ada openQA, ya sudah, saya pakai docker untuk jalanin instance nya. berikut langkahnya. (asumsi saya sudah pasang docker dan docker-compose).
Saya cari-cari image docker nya ternyata ndak updated di hub.docker.com, jadi saya putuskan untuk build docker image sendiri.
catatan lagi: ternyata opensuse punya docker registry sendiri buat openqa, ada di registry.opensuse.org
Tulisan ini merupakan hasil dokumentasi build openQA di lokal saya 12 Desember 2020 19:00 WIB. Karena openQA menerapkan sistem rolling release, sehingga paragraf ini cukup memberikan informasi.
~ $ mkdir blankonqa && cd blankonqa
# clone repository terlebih dahulu dari branch master
~/blankonqa $ git clone --depth 1 -b blankon https://github.com/BlankOn/openQA && cd openQA
~/blankonqa/openQA $ cd docker
# build images
~/blankonqa/openQA/docker $ docker build -t openqa_ui ./webui
~/blankonqa/openQA/docker $ docker build -t openqa_worker ./openqa_worker
~/blankonqa/openQA/docker $ docker build -f webui/Dockerfile-lb -t openqa_webui_lb ./webui
~/blankonqa/openQA/docker $ cp webui/docker-compose.yaml ~/blankonqa/main.yaml
~/blankonqa/openQA/docker $ cp -r openqa_data/data.template ~/blankonqa/data
~/blankonqa/openQA/docker $ cd ~/blankonqa
~/blankonqa $ nano main.yaml
sesuaikan isinya seperti di bawah ini. Di sini kita tidak menyertakan openqa_data karena kita akan melakukan bind mount dari host untuk persistence datanya,
version: '3.8'
services:
scheduler:
image: openqa_webui
networks:
- openqa
volumes:
- ./data/factory:/data/factory
- ./data/tests:/data/tests
- ./data/testresults:/data/testresults
- ./data/conf:/data/conf
environment:
MODE: "scheduler"
MOJO_LISTEN: "http://0.0.0.0:9529"
depends_on:
#- data
- db
websockets:
image: openqa_webui
networks:
- openqa
#ports:
#- "9527:9527" # worker connection
volumes:
- ./data/factory:/data/factory
- ./data/tests:/data/tests
- ./data/testresults:/data/testresults
- ./data/conf:/data/conf
environment:
MODE: "websockets"
MOJO_LISTEN: "http://0.0.0.0:9527"
depends_on:
- db
gru:
image: openqa_webui
networks:
- openqa
volumes:
- ./data/factory:/data/factory
- ./data/tests:/data/tests
- ./data/testresults:/data/testresults
- ./data/conf:/data/conf
environment:
MODE: "gru"
depends_on:
- db
livehandler:
image: openqa_webui
#ports:
#- "9528:9528" # handle live view
volumes:
- ./data/factory:/data/factory
- ./data/tests:/data/tests
- ./data/testresults:/data/testresults
- ./data/conf:/data/conf
environment:
MODE: "livehandler"
MOJO_LISTEN: "http://0.0.0.0:9528"
depends_on:
- db
webui:
image: openqa_webui
volumes:
- ./data/factory:/data/factory
- ./data/tests:/data/tests
- ./data/conf:/data/conf
- ./data/testresults:/data/testresults
environment:
MODE: "webui"
MOJO_LISTEN: "http://0.0.0.0:9526"
depends_on:
- db
deploy:
replicas: 1
db:
image: postgres:10-alpine
restart: always
environment:
POSTGRES_PASSWORD: openqa
POSTGRES_USER: openqa
POSTGRES_DB: openqa
volumes:
- ./data/db:/var/lib/postgresql/data
nginx:
image: openqa_webui_lb
restart: always
ports:
- "9530:80"
#Uncomment for SSL access
#- "443:443"
environment:
REPLICAS: 1
#volumes:
#If is needed to set a certificate for SSL
#- cert.crt:/etc/ssl/certs/opeqa.crt
#- cert.key:/etc/ssl/certs/opeqa.key
bikin satu file lagi buat composenya worker:
~/openqa-docker $ nano worker.yaml
# isikan seperti ini
version: "3.8"
services:
worker:
image: openqa_worker
privileged: true
volumes:
- ./data/factory:/data/factory
- ./data/tests:/data/tests
- ./data/conf:/data/conf
- ./data/testresults:/data/testresults
depends_on:
- nginx
ubah konfigurasi database:
# menghapus file yang menyebabkan container postgre tidak bisa jalan
~/blankonqa $ rm data/db/.gitignore
# setel konfigurasi database
~/blankonqa $ nano data/conf/database.ini
# sesuaikan dbname,user, dan password dengan POSTGRES_DB, POSTGRES_USER, dan POSTGRES_PASSWORD pada docker-compose.yml bagian db.
# untuk host, samakan dengan nama service di docker-compose.yml
# atau jika menggunakan postgresql secara terpisah (di luar docker), sesuaikan host=db dan port=5432 dengan alamat host postgresql dan port yang digunakan
[production]
dsn = DBI:Pg:dbname=openqa;host=db;user=openqa;password=openqa;port=5432
[development]
dsn = DBI:Pg:dbname=openqa;host=db;user=openqa;password=openqa;port=5432
ubah konfigurasi webui:
~/blankonqa $ nano data/conf/openqa.ini
[global]
appname = BlankOnQA
## Authentication method to use for user management
[auth]
# method = Fake|OpenID
# untuk development gunakan Fake saja
method = OpenID
[logging]
#logging is to stderr (so systemd journal) by default
#if you use a file, remember the apparmor profile!
#file = /var/log/openqa
level = info
#sql_debug = true
## Configuration for OpenID auth method
[openid]
## base url for openid provider
#provider = https://www.opensuse.org/openid/user/
## enforce redirect back to https
httpsonly = 0
mari kita jalankan (tanpa worker dulu, soalnya ada yang perlu diatur sebelum worker bisa jalan)
~/blankonqa $ docker-compose -f main.yaml up
# pastikan semua bisa running
silakan akses http://localhost:9530.

Klik menu login, nanti langsung berubah jadi demo user.
Lalu klik demo user > pilih menu Manage API Keys > Klik Create

Catat Key dan Secret untuk mengatur worker biar bisa konek
Buka terminal lagi ( yang docker-compose -f main.yaml up jangan ditutup dulu ya)
~/blankonqa $ nano data/conf/client.conf
# isikan seperti dibawah ini. Untuk [nginx] adalah nama service di docker-compose. karena kita ngaksesnya lewat service nginx, maka yang dimasukkan adalah [nginx]
[localhost]
key = 07DF85D4F2562023
secret = 0DDF6E06DAD6B73A
[nginx]
key = 07DF85D4F2562023
secret = 0DDF6E06DAD6B73A
atur dulu berkas workers.conf untuk koneksi si worker:
~/blankonqa $ nano data/conf/workers.conf
# isikan seperti ini. Sekali lagi, nginx adalah nama service di docker-compose, jadi kita menggunakan nama service untuk discovery host nya.
[global]
BACKEND = qemu
HOST = http://nginx
Saatnya menjalankan si worker
~/blankonqa $ docker-compose -f main.yaml -f worker.yaml up worker
# cek di log ini, apakah worker sudah bisa konek dengan nginx balancer (http://nginx)
Silakan masuk ke web lagi, di demo user > pilih menu workers

kalau container id (lihat di docker ps, bagian container id dengan nama service blankonqa_worker_1) terdaftar di webui nya, berti worker sudah siap untuk menerima tugas.
Yeaaay!
Bersambung…
sumber: https://github.com/os-autoinst/openQA/tree/master/docker
update 13-12-2020, ternyata komponen docker dari repo upstream ada yang mesti dibenahi, karena tidak berjalan mulus ketika build dan jalanin servicenya lewat compose file.