ເຄື່ອງມືຈັດການການທົດສອບ (Test Management Tool)
ບົດສະຫຼຸບຫຍໍ້
ເຄື່ອງມື tmt ມີຈຸດປະສົງເພື່ອສະໜອງວິທີການທີ່ມີປະສິດທິພາບ ແລະ ສະດວກສະບາຍໃນການສ້າງ, ດຳເນີນການ, ກວດສອບຂໍ້ຜິດພາດ ແລະ ເປີດໃຊ້ງານການທົດສອບໃນລະບົບ Continuous Integration.
ມັນໄດ້ນຳໃຊ້ Test Metadata Specification ເຊິ່ງຊ່ວຍໃຫ້ສາມາດເກັບກຳຂໍ້ມູນການທົດສອບທີ່ຈຳເປັນທັງໝົດໄວ້ໃນ git repository ໂດຍກົງ. ສາມາດໃຊ້ການກຳນົດຄ່າແບບດຽວກັນນີ້ເພື່ອເປີດໃຊ້ງານການທົດສອບໃນ Fedora CI, RHEL CI ແລະ Packit. ການທົດສອບສາມາດດຳເນີນການໄດ້ຢ່າງງ່າຍດາຍໃນສະພາບແວດລ້ອມທີ່ເຈົ້າຕ້ອງການ ເຊັ່ນ: ໃນເຄື່ອງຈຳລອງ (virtual machine), ຄອນເທນເນີ (container) ຫຼື ບົນເຄື່ອງ localhost ໂດຍກົງ.
ຂັ້ນຕອນທຳອິດ
ຕິດຕັ້ງ
ຕິດຕັ້ງ tmt ລົງໃນແລັບທັອບຂອງເຈົ້າ:
sudo dnf install -y tmt # ຄຸນສົມບັດພື້ນຖານ, ດຳເນີນການທົດສອບບົນ localhost sudo dnf install -y tmt+all # ຕິດຕັ້ງທຸກ subpackages ຂອງ tmt ທີ່ມີ່ ລວມທັງ dependencies ທັງໝົດ
ເຈົ້າສາມາດເລືອກຕິດຕັ້ງສະເພາະ provision plugins ທີ່ຕ້ອງການໄດ້:
sudo dnf install -y tmt+provision-container # dependencies ເພີ່ມເຕີມສຳລັບການທົດສອບໃນ containers sudo dnf install -y tmt+provision-virtual # ຮອງຮັບການທົດສອບໃນເຄື່ອງຈຳລອງໂດຍໃຊ້ testcloud
ເບິ່ງສ່ວນ install ຂອງ tmt ສຳລັບຕົວເລືອກການຕິດຕັ້ງເພີ່ມເຕີມ.
Git Repo
ກວດສອບ (Check out) ສາຂາ dist git ທີ່ຕ້ອງການໂດຍໃຊ້ fedpkg:
fedpkg clone -a bash cd bash git checkout f32
ຫຼື ໂຄລນ (clone) repository ໂຄງການຂອງທ່ານຈາກ GitHub:
git clone https://github.com/teemtee/tmt/ cd tmt git checkout -b enable-tests
ການທົດສອບເບື້ອງຕົ້ນ (Smoke Test)
ມາລອງເປີດໃຊ້ການທົດສອບເບື້ອງຕົ້ນແບບງ່າຍໆ ໂດຍໃຊ້ແມ່ແບບແຜນແບບນ້ອຍທີ່ສຸດ (minimal plan template):
$ tmt init --template mini Tree '/tmp/bash' initialized. Applying template 'mini'. Directory '/tmp/bash/plans' created. Plan '/tmp/bash/plans/example.fmf' created.
ແກ້ໄຂແຜນທີ່ສ້າງຂຶ້ນໃໝ່ຕາມຄວາມຕ້ອງການ, ຕົວຢ່າງຄືແບບນີ້:
summary:
Basic smoke test for bash
execute:
script: bash --version
ດຳເນີນການທົດສອບ
ສັ່ງທົດສອບ
ດຳເນີນການທົດສອບທີ່ມີທັງໝົດຢ່າງປອດໄພໃນເຄື່ອງຈຳລອງ (virtual machine):
tmt run
ສັ່ງທົດສອບສະເພາະອັນທີ່ກົງກັບຊື່ທີ່ກຳນົດ ຫຼື ຢູ່ໃນ directory ປັດຈຸບັນ:
tmt run test --name smoke tmt run test --name .
ສະແດງລາຍລະອຽດຜົນການທົດສອບຈາກການສັ່ງ tmt run ຄັ້ງຫຼ້າສຸດຂອງຜູ້ໃຊ້ປັດຈຸບັນ:
tmt run --last report -fvvv
|
ການດຳເນີນການທົດສອບທີ່ເປີດໃຊ້ໂດຍໃຊ້ Standard Test Interface ໃນ tests/tests.yml ຍັງບໍ່ຮອງຮັບເທື່ອ ແຕ່ພວກເຮົາກຳລັງພັດທະນາຢູ່. |
ເລືອກຂັ້ນຕອນ
ເລືອກຂັ້ນຕອນທີ່ຕ້ອງການໃຫ້ເຮັດວຽກໂດຍສະເພາະ:
tmt run discover
ຄຳສັ່ງນີ້ຈະສະແດງພາບລວມຂອງການທົດສອບທີ່ຈະຖືກດຳເນີນການ. ເພື່ອເບິ່ງລາຍການການທົດສອບແຕ່ລະອັນ ໃຫ້ເປີດໃຊ້ verbose mode:
tmt run discover --verbose tmt run discover -v
ຕົວເລືອກການຈັດກຽມລະບົບ (Provision Options)
ເລືອກ local ເປັນວິທີການຈັດກຽມລະບົບ ແຕ່ໃຫ້ເຮັດວຽກທຸກຂັ້ນຕອນ (--all steps):
tmt run --all provision --how local
ດຳເນີນການພາຍໃນຄອນເທນເນີ ຫຼື ເຄື່ອງຈຳລອງ:
tmt run --all provision --how container --image fedora tmt run --all provision --how virtual --image fedora-32
ກວດສອບ provision plugins ທັງໝົດທີ່ມີ:
tmt run provision --help
ຕົວເລືອກການກຽມຄວາມພ້ອມ (Prepare Options)
ຕິດຕັ້ງແພັກເກັດເພີ່ມເຕີມໃນເຄື່ອງປາຍທາງ (guest):
tmt run --all prepare --how install --package httpd
ດຶງແພັກເກັດຫຼ້າສຸດຈາກ copr repository ທີ່ກຳນົດ:
tmt run --all prepare --how install --copr @teemtee/tmt --package tmt
ໃຊ້ໄຟລ໌ rpm ທີ່ສ້າງຂຶ້ນໃໝ່ໃນເຄື່ອງ ຫຼື ທຸກໄຟລ໌ rpm ຈາກ directory ໃນເຄື່ອງ:
tmt run --all prepare --how install --package tmp/RPMS/noarch/tmt-0.20-1.fc32.noarch.rpm tmt run --all prepare --how install --directory tmp/RPMS/noarch
ກວດສອບຕົວເລືອກການກຽມຄວາມພ້ອມທັງໝົດທີ່ມີ:
tmt run prepare --help
ສ້າງການທົດສອບ
ເພື່ອສ້າງການທົດສອບທີ່ມີຄວາມຊັບຊ້ອນຫຼາຍຂຶ້ນ ໃຫ້ໃຊ້ແມ່ແບບແຜນພື້ນຖານ (base plan template):
tmt plan create /plans/basic --template base tmt plan create /plans/basic -t base
ອັບເດດບົດສະຫຼຸບຕາມຄວາມຕ້ອງການ, ຕັ້ງວິທີການຄົ້ນຫາ (discover method) ເປັນ fmf ແລະ ເລືອກວ່າ ຈະໃຫ້ການທົດສອບເຮັດວຽກເປັນ shell scripts (ກວດສອບພຽງ exit code) ຫຼື beakerlib tests (ກວດສອບ journal ເພື່ອເບິ່ງຜົນການທົດສອບ):
summary:
Check basic bash features
discover:
how: fmf
execute:
how: tmt
ການທົດສອບ Shell
ເພື່ອສ້າງໂຄງສ້າງການທົດສອບ shell ແບບງ່າຍໆ ໃຫ້ໃຊ້ແມ່ແບບ shell:
$ tmt test create /tests/smoke Template (shell or beakerlib): shell Directory '/tmp/bash/tests/smoke' created. Test metadata '/tmp/bash/tests/smoke/main.fmf' created. Test script '/tmp/bash/tests/smoke/test.sh' created.
ອັບເດດໄຟລ໌ metadata:
summary: Check bash version contact: Petr Šplíchal <psplicha@redhat.com> test: ./test.sh
ປັບແຕ່ງ test script ຕາມຄວາມຕ້ອງການ:
#!/bin/sh -eux tmp=$(mktemp) bash --version > $tmp grep 'GNU bash' $tmp grep 'Free Software Foundation' $tmp rm $tmp
ໃຊ້ຄຳສັ່ງ tmt run ເພື່ອຢືນຢັນວ່າການທົດສອບເຮັດວຽກຕາມທີ່ຄາດໄວ້.
ການທົດສອບ BeakerLib
ໃຊ້ແມ່ແບບ beakerlib ເພື່ອສ້າງການທົດສອບ beakerlib ໃໝ່:
$ tmt test create /tests/smoke -t beakerlib Directory '/tmp/bash/tests/smoke' created. Test metadata '/tmp/bash/tests/smoke/main.fmf' created. Test script '/tmp/bash/tests/smoke/test.sh' created.
ອັບເດດ test metadata ແລະ ໂຄ້ດຕາມຄວາມຕ້ອງການ, ຈາກນັ້ນໃຊ້ tmt run ເພື່ອກວດສອບວ່າທຸກຢ່າງເຮັດວຽກໄດ້ດີ.
ການຮ້ອງຂໍດຶງຂໍ້ມູນ (Pull Requests)
ເມື່ອສ້າງ pull request ໃຫ້ແນ່ໃຈວ່າເຈົ້າໄດ້ເພີ່ມທຸກໄຟລ໌ທີ່ສ້າງຂຶ້ນ ລວມທັງ directory ພິເສດ .fmf.
git add . git commit
Fedora
ເພື່ອທົດສອບການປ່ຽນແປງຂອງເຈົ້າໃນ Fedora CI ແມ່ນບໍ່ຈຳເປັນຕ້ອງມີການກຳນົດຄ່າເພີ່ມເຕີມ. ໃຫ້ແນ່ໃຈວ່າເຈົ້າໄດ້ push ການປ່ຽນແປງໄປຍັງ repository ທີ່ເຈົ້າ fork ມາ ເນື່ອງຈາກ fedora rpms/tests namespace ບໍ່ອະນຸຍາດໃຫ້ເຮັດ force-push ຫຼື ລົບສາຂາ (branch).
git remote add fork ssh://psss@pkgs.fedoraproject.org/forks/psss/rpms/tmt.git git push fork -u enable-tests
GitHub
ເພື່ອທົດສອບ pull request ໃນ GitHub ໃຫ້ເປີດໃຊ້ການເຊື່ອມຕໍ່ Packit-as-a-Service ແລະ ເພີ່ມໄຟລ໌ກຳນົດຄ່າ .packit.yaml:
jobs:
- job: tests
trigger: pull_request
metadata:
targets:
- fedora-all
ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ ເບິ່ງເອກະສານຂອງ Testing Farm. ເມື່ອເປີດໃຊ້ການເຊື່ອມຕໍ່ແລ້ວ ໃຫ້ push ສາຂາ, ສ້າງ pull request ໃໝ່ຕາມປົກກະຕິ ແລະ ລໍຖ້າຜົນການທົດສອບ:
git push origin -u enable-tests
ແມ່ແບບ (Templates)
ເມື່ອສ້າງ pull request ເພື່ອເປີດໃຊ້ການທົດສອບໃນ repository ທີ່ຍັງບໍ່ມີການກຳນົດຄ່າ tmt, ຄວນໃສ່ຄຳແນະນຳ ແລະ ລິ້ງຕ່າງໆ ສຳລັບຜູ້ທີ່ຍັງບໍ່ຄຸ້ນເຄີຍກັບເຄື່ອງມືໃໝ່ນີ້:
Pull request ນີ້ເປີດໃຊ້ການທົດສອບໃນ Fedora CI ໂດຍໃຊ້ `tmt` ເຊິ່ງ
ຍັງຊ່ວຍໃຫ້ສາມາດດຳເນີນການ ແລະ ກວດສອບຂໍ້ຜິດພາດຂອງການທົດສອບຈາກແລັບທັອບຂອງເຈົ້າໄດ້ຢ່າງງ່າຍດາຍ:
ສັ່ງທົດສອບໂດຍກົງບົນເຄື່ອງ localhost ຂອງເຈົ້າ:
sudo dnf install -y tmt
tmt run --all provision --how local
ສັ່ງທົດສອບໃນເຄື່ອງຈຳລອງ (virtual machine):
sudo dnf install -y tmt+provision-virtual
tmt run
ເບິ່ງເອກະສານເພີ່ມເຕີມເພື່ອຮຽນຮູ້ກ່ຽວກັບເຄື່ອງມືນີ້:
https://docs.fedoraproject.org/en-US/ci/tmt/
ຈັດການການທົດສອບ
ສຳຫຼວດການທົດສອບທີ່ມີ, ແປງ metadata ເກົ່າ, ແບ່ງປັນໂຄ້ດການທົດສອບ.
ສຳຫຼວດການທົດສອບ
ເພື່ອເບິ່ງວ່າການທົດສອບໃດແດ່ທີ່ມີຢູ່:
tmt test ls
ເພື່ອສະແດງລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການທົດສອບແຕ່ລະອັນ:
tmt test show
ເພື່ອເບິ່ງພາບລວມຂອງ metadata ທັງໝົດ:
tmt
ສຳຫຼວດຕົວເລືອກ ແລະ ຄຳສັ່ງທັງໝົດທີ່ມີໂດຍໃຊ້ --help.
ແບ່ງປັນການທົດສອບ
ໂຄ້ດການທົດສອບບໍ່ຈຳເປັນຕ້ອງຢູ່ໃນ git repository ດຽວກັນ (ເຊັ່ນ: dist git rpms namespace). ເຈົ້າສາມາດເກັບການທົດສອບໄວ້ໃນ repository ສະເພາະ ແລະ ແບ່ງປັນການທົດສອບນັ້ນໄປຍັງຄອມໂພເນນ ຫຼື ເວີຊັນຜະລິດຕະພັນຕ່າງໆໄດ້. ພຽງແຕ່ອ້າງອີງເຖິງ repository ໃນຂັ້ນຕອນ discover. ໃຊ້ແມ່ແບບແຜນແບບເຕັມ (full plan template) ເພື່ອເລີ່ມຕົ້ນຢ່າງວ່ອງໄວ:
tmt plan create /plans/upstream -t full
ອັບເດດ url ຂອງ repository ໃຫ້ຊີ້ໄປຫາບ່ອນທີ່ຖືກຕ້ອງ:
summary:
Essential command line features
discover:
how: fmf
url: https://github.com/teemtee/tmt
execute:
how: tmt
ຕອນນີ້ເຈົ້າຈະສາມາດສັ່ງທົດສອບຈາກ repository ທາງໄກໄດ້. ເບິ່ງລາຍລະອຽດໃນເອກະສານ ຂັ້ນຕອນ discover.
ຄຳແນະນຳຕ່າງໆ
ຫຼາຍຄຳສັ່ງ
ສາມາດໃສ່ຫຼາຍຄຳສັ່ງ shell ພາຍໃຕ້ຄຸນລັກສະນະ script ໄດ້ເຊັ່ນກັນ:
summary:
Basic smoke test for bash
execute:
script:
- bash --version
- bash -c 'echo $((1+1+1))' | grep 3
ເບິ່ງລາຍລະອຽດໃນເອກະສານວິທີການ script.
ຕິດຕັ້ງ Dependencies
ສາມາດຕິດຕັ້ງແພັກເກັດທີ່ຈຳເປັນໄດ້ໂດຍໃຊ້ຄຸນລັກສະນະ prepare:
summary: Basic smoke test for python3-m2crypto
prepare:
how: install
package:
- python3-setuptools
- python3-m2crypto
execute:
script: python3 -c "import M2Crypto"
ເບິ່ງລາຍລະອຽດໃນເອກະສານຂັ້ນຕອນ prepare.
ຫຼາຍ Repositories
ໃນຂັ້ນຕອນ discover, ເຈົ້າສາມາດອ້າງອີງເຖິງຫຼາຍ repositories ໄດ້ເຊັ່ນກັນ. ດ້ວຍວິທີນີ້ ເຈົ້າສາມາດສັ່ງທົດສອບທັງ upstream ແລະ fedora ພ້ອມກັນໃນແຜນດຽວໄດ້ຢ່າງງ່າຍດາຍ:
discover:
- name: fedora
how: fmf
url: https://src.fedoraproject.org/tests/selinux.git
- name: upstream
how: fmf
url: https://github.com/SELinuxProject/selinux-testsuite
ເບິ່ງຕົວຢ່າງ multiple config ໃນ tmt repo ເພື່ອໃຫ້ເຫັນພາບທີ່ຊັດເຈນຂຶ້ນ.
ຫຼາຍແຜນ (Multiple Plans)
ເຈົ້າສາມາດໃຊ້ຫຼາຍແຜນເພື່ອຈັດກຸ່ມການທົດສອບທີ່ກ່ຽວຂ້ອງເຂົ້າກັນ ຫຼື ເພື່ອໃຫ້ສາມາດສັ່ງທົດສອບສະເພາະບາງສ່ວນໄດ້ງ່າຍ. ຕົວຢ່າງ: ໃຫ້ມີແຜນ /plans/features ເຊິ່ງລວມທຸກການທົດສອບຄຸນສົມບັດຈາກ git repository ໃນເຄື່ອງ:
discover:
how: fmf
execute:
how: tmt
ແລະ ແຜນ /plans/integration ແຍກຕ່າງຫາກເພື່ອເປີດໃຊ້ການທົດສອບການເຊື່ອມຕໍ່ກັບຄອມໂພເນນອື່ນ:
discover:
how: fmf
url: https://src.fedoraproject.org/rpms/ltrace.git
execute:
how: tmt
ການສັ່ງທົດສອບທັງໝົດຈາກແຜນທີ່ກຳນົດແມ່ນເຮັດໄດ້ງ່າຍຫຼາຍ:
tmt run plan --name /plans/features
ເມື່ອເຮັດວຽກໃນ CI, ຜົນຈາກແຜນເຫຼົ່ານີ້ຈະຖືກລາຍງານເປັນ resultsdb testcase ດຽວ ແລະ ສະແດງໃນ pull requests ເປັນ flag ດຽວ. ເພື່ອເປີດໃຊ້ການແຍກຜົນລາຍງານຂອງແຕ່ລະແຜນ, ໃຫ້ສ້າງໄຟລ໌ ci.fmf ໃນ root ຂອງ git repository ດ້ວຍເນື້ອຫາຕໍ່ໄປນີ້:
resultsdb-testcase: separate
ເມື່ອເປີດໃຊ້ການແຍກລາຍງານແລ້ວ, ເຈົ້າສາມາດເປີດໃຊ້ gating ສຳລັບສະເພາະແຜນທີ່ເລືອກໄດ້. ຊື່ແຜນຈະກາຍເປັນສ່ວນໜຶ່ງຂອງຊື່ resultsdb testcase ເຊິ່ງຖືກໃຊ້ໃນການກຳນົດຄ່າ gating.yaml. ເບິ່ງລາຍລະອຽດໃນເອກະສານ gating ສ່ວນ Using Multiple Plans.
ເສັ້ນທາງທີ່ສັ້ນທີ່ສຸດ (Minimal Path)
ນີ້ຄືຕົວຢ່າງຂອງຂັ້ນຕອນການສ້າງການທົດສອບແບບສັ້ນທີ່ສຸດ:
dnf install -y tmt+all git clone https://src.fedoraproject.org/rpms/bash cd bash tmt init -t mini vim plans/example.fmf tmt run
ຕົວຢ່າງທີ່ຂະຫຍາຍເພີ່ມເຕີມ ໂດຍໃຊ້ test ແລະ plan template ທີ່ກຳນົດເອງ ແລະ ສັ່ງທົດສອບໂດຍກົງບົນ local host:
dnf install -y tmt+all git clone https://src.fedoraproject.org/rpms/bash cd bash tmt init tmt plan create --template base plans/smoke tmt test create --template beakerlib tests/smoke vim plans/smoke.fmf tests/smoke/* tmt run --all provision -h local git add . git commit -m "Enable basic tests" git push
ເຄັດລັບກ່ຽວກັບ Virtualization
ເພື່ອດຳເນີນການທົດສອບຢ່າງປອດໄພພາຍໃຕ້ເຄື່ອງຈຳລອງທີ່ເປີດໃຊ້ໃນແລັບທັອບຂອງເຈົ້າ, ເຈົ້າພຽງແຕ່ຕິດຕັ້ງແພັກເກັດ tmt+provision-virtual. ໂດຍປົກກະຕິແລ້ວ ມັນຈະໃຊ້ session connection ດັ່ງນັ້ນຈຶ່ງບໍ່ຈຳເປັນຕ້ອງມີຂັ້ນຕອນອື່ນ, ພຽງແຕ່ສັ່ງທົດສອບດ້ວຍຄຳສັ່ງ tmt run. ເບິ່ງຕົວເລືອກເພີ່ມເຕີມໃນ Virtualization Tips.
ຂໍ້ມູນເພີ່ມເຕີມ
ຕົວຢ່າງການທົດສອບ
ຕົວຢ່າງໂຄງການທີ່ມີການທົດສອບດ້ວຍ tmt:
ເບິ່ງໜ້າ examples ຂອງ tmt ສຳລັບແຮງບັນດານໃຈເພີ່ມເຕີມ.
ຄຳຖາມ
- ເຄື່ອງມືນີ້ເຂົ້າມາແທນທີ່ ຫຼື ຍົກເລີກການໃຊ້ STI ບໍ່?
-
ບໍ່, ໃນປັດຈຸບັນຍັງບໍ່ມີແຜນທີ່ຈະຍົກເລີກ STI. ທັງ
tmtແລະstiເຊິ່ງເປັນວິທີການກຳນົດຄ່າ CI ແມ່ນສາມາດໃຊ້ຄວບຄູ່ກັນໄປໄດ້. - ການທົດສອບເຫຼົ່ານີ້ຮອງຮັບໃນ Fedora CI ບໍ່?
-
ຮອງຮັບ, Fedora CI ແມ່ນຮອງຮັບທຸກສາຂາ (branches) ທີ່ຍັງເຄື່ອນໄຫວຢູ່ ແລະ ລວມເຖິງ tests namespace ເຊັ່ນກັນ.
- ເຄື່ອງມືນີ້ຮອງຮັບ Linux distributions ໃດແດ່?
-
ສຳລັບລະບົບທີ່ໃຊ້ທົດສອບ (system under test), ສາມາດໃຊ້ Fedora ທຸກເວີຊັນທີ່ຍັງຮອງຮັບ, Centos 6+ ແລະ Red Hat Enterprise Linux 6+ ຂຶ້ນໄປ. ສຳລັບເຄື່ອງທີ່ໃຊ້ສັ່ງການ (test runner), ຈຳເປັນຕ້ອງໃຊ້ Fedora ທຸກເວີຊັນທີ່ຍັງຮອງຮັບ, Centos 8+ ຫຼື Red Hat Enterprise Linux 8+ ຂຶ້ນໄປ.
Want to help? Learn how to contribute to Fedora Docs ›