 Vemos paso a la siguiente ponencia, que recebe o nome de Paites desde las trincheras e para ello recebamos o favor de un aplauso a Paul Rowland. Esperemos un segundo. Bueno, tardes a todos e como eu tengo tendencia a hablar relativamente rápido estáis metadísimos a levantar la mano porque somos pocos e es importante que se entenga. Esta es mi cuarta euro Paisón e en las anteriores sempre detecté como un patrón que es que las charlas máis interesantes son las que son super frikis de la muerte o las que cuentan batallitas e cosas propias de lo que ha sufrido el programadora a largo dos meses e años. E esta es unha mezcla un pouco de las dos. La intención en realidad es pensar e usar cosa, pensar e como usar Paites que típicamente es un test, un framework de testing para cosas que no son e un test puramente. Así que podemos decir que esta pequeña charla es en realidad unha recreación de batallitas de cosas que venen encontrando nos años con Paites. A dia de hoy estoy trabajando na PSL como Xizatmin de lo que hoy en día en Qool llaman ese reo ingeniero de seabilidad e me sinto obligado a decir que na PSL sempre buscamos talento así que se queréis venir e disfrutar de los infinitos dias de sole maiorca estáis máis químitas a decirnos cosas. Así que centrémonos vamos usar Paites para cosas que típicamente son máis de QA o de Xizatmin. Que no, lo que usaría un programador para hacer unit testing. Y centrémonos precisamente nos casos que me idaen encontrando. Calfo número cero, forzar estándares de estilo en nuestro código. La mejor manera de confirmar que o código sigue un Pepocho, un Flacocho, algo similares es que el propio código sea o test. Entonces, Pipinstal Paitest Guion Flacocho tenemos un fichelito precioso que se llama z.cfg de config donde podemos, por exemplo, alargar e indicar el número de líneas que tenemos máximo e Pim, ya tenemos un test fantástico tal cual haremos Paites menos menos Flacocho e esto revisará nuestro propio código del repositorio a la búsqueda de que tenemos variables sin usar imposásteriscos e similares. Lo chulísimo de todo esto es que nos quitamos una carga una carga clásica de, bueno, queremos pasar sempre o Pepocho, pero pondremos un hook en el guide para cuando hagamos un prepool que confirme. Eso nunca funciona, a gente le molesta, es un rollo. Pero, el truco viene quando juntamos que el Paites puede sacar su salida como un fichel XML entonces con un JUnit XML path nuestro amigo Jenkins le estos fichelos por lo cual, en caso de que estemos usando Jenkins la gracia venderá que podemos tener que cuando hagamos un push de nuestro repositorio se passa el test que obliga a pasar el Pepocho o el Flake e el propio Jenkins con el tiempo nos poderá indicar la tendencia de como de mucho o pouco seguimos los estándares. Lo interesante de todo eso é darse cuenta de como precisamente vamos a resolver problemas puramente sociales con la parte tecnológica orientada a test. Caso número 1 haremos un miniscrapper Unha cosa fantástica é poder usar Selenium vamos a hacer un pequeno script que vaya no web e usando Selenium haga un login e unas ciertas cositas. Hemos de recordar que en Python hay una palabra clave chamada assert que nos sirve para confirmar se unha variable es cierta simplemente podemos hacer un request.oke devolver true or false então assert en ese variable confirmará o notar una excepción en caso de que se este mal que queremos que confirmar que item sempre vale maior que 3 pues assert item mayor que 3 e esta será a piedra fundamental de los test en Python test. Outra herramienta genial del Python test é o conceito de fixtures un fixture é en realidad a manada de inyectar un trozo de código, una independencia de la cual poderemos nosotros ir corregando en nuestros test. Una de las gracias del Python test é que tiene unos fixtures potentísimos de QC Unit porque simplemente añadiendo como parametro formada nuestras funciones el nombre del fixture ya tendremos acceso a él automáticamente. Por exemplo, se simplemente tenemos que hacer algo con un ficherito haremos unha función al cual ponemos el fixture de me pedir e con eso ya tenderemos acceso a un directorio temporal. Los fixtures se usarán como en interés de dependencias porque en ellos mismos podemos identicar o que vamos a usar e con ello vamos a explotar un módulo fantástico que se llama splinter pipinstal pytest splinter nos dará acceso a un selenium arrancado desde pytest e o que vamos a hacer é un fixture extra o qual nosotros haremos, por exemplo, login e o fixture browser ya será a instancia directamente del selenium. Por esta manera haremos login browser e este browser ya podemos hacer visitas poderemos poner nombres e usuarios e poniendo pytest fixture como decorador este login se acaba de convertir en outro fixture e podemos ir componiendo unha detrás del outro. Así vamos ya escribir nuestro primer teste de verdade creamos unha función test añadit en por exemplo e ponemos propiamente el browser e el login como parametros formales de nuestra función e habíamos heredado browser de la parte del pytest splinter e o login lo acabamos de escribir entonces, isto nos ofrece que quando iremos a la primera linea del teste ese browser ya estará logeado porque gracias al fixture del login já tenemos confirmación de que ha pasado por allí. Entonces, o fantástico vendrá que tendremos el browser podemos buscar que haya un cierto elemento entrar dentro un iframe hacer un click, confirmar que no todo esto a nivel de pytest pero fijaos en la cantidad de trabajo que nos hemos ahorrado hemos arrancado un browser selenium, hemos entrado en una web hemos hecho login todo simplemente por poner dos parametros formales o interesante vendrá es que afina acabamos con test normales e corrientes así que, se falla cualquier cosa podemos ponernos un IPv e literalmente allí e hacer pruebas e en este caso simplemente ponemos import IPv se trase a pelo e quando arrancamos el pytest ponemos un parametro menos ese para que se pare entonces allí, cuando detecte o set 3, simplemente tendemos un hash e podemos depurar todo o que queramos tenderemos nuestro browser en este caso e podemos hacer consultas e o que querais caso número 2 tuve un jefe hace unos años que se le llama, que le llamaremos mariano al cual encantaba hacer denagis humano iba todo o rato a la web funciona, funciona, va todo bien los pagos, ahora entro Brasil, va bien pero decidimos robotizarlo e decidimos el mariano 2.0 o mariano 20 que era má chule para ter el número robotizamos entonces o mariano mariano en realidad es simplemente un scrapping el cual tenemos un fichero declarativo que queremos indicar o que queremos hacer e marca por ejemplo también redirecciones tenemos o domírio principal el cual va imediatamente a 301 e no llevan a la web en este caso haremos un fichero e pondremos unsides e distintos ejemplos de la Wikipedia por ejemplo a catalana, a alemana e fichero es má largo esto nos montará luego, queremos al k.wikipedia.rg e queremos confirmar que nos dao 301 para llevar a este churro aquí e que esta página que nos dará tenga el título titel e el objeto artículo del día pues este presente que le encontremos con el id mpleft entonces un de los trucos es que podemos engañar al paides e no hace falta que el fichero realmente se llame x barro baja lo que sea.py puede ser literalmente un script normal maricorriente así que haremos paides e llamanemos a mariano 20 en realidad mariano es relativamente sencillo e uno de los trucos vendrá de lo que usaremos que se llaman parametraes son maneras de ejecutar distintos tex sin reescribirlos pero con distintos parametros para ello vamos hacer una función sencilla un load size que nos leerá e generá esa sencilla navet tuple con los datos propriamente de la web entonces aquí explotaremos el paides parametraes con la función que acabamos de escribir esta función devuelve a ser yield con load size e nos irá devolviendo un size después del otro e en este caso sencillo confirmaremos las redirecciones teniamos montado la home page e acabamos de construir a dao redirect e confirmar a ser ha funcionado, tiene un histórico este histórico es unha redirección permanente o rl fantástico con esto, ya que vamos de construir nos test de scrap e de ida confirmar que existe que es una redirección ahora vamos a complicarlo un poco más vamos buscar el objeto del dia el artículo del dia lo encontraremos con el site ID today confirmaremos el título e volvemos a usar o size como parametraes simplemente esto paides mariano20.py e ya estará ningún problema quando empezaba a hacer las pruebas para arrecer a charla me di unha petada increíble e fijaos que fantástica a salida del paides nos mítico los valores dos variables pasados por parametro e hizo un print de cada uno dos valores que tenia me señala el código de la línea exacta onde ha fallado a set e las evaluaciones de lo que valía site.title e subtitle string literalmente me dice aqui valía wikipedia e estava mostrando el título en alemán wikipedia differa en ciclo pedi e esto simplemente es que me había equivocado en el fichero yamele e habia duplicado la línea pero fijaos lo genial que es como indica claramente donde está o fallo entonces nadie empezara a ser print ele evaluará todas las variables locales exactamente que es lo que fallo entonces simplemente en este caso agora ya sabemos que era wikipedia en un lado e en el outro vamos a llamele e el test pasó pero vaya tontería tan paio que pasan os test o paides tiene unha herramienta genial que es para poder ordenar los test que fallaron podemos ajutar el primero los que fallaron en el anterior turno solamente que pare cada vez que encontra un fallo o incluso que pase todos os test pero reordenado según si la última vez pasaron o nono todo esto se entiende con os parámetros exist first last fail e fail is first entonces en nuestro caso fui corregir los dos ejemplos el cambio del catalán alemán paides mariano-lf e ya está efectivamente fijaos como solamente ejecutó los últimos dos test los otros 6 que sí que habían pasado ningún problema e ahora decimos, bueno, tenemos un fantástico realizado, el cual no es la cosa má rapida del mundo, queremos mejorar el rendimiento hacemos un time sencillo e mi simple a desail de casa tardó 6 segundos en pasar los 8 test pipi-stall paides-guio-xd e este es una pasada porque simplemente con el parámetro-n podemos indicar el número de procesos en el cual se va a paralizar e incluso podemos poner menos auto e que se espabile e confirmamos que efectivamente funcionan hemos pasado de 6 segundos y pico a 2,8 donde en realidad el mayor tiempo se ha gestionado en repartir entre los workers los test pero este es fantástico a lo largo de los días porque no solamente nos dos test tienden a crecer sinos que además la mayoría de máquinas hoy en día tienen procesadores así que no tiene ningún sentido en aprovecharlo que queremos probar que te van má lentos o má rápido, pues paides ya ya ha incluido un fantástico menos menos durations que nos podemos, nos ordena por tiempo que ha durada cada uno de los test entonces podemos ir a buscar qual son los que están más o menos que tenemos problemas de red no pasa nada, hay un módulo genial que se llama flaki, el cual nos genera un decorador e podemos indicar el número de veces mínimos y máximos que se ejecutese test la gracia de todo esto es que muchas veces, por exemplo, os íbamos por red el test puede fallar, puede no funcionar puede la página render cien san bien con selen y un afilacabo en gris, a veces no carga el todo bien entonces podemos indicar, bueno pases mínimo 1 y por exemplo, máximo 3 esto hará que nos quita un montón de código, un montón de problemas simplemente, sí, nuestro problema es la red hará el test, nos va e que pasa unha sola vez, ya estará caso número 3 nos viene la gente de QA e nos pide que ha una cosa rarísima de estas de protocolas queremos que a partir de ahora pues empiecen con un código numérico a esquerda, tengo una para brita e nos cuantos, cuantos máis e esto lo podíais hacer ebentemente un Java, un PHP, un bash, lo que querrais pero aparte que a gente luego tiene tendencia a pedir más, entonces esto se va a empezar a complicar ebanis, más test e más cosas esto es claramente un expresión regular confirma el parámetro e poca cosa máis vallamos a hacer en Python como un test importantísimo la gracia de todo esto es usar Python test para cosas que no son típicamente test funcionales e test unitarios e como hayamos visto antes el Asset nos permita hacer cositas como confirmadas en valores true or false pero el Asset de Python test es mucho máis potente e máis paetónico porque nos permita hacer cosas como comparar a diccionarios e literalmente haremos comparar un Asset, dos diccionarios e no solamente recorrerá que todas las claves sean iguales e já te avisará si hay claves distintas sino que ademas en los elementos sean también los mismos en los dos lados si se encuentra que el valor de B es distinto en uno nos avisará e ademas nos dirá en que lado cada diccionario tiene más cosas que el otro lo genial de esto es que no solamente está implementada para diccionarios no está para listas, para tuplas, para conjuntos e es muy fácil extenderlo de esta manera las salidas de error son súper claras, precisas exactamente donde hay que ir a revisar ademas Python test tiene gestión tanto de excepciones de guardings como de precates a nivel de gestores de contexto, simplemente apelo with Python test once e esperemos que lo que haya ahí dentro levante un guarding en caso que no levantara aquí haría una excepción e un acerte error Guardian expected podeis seguir entendiendo más o menos por donde va os tiros usaremos los Python test precisamente para nos completamente gestionar este tipo de cosas así puedes a la práctica diremos, bueno, el acuerdo pero es un Python test como demonios le paso yo a los directorios que a gente do quakir verificar entonces Python test tiene una cosa fantástica que se llama adoption e puede añadir distintos parámetros añadiremos a los parámetros formales de Python test general menos menos check files esto cogerá un directorio por defecto en el que este caso é un Python test example pero la gracia es que podemos hacer exactamente esto menos menos check files e el directorio que queramos fantástica, ahora ya tenemos que en realidad el Python test en este caso nos convierte en una aplicación normal de sistema como podemos ahora además esto integrarlo con la habilidad de ir aprobando con los distintos ejemplos e aquí es donde empieza casi magia negra o oscurantismo recogemos del metafung del Python test la opción check files podemos meter dentro do fichelito comf test.pa distintos elementos que se procesan antes de ejecutar el primer test de todos la gracia vendrá que hacemos metafung cof in cooption check files e nos meterá dentro de este array los parámetros de directorios que hemos usado quando hemos llamado al Python test ahora simplemente recorreremos el directorio vamos añadiendo al directorio a un array matches los fichelitos que queremos confirmar e aquí está a segunda parte metafung parametrais check vamos a inyectar dentro do variable check os valores encontrados de los distintos fichelos entonces la gracia de todo esto simplemente escribemos nuestro test file name con un parametro formal check describir del parametro así entonces este test exactamente ya se ejecutará por cada fichero que encontremos en el directorio pasado cuando hemos ejecutado o Python test simplemente usaremos o assert para confirmar por ejemplo, en nuestro listado de tensiones permitidas e a pelo haremos assert extension e ya incluso a línea de log más fina e luego nos pende a gente de QA e nos dirá verificame por favor que tampoco es alto a línea de Mac que a veces se le escapa a alguien pues tal cual rehusaremos el check que ya venido automáticamente generado haremos el fichero, recorreremos e el assert lo podremos usar sobre toda a lectura directamente haremos assert confirmar el salto de carro de Mac no está en la lectura del fichero en casas de encontrar a uno saldría el assert error indicando a línea exacta con el test exacto e además incluso nos vendiános pedirán bueno, pues ahora verificame que tampoco está en unicode e esto ya se complica no sé xe alguna vez has que haber pegado con unicodes e codificaciones isimilares pero en Mac es un infierno pero estamos usando Python así que a la práctica, mejor explotar las cosas propias del Python como la magia que está alfa e magic es un módulo de gestión de ficheros encodings isimilares e o fantástico vendrá de que simplemente decidimos ser flag queremos usar tenemos este gestor de contexto con el check que nos ha venido ya del fichero del com test original sí, esto funciona genial nos dará un encoding que lo confirmaremos que sea utf8 que no, también es un assert fault no he podido decodificar el fichero imaginaos, el cristo que habría sido empezare a hacer esto en bash e luego cada día que nos viene a gente do QA pedirnos algo má e pedirnos algo má e en este caso era simplemente ir añadiendo distintas funciones extras porque el check ya estaba pasaba como parametrais e era automático para todos los ficheros de ese módulo sinceramente, muchas veces diréis bueno vale, esto nos servirá para un caso pero necesito con el tiempo confirmar que lo que me funcionará me funciona entonces añadiremos dentro del propio test un directorio de ejemplos pero que nos molestará porque afinal acabo con el usuario tenemos que poner casos negativos casos que sepamos que están mal ficheros en coreano ficheros que no tengan saltos de línea de mac la mejor manera es incrustar dentro dos propios test que estamos haciendo test que sabemos que fallan e por eso usaremos el xfade el xfade es una utilidad que podemos marcar con un cierto decorador la función e se esta función pasara correctamente es decir se ejecuta toda da PAP sin fallos, ni excepciones, ni asers entonces explotaria e nos diría no, esto non te tinha que funcionar la gracia viene que el xfade se puede integrar dentro del código entonces lo que haremos es un listado por ejemplo de ficheros que sabemos que tienen que fallar e directamente se el fichelito que entra del check forzar que el pi test falle fijaos en 30 segundos lo fantástico que es poder autodocumentar, non solamente el código sino que, nosotro luego significa que podremos pasar el pi test sobre el código que acabamos de escribir e como ya hemos pasado el parámetro por defecto, el diretorio con los ejemplos podremos hacer pi test e comprobará que nuestros test tamín sean correctos isto é todo amigos, gracias las guías del ponente do AuroPython nos recomendan poner gatos, así que puso un gato pero obviamente é completamente aberta a preguntas además vamos sobrados de tiempos que practica e valiosa ha sido tu información alguien quiere preguntar algo, tenemos 5 minutos o me comentaba que le gusta que le gan preguntas entonces podreamos aprovechar tenemos 5 minutos para aprofundizar sobre o tema no bueno graxas graxas graxas