Para el cálculo de métricas en las búsquedas, subidas de ficheros, etc. podemos usar alguno de los programas que existen para estas tareas como es JMeter.
JMeter es un programa en Java, del proyecto Apache, que permite testear aplicaciones web. Es una aplicación de escritorio y muy usada en los entornos en los que se utilizan servidores de aplicaciones, sobre todo Tomcat.
Para más información podemos ir a la URL del proyecto: http://jakarta.apache.org/jmeter/
Si no tenemos tiempo de crear una batería de pruebas siempre podemos recurrir al intérprete BASH de Linux, Unix, MacOS, etc. que puede facilitarnos esta tarea.
Haciendo uso de algún WebScript ya implementado en Alfresco o modificando alguno de estos podemos usar las funciones y comandos de BASH para tomar tiempos.
Búsqueda aleatoria:
Una de las pruebas más importantes es el de las búsquedas en Alfresco. En este caso vamos a usar un WebScript de la parte OpenSearch que tiene Alfresco. El problema de este sistema es que solo devuelve los resultados en 3 formatos, HTML, RSS y ATOM, y en nuestro caso necesitamos que los devuelva en formato texto (TEXT) para poder tratarlo. Para esto, solo tenemos que modificar el descriptor para incluir en el contexto la llamada a una plantilla FreeMarker que devuelva texto plano e incluir esta plantilla. Para no «ensuciar» el despliegue lo haremos creando el directorio en alfresco/extension de forma que además podamos conservarlo entre distintas actualizaciones del producto. El sitio para introducir los dos ficheros será: /alfresco/extension/templates/webscripts/org/alfresco/repository/
Los dos ficheros serán los siguientes:
Fichero: keywordsearch.get.desc.xml
Alfresco Keyword Search (OpenSearch Enabled)
Execute Keyword Search against Alfresco Repository (Company Home and below)
/api/search/keyword.html?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/search/keyword.html?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/api/search/keyword.texp?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/search/keyword.text?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/api/search/keyword.atom?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/search/keyword.atom?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/api/search/keyword.rss?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/search/keyword.rss?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
/api/search/keyword.portlet?q={searchTerms}&p={startPage?}&c={count?}&l={language?}
guest
required
Fichero: keywordsearch.get.text.ftl
${row.name}
Una vez introducidos los ficheros en el sitio correspondiente solo queda ir a la URL http://servidoralfresco:8080/alfresco/service/index y pulsar el botón de refresco de los WebScripts.
Ahora podemos ejecutar el script creado para las búsquedas. Este script lo que hace es una búsqueda por una palabra o KEYWORD, guardar los resultados en un fichero y después realizar el número de búsquedas solicitadas de forma automática guardando los tiempo y redirigiéndolos a un fichero para poder editar posteriormente los resultados.
La sintaxis del script es:
Fichero: random_search
# Pruebas de busquedas en Alfresco usando el webscript «search»
# www.fegor.com
if [ ! $# -eq 5 ]
then
echo Sintaxis: random_search user passwd keyword num_randoms alfresco_url
exit 1
fi
echo Realizando consulta completa…
IFSPREV=$IFS
IFS=$’x0A’$’x0D’
curl –user «$1:$2» «$5/service/api/search/keyword.text?q=$3&p=Company%20Home&c=10000&l=es» > random_search_result.txt
echo Comenzando las busquedas…
LINEAS=`cat random_search_result.txt | wc -l`
echo -e «Results of random_search.sh» > random_search_times.csv SG_FOR_I=`date +%s`
for n in $(seq 1 $4);
do
RNM=$RANDOM
let «RNM %= $LINEAS»
let «RNM += 1»
KEYWORD=`head -n $RNM random_search_result.txt | tail -1 | tr -d ‘r’`
NS_CURL_I=`date +%s%N`
curl –user «$1:$2» «$5/service/api/search/keyword.text?q=${KEYWORD}&p=Company%20Home&c=1&l=es»
NS_CURL_F=`date +%s%N`
let TOTAL_NS_CURL=$NS_CURL_F-$NS_CURL_I
let TOTAL_MS_CURL=TOTAL_NS_CURL/1000000
echo -e «`date`t$KEYWORDt$TOTAL_NS_CURLt$TOTAL_MS_CURL» >> random_search_times.csv
SG_FOR_F=`date +%s`
let TOTAL_SG_FOR=$SG_FOR_F-$SG_FOR_I
echo -e «rrTotal time» >> random_search_times.csv
echo -e «`date`t$TOTAL_SG_FOR» >> random_search_times.csv
IFS=$IFSPREV
Un ejemplo de ejecución del comando sería:
Realizando consulta completa…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 671 0 671 0 0 7910 0 –:–:– –:–:– –:–:– 0
Comenzando las busquedas…
categorysearch.get.atom.404.ftl
show_audit.ftl
categorysearch.get.atom.ftl
my_docs.ftl
general_example.ftl
Y posteriormente en la hoja de cálculo:
Subidas masivas:
Otra de las pruebas es la de realizar subidas masivas y en profundidad de un número de ficheros y comprobar los tiempos de estas subidas. El script es bastante parecido al anterior y hace uso de un WebScript que también está incluido en Alfresco. En este caso hay que crear un «site» llamado «tests» para poder subir los ficheros a dicho espacio.
Fichero: directory_upload
#!/bin/bash
# Pruebas de subidas en Alfresco usando el webscript «upload»
# www.fegor.com
if [ ! $# -eq 5 ]
then
echo Sintaxis: directory_upload user passwd path ext alfresco_url
exit 1
fi
echo «Subiendo…»
IFSPREV=$IFS
IFS=$’x0A’$’x0D’
echo -e «Results of directory_upload.sh» > directory_upload_times.csv
SG_FOR_I=`date +%s`
for f in $(find $3 ( -name *.$4 ));
do
NS_CURL_I=`date +%s%N`
curl -k -X POST –user «$1″:»$2″ -F filedata=@$f -F siteid=»tests» -F containerid=»documentLibrary» -F uploaddirectory=»testsDir» -F filename=»`basename $f`» -F contenttype=»`file –brief –mime $f`» «$5/service/api/upload» | grep ‘description’ | cut -d ‘:’ -f 2 | tr -d ‘»‘
NS_CURL_F=`date +%s%N`
let TOTAL_NS_CURL=$NS_CURL_F-$NS_CURL_I
let TOTAL_MS_CURL=TOTAL_NS_CURL/1000000
echo -e «`date`t$ft$TOTAL_NS_CURLt$TOTAL_MS_CURL» >> directory_upload_times.csv
done
SG_FOR_F=`date +%s`
let TOTAL_SG_FOR=$SG_FOR_F-$SG_FOR_I
echo -e «rrTotal time» >> directory_upload_times.csv
echo -e «`date`t$TOTAL_SG_FOR» >> directory_upload_times.csv
IFS=$IFSPREV
Este script también devuelve un fichero (directory_upload_times.csv) para su edición y estudio mediante cualquier sistema de hoja de cálculo como MS-Excel o OpenOffice.org
Un ejemplo de ejecución podría ser el siguiente:
Subiendo…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3252k 100 278 100 3252k 253 2968k 0:00:01 0:00:01 –:–:– 3014k
File uploaded successfully
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 772k 100 253 100 772k 424 1295k –:–:– –:–:– –:–:– 1435k
File uploaded successfully
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 311k 100 257 100 311k 414 502k –:–:– –:–:– –:–:– 510k
File uploaded successfully
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2485k 100 251 100 2485k 385 3814k –:–:– –:–:– –:–:– 3976k
File uploaded successfully
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 415k 100 251 100 415k 245 406k 0:00:01 0:00:01 –:–:– 429k
File uploaded successfully
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 481k 100 255 100 481k 443 836k –:–:– –:–:– –:–:– 859k
File uploaded successfully
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2471k 100 249 100 2471k 242 2402k 0:00:01 0:00:01 –:–:– 2444k
File uploaded successfully
… procesando los datos: