Guía de desarrollo de guías

Una buena vida comienza con la prueba.

Un programador que no escribe casos de prueba automáticos no es un buen ingeniero de pruebas. Alentamos a todos los proyectos a establecer casos de prueba automatizados completos desde el principio. Con el desarrollo del proyecto, la inversión inicial se verá recompensada cientos de veces.

Continuemos con el ejemplo de la sección anterior y veamos cómo usar fibjs para escribir casos de prueba.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
const http = require('http'); const path = require('path'); var hello_server = { '/:name(fibjs.*)': (req, name) => { req.response.write('hello, ' + name + '. I love you.'); }, '/:name': (req, name) => { req.response.write('hello, ' + name); } }; var root_server = { '/hello': hello_server, '/bonjour': hello_server, '*': http.fileHandler(path.join(__dirname, 'web')) }; var svr = new http.Server(8080, root_server); svr.start();

Un marco de prueba vacío

Comencemos con un marco de prueba básico:

1 2 3 4 5 6 7 8 9 10
var test = require('test'); test.setup(); describe('hello, test', () => { it('a empty test', () => { }); }); test.run();

Guarde como test.jsmás tarde, en la línea de comando fibjs test.js, verá el siguiente resultado, se escribió un marco de prueba básico.

1 2 3 4
hello, test √ a empty test √ 1 tests completed (0ms)

Iniciar servidor de prueba

Debido a que necesitamos probar el servidor http, primero debemos iniciar el servidor. El caso de prueba enviará una solicitud al servidor y luego probará el resultado de la solicitud para determinar si el servidor cumple con los requisitos:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
var test = require('test'); test.setup(); var http = require('http'); describe('hello, test', () => { it('hello, fibjs', () => { var r = http.get('http://127.0.0.1:8080/hello/fibjs'); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), 'hello, fibjs. I love you.'); }); }); test.run();

En este código, juzgamos si la lógica del servidor es normal verificando si el resultado de http.get es el resultado que esperamos. Según este ejemplo, podemos completar rápidamente un conjunto de pruebas y optimizamos el código al mismo tiempo:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
var test = require('test'); test.setup(); var http = require('http'); function test_get(url, rep) { var r = http.get('http://127.0.0.1:8080' + url); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), rep); } describe('hello, test', () => { it('hello, fibjs', () => { test_get('/hello/fibjs', 'hello, fibjs. I love you.'); }); it('hello, fibjs*', () => { test_get('/hello/fibjs-great', 'hello, fibjs-great. I love you.'); }); it('hello, JavaScript', () => { test_get('/hello/JavaScript', 'hello, JavaScript'); }); it('hello, v8', () => { test_get('/hello/v8', 'hello, v8'); }); }); test.run();

Gestión grupal de casos de uso

Agreguemos la prueba de bonjour. Aunque bonjour y hello son el mismo conjunto de servicios, debido a que la ruta ha cambiado, también necesitamos verificar la corrección del servicio. Esta vez, para administrar mejor los casos de uso, realizamos los casos de prueba Agrupando, al mismo tiempo, debido a que el contenido de prueba de hello y bonjour es el mismo, optimizamos el código nuevamente y probamos los dos conjuntos de servicios con el mismo conjunto de códigos:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
var test = require('test'); test.setup(); var http = require('http'); function test_get(url, rep) { var r = http.get('http://127.0.0.1:8080' + url); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), rep); } describe('hello, test', () => { function test_hello(hello) { describe(hello + ' test', () => { it('fibjs', () => { test_get('/' + hello + '/fibjs', 'hello, fibjs. I love you.'); }); it('fibjs*', () => { test_get('/' + hello + '/fibjs-great', 'hello, fibjs-great. I love you.'); }); it('JavaScript', () => { test_get('/' + hello + '/JavaScript', 'hello, JavaScript'); }); it('v8', () => { test_get('/' + hello + '/v8', 'hello, v8'); }); }); } test_hello('hello'); test_hello('bonjour'); }); test.run();

A través de la agrupación de casos de uso, podemos ver los resultados de la prueba con mayor claridad, y también es fácil omitir y probar un grupo de casos de uso individualmente, lo que acelera la velocidad de desarrollo y prueba. Los siguientes son los resultados de esta ronda de pruebas:

1 2 3 4 5 6 7 8 9 10 11 12 13
hello, test hello test √ fibjs √ fibjs* √ JavaScript √ v8 bonjour test √ fibjs √ fibjs* √ JavaScript √ v8 √ 8 tests completed (3ms)

De acuerdo con el diseño de nuestro servidor, también tenemos un conjunto de servicios de archivos estáticos. Según el ejemplo anterior, creo que puede escribir rápidamente esta parte de los casos de prueba.

Prueba de un clic

Después de la introducción anterior, podemos establecer rápidamente casos de prueba. Pero para poder usar este script de prueba, primero debes iniciar el servidor, esto es muy fácil, queremos ejecutarlo test.jspara completar la prueba directamente. Podemos usar el siguiente código para lograr:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
var test = require('test'); test.setup(); var http = require('http'); var coroutine = require('coroutine'); coroutine.start(() => { run('./main.js'); }); coroutine.sleep(100); function test_get(url, rep) { var r = http.get('http://127.0.0.1:8080' + url); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), rep); } describe('hello, test', () => { function test_hello(hello) { describe(hello + ' test', () => { it('fibjs', () => { test_get('/' + hello + '/fibjs', 'hello, fibjs. I love you.'); }); it('fibjs*', () => { test_get('/' + hello + '/fibjs-great', 'hello, fibjs-great. I love you.'); }); it('JavaScript', () => { test_get('/' + hello + '/JavaScript', 'hello, JavaScript'); }); it('v8', () => { test_get('/' + hello + '/v8', 'hello, v8'); }); }); } test_hello('hello'); test_hello('bonjour'); }); process.exit(test.run());

De la línea 6 a la 10 de este código, agregamos un main.jscódigo de inicio de párrafo , esperamos un poco y luego reiniciamos las pruebas.

Verificación de cobertura de código

Los buenos casos de prueba deben tener en cuenta que los casos de prueba deben cubrir todas las ramas de la empresa para garantizar que la empresa se ejecute correctamente. En este momento, las comprobaciones de cobertura de código se pueden utilizar para determinar si la prueba está completa.

Este proceso es muy simple, solo agregue el parámetro --cov cuando pruebe:

1
fibjs --cov test

Una vez finalizada la prueba, se generará un archivo de registro de fibjs-xxxx.lcov en el directorio actual. En este momento, es necesario analizar el registro y generar un informe:

1
fibjs --cov-process fibjs-xxxx.lcov out

Luego, puede generar un conjunto de informes de análisis en el directorio de salida. Ingrese al catálogo para verificar, puede ver la siguiente página: cov Puede ver que main.jsla cobertura del código alcanzó el 100%, lo que significa que la prueba cubre por completo la lógica del negocio. Haga clic en el main.jsmás puede ver un informe más detallado.

👉 [ Encuentra el asesino del rendimiento ]