
Anteriormente, presenté Fedora Test Day y demostré cómo ayudar a probar el último kernel de Linux. Usé un conjunto de pruebas automatizado con un conjunto limitado de pruebas para verificar la confiabilidad del kernel de Fedora. Las pruebas más profundas del sistema Linux requieren un conjunto más completo de pruebas para cubrir la amplitud de los diversos subsistemas de Linux.
Para esto puedes usar Proyecto de prueba de Linux (LTP)En las propias palabras del proyecto, la misión de LTP es «probar Linux, una llamada al sistema a la vez».
[ Test your sysadmin skills. Take a skills assessment today. ]
LTP es desarrollado y mantenido por varias organizaciones con el objetivo de proporcionar un conjunto de pruebas que pueda verificar la confiabilidad, solidez y estabilidad de Linux. Es un conjunto de pruebas automatizado de código abierto con varias herramientas.
Para este artículo, estoy usando un servidor físico que ejecuta Fedora 36:
$ cat /etc/fedora-release
Fedora release 36 (Thirty Six)
$ uname -a
Linux testhost.com 5.19.8-200.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Sep 8 19:02:21 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Para instalar y usar LTP, necesita herramientas estándar de Linux disponibles en su sistema, incluidas Git, gcc, Python y Make.también necesitas automake
Instale el RPM en su sistema para compilar con éxito el conjunto de pruebas LTP:
$ rpm -qa | grep -i automake
automake-1.16.5-7.fc36.noarch
[ Keep your most commonly used commands handy with the Linux commands cheat sheet. ]
Instalar LTP
Para instalar LTP, clonar Repositorio LTP Git:
$ git clone
$ cd ltp/
Después de la clonación, vaya al directorio de origen y ejecute varios make
Comando para compilar el proyecto. Este paso puede tardar unos minutos porque el repositorio contiene varias herramientas escritas en C que son necesarias para que se ejecute el conjunto de pruebas automatizadas.
$ make autotools
$ ./configure
$ make
$ make install
una vez make
El comando se ejecuta correctamente y el conjunto de pruebas se mueve al directorio /opt/ltp
Este directorio contiene todos los binarios de prueba y un archivo llamado runltp
Inicie el conjunto de pruebas de LTP.
$ ls /opt/ltp/
bin IDcheck.sh metadata runltp runtest scenario_groups share testcases testscripts ver_linux Version
Si desea ver qué pruebas se compilan, consulte /opt/ltp/testcases/bin/
Tabla de contenido.
Ejecute el conjunto de pruebas
Ahora que tiene LTP instalado, puede comenzar a ejecutar pruebas.Este runltp
El script de shell actúa como punto de entrada para ejecutar el conjunto de pruebas:
$ ls -l /opt/ltp/runltp
-rwxr-xr-x. 1 root root 36557 Sep 16 18:54 /opt/ltp/runltp
$ file /opt/ltp/runltp
/opt/ltp/runltp: POSIX shell script, ASCII text executable
correr runltp
La secuencia de comandos del shell contenedor muestra algunos registros en la pantalla y comienza a ejecutar el conjunto de prueba. Consulte el mensaje inicial para obtener una lista de las pruebas que ejecuta de forma predeterminada:
$ /opt/ltp/runltp
INFO: creating /opt/ltp/output directory
INFO: creating /opt/ltp/results directory
INFO: no command files were provided. Executing following runtest scenario files:
syscalls fs fs_perms_simple fsx dio io mm ipc irq sched math nptl pty containers fs_bind controllers filecaps cap_bounds fcntl-locktests connectors power_management_tests hugetlb commands hyperthreading can cpuhotplug net.ipv6_lib input cve crypto kernel_misc uevent watchqueue
verás por runltp
script de shell en la salida. También menciona un conjunto de archivos de registro donde LTP escribirá registros de prueba (más sobre eso a continuación):
COMMAND: /opt/ltp/bin/ltp-pan -e -S -a 65457 -n 65457 -p -f /tmp/ltp-fDmoZVhRub/alltests -l /opt/ltp/results/LTP_RUN_ON-2022_09_16-19h_00m_26s.log -C /opt/ltp/output/LTP_RUN_ON-2022_09_16-19h_00m_26s.failed -T /opt/ltp/output/LTP_RUN_ON-2022_09_16-19h_00m_26s.tconf
LOG File: /opt/ltp/results/LTP_RUN_ON-2022_09_16-19h_00m_26s.log
FAILED COMMAND File: /opt/ltp/output/LTP_RUN_ON-2022_09_16-19h_00m_26s.failed
TCONF COMMAND File: /opt/ltp/output/LTP_RUN_ON-2022_09_16-19h_00m_26s.tconf
[ Get a cheat sheet of Linux utilities and commands for managing servers and networks. ]
Este ltp-pan
El ejecutable con las opciones apropiadas es uno de los siguientes comandos ltprun
transferir.
$ file /opt/ltp/bin/ltp-pan
/opt/ltp/bin/ltp-pan: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b5c2f6e620a58776f2a3858953e1dc74a38bf1f9, for GNU/Linux 3.2.0, with debug_info, not stripped
A continuación, la salida muestra un registro de las pruebas que se están ejecutando, una a la vez.Esto es abort01
El registro de la prueba, con el comando que se está ejecutando, el archivo C de origen del que se derivó la prueba, un resumen de cómo se realizó la prueba y si pasó o falló:
Running tests.......
<<>>
tag=abort01 stime=1663335027
cmdline="abort01"
contacts=""
analysis=exit
<<>>
tst_test.c:1526: TINFO: Timeout per run is 0h 00m 30s
abort01.c:62: TPASS: abort() dumped core
abort01.c:65: TPASS: abort() raised SIGIOT
Summary:
passed 2
failed 0
broken 0
skipped 0
warnings 0
Vea qué pruebas LTP está ejecutando en segundo plano
Para ver qué pruebas se están ejecutando en segundo plano, tenga en cuenta el ID de proceso (PID) de su shell antes de ejecutar runltp
guion:
$ echo $$
2321
luego ejecutar pstree
Ordenar:
$ pstree -pa 2321
sshd,2321
└─bash,2322
└─bash,2348
└─runltp,65457 /opt/ltp/runltp
└─ltp-pan,65625 -e -S -a 65457 -n 65457 -p -f /tmp/ltp-fDmoZVhRub/alltests -l...
└─fallocate06,80752
└─fallocate06,80794
Este ejemplo muestra runltp
. Tu puedes correr pstree
orden interno watch -n1
Actualice constantemente la pantalla a medida que se realicen nuevas pruebas.
[ Get the Linux watch command cheat sheet. ]
Ver resultados de la prueba
LTP almacena los resultados de las pruebas en /opt/ltp/results/
Tabla de contenido. Los archivos de registro de prueba tienen el nombre de la fecha y la hora en que se ejecutó el conjunto de pruebas, y puede ver registros específicos incluso si ejecuta LTP varias veces.
Al ejecutar el conjunto de pruebas, puede utilizar tail -f
Siga el progreso de LTP en el archivo de registro:
$ ls -ld /opt/ltp/results/
drwxr-xr-x. 1 root root 74 Sep 16 19:00 /opt/ltp/results/
$ tail -f /opt/ltp/results/LTP_RUN_ON-2022_09_17-17h-10m_26s.log
chroot01 PASS 0
chroot02 PASS 0
chroot03 PASS 0
chroot04 PASS 0
clock_adjtime01 PASS 0
clock_adjtime02 PASS 0
clock_getres01 PASS 0
clock_nanosleep01 PASS 0
[...]
Una vez completada la ejecución de la prueba LTP, puede ver el resultado final en el mismo archivo de registro. Muestra el número total de pruebas ejecutadas, cuántas pruebas se omitieron, fallaron y más. Estos resultados son su punto de partida para comprender por qué falló la prueba y determinar por qué falló.
$ tail -f /opt/ltp/results/LTP_RUN_ON-2022_09_17-10h_55m_36s.log
perf_event_open03 CONF 32
-----------------------------------------------
Total Tests: 1379
Total Skipped Tests: 173
Total Failures: 3
Kernel Version: 5.19.8-200.fc36.x86_64
Machine Architecture: x86_64
Hostname: testhost.com
ejecutar una sola prueba
LTP tiene una variedad de pruebas que generalmente tardan mucho tiempo en completarse.Si está interesado en ejecutar solo una prueba, pase a testcases/bin
directorio y busque la prueba que desea ejecutar.Por ejemplo, aquí se explica cómo encontrar y ejecutar fork()
prueba:
$ pwd
/opt/ltp/testcases/bin
$ ls | grep -i ^fork | xargs
fork01 fork02 fork03 fork04 fork05 fork06 fork07 fork08 fork09 fork10 fork11 fork12 fork13 fork14 fork_exec_loop fork_freeze.sh
$ ./fork01
fork01 1 TPASS : fork() returned 1117799
fork01 2 TPASS : child pid and fork() return agree: 1117799
$ ./fork02
fork02 0 TINFO : Inside parent
fork02 0 TINFO : Inside child
fork02 0 TINFO : exit status of wait 0
fork02 1 TPASS : test 1 PASSED
ejecutar pruebas específicas que coincidan con el patrón
Para ejecutar pruebas que coincidan con un patrón específico, use -s
Seguido del patrón de nombre de la prueba que le interesa. Por ejemplo, si desea ejecutar solo casos de prueba relacionados con la escritura:
$ /opt/ltp/runltp -s write
Aleatorizar el orden de prueba
Las pruebas LTP generalmente se ejecutan en orden alfabético.usar -R
Indicadores para ejecutar pruebas en orden aleatorio. En este resultado de ejemplo, tenga en cuenta que las pruebas no están en ningún orden en particular:
$ /opt/ltp/runltp -R
$ tail -f LTP_RUN_ON-2022_09_17-20h_15m_43s.log
Test Start Time: Sat Sep 17 20:15:44 2022
-----------------------------------------
Testcase Result Exit Value
-------- ------ ----------
execve02 PASS 0
fs_bind_move10_sh PASS 0
kill09 PASS 0
dio04 CONF 32
msync02 PASS 0
read01 PASS 0
^C
ejecutar prueba de red
Si solo desea ejecutar pruebas relacionadas con la red y omitir el resto, use -N
bandera.
$ /opt/ltp/runltp -N
Se ejecuta bajo una carga de CPU de fondo adicional
El comportamiento del sistema bajo una carga pesada suele ser diferente de cuando está inactivo. Podría tener sentido simular la carga de trabajo antes de ejecutar las pruebas.En el siguiente ejemplo puedes ver que usé -c
La opción es seguida por el recuento de CPU en mi sistema (12). LTP ejecuta múltiples cargas de CPU en el sistema, según -c
opción y comience a ejecutar pruebas bajo esa carga de trabajo:
$ lscpu | grep '^CPU(s)'
CPU(s): 12
$ /opt/ltp/runltp -c 12
Ejecute varias instancias del conjunto de pruebas
Puede ejecutar varias instancias del mismo conjunto de pruebas LTP en paralelo -x
Opciones:
$ /opt/ltp/runltp -x 5
Enviar registros a un archivo separado
LTP le permite utilizar -l
bandera:
$ /opt/ltp/runltp -l /tmp/ltp.log
$ tail -f /tmp/ltp.log
tag=alarm02 stime=1663426546 dur=0 exit=exited stat=0 core=no cu=0 cs=0
tag=alarm03 stime=1663426546 dur=0 exit=exited stat=0 core=no cu=0 cs=1
tag=alarm05 stime=1663426546 dur=2 exit=exited stat=0 core=no cu=0 cs=0
tag=alarm06 stime=1663426548 dur=3 exit=exited stat=0 core=no cu=0 cs=0
tag=alarm07 stime=1663426551 dur=3 exit=exited stat=0 core=no cu=0 cs=0
tag=bind01 stime=1663426554 dur=0 exit=exited stat=0 core=no cu=0 cs=1
tag=bind02 stime=1663426554 dur=0 exit=exited stat=0 core=no cu=0 cs=0
tag=bind03 stime=1663426554 dur=0 exit=exited stat=0 core=no cu=1 cs=0
tag=bind04 stime=1663426554 dur=0 exit=exited stat=0 core=no cu=0 cs=0
tag=bind05 stime=1663426554 dur=0 exit=exited stat=0 core=no cu=0 cs=1
^C
Comprobar el papel de la prueba
Hasta ahora me he centrado en ejecutar las pruebas y verificar los registros para determinar si las pruebas pasaron o fallaron. Pero, ¿qué sucede cuando se necesita conocer los pasos dados por el caso de prueba?
Para hacer esto, debe abrir el código fuente C de la prueba que desea explorar más a fondo.Para hacer esto, muévase a testcases
Clona el directorio en el repositorio de Git y abre el archivo fuente.Por ejemplo, esto es fork01.c
Código de caso de prueba:
$ pwd
/root/ltp/testcases/kernel/syscalls/fork
$ cat fork01.c
Description of the test
* OS Test - Silicon Graphics, Inc.
* TEST IDENTIFIER : fork01
* EXECUTED BY : anyone
* TEST TITLE : Basic test for fork(2)
* PARENT DOCUMENT : frktds02
* TEST CASE TOTAL : 2
[...]
* TEST CASES
* 1.) fork returns without error
* 2.) fork returns the pid of the child
[...]
Este Description of the test
Los comentarios en el código fuente brindan detalles sobre lo que está haciendo el caso de prueba. Si bien es posible que dichas revisiones no se apliquen a todas las pruebas, son un buen punto de partida. El conocimiento básico de programas C y scripts de shell es suficiente para comprender la mayoría de los casos de prueba.
prueba linux
LTP es una excelente manera de explorar los aspectos internos de Linux y aprender a escribir programas para probar sistemas Linux. LTP es de código abierto y puede agregar nuevos casos de prueba o mejorar los existentes. Evite ejecutar el conjunto de pruebas en un sistema de producción, ya que puede encontrar algunas fallas que podrían afectar negativamente al sistema. Primero, recomiendo ejecutar este conjunto de pruebas en una VM de prueba para familiarizarse con las pruebas y lo que sucede en segundo plano.