<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alfred Tejeda</title>
    <description>The latest articles on DEV Community by Alfred Tejeda (@soyalfred-qa).</description>
    <link>https://dev.to/soyalfred-qa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1220232%2F91d4fa81-de8a-4cc6-8b8b-5a5c109b2036.png</url>
      <title>DEV Community: Alfred Tejeda</title>
      <link>https://dev.to/soyalfred-qa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/soyalfred-qa"/>
    <language>en</language>
    <item>
      <title>Segunda parte: Definiciones/Conceptos del día a día</title>
      <dc:creator>Alfred Tejeda</dc:creator>
      <pubDate>Wed, 26 Jun 2024 13:37:26 +0000</pubDate>
      <link>https://dev.to/soyalfred-qa/segunda-parte-definicionesconceptos-del-dia-a-dia-4oa2</link>
      <guid>https://dev.to/soyalfred-qa/segunda-parte-definicionesconceptos-del-dia-a-dia-4oa2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07o8hg01vfgl2ciiaveu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07o8hg01vfgl2ciiaveu.png" alt="Rest API" width="800" height="337"&gt;&lt;/a&gt;&lt;br&gt;
Como mencioné en la introducción, la idea al finalizar esta serie de publicaciones es tener las herramientas y el conocimiento para poder convertirnos expertos en API Testing, por tanto poder manejar y tener claridad de los conceptos es esencial. No vamos a crear un diccionario, ya que haría la publicación muy larga si buscamos definir todo, así que el enfoque va a ser definir lo que vamos a estar utilizando en nuestro día a día. Empecemos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contract o contrato&lt;/strong&gt;&lt;br&gt;
El contrato es básicamente la específicación de como se de debe hacer la petición y como va a responder este según la manera en la que se arma la petición. (Esencial para hacer contract testing)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cURL&lt;/strong&gt;&lt;br&gt;
La definición oficial: es una herramienta de línea de comandos, que permite transferir datos hacia o desde un servidor sin interacción del usuario. &lt;br&gt;
En la actualidad es un estandar para compartir una petición que estamos realizando, ya sea desde el navegador o de alguna herramienta para diseño/prueba y prueba de APIs. Para entender mejor como se construye un cURL les recomiendo visitar &lt;a href="https://curlbuilder.com/" rel="noopener noreferrer"&gt;Curl Builder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;&lt;br&gt;
Los endpoints son en pocas palabras el medio con lo que accedemos o interactuamos con la API aunque es normal al momento de hablar de endpoint mencionar solo la path de este, ejemplo: si tenemos &lt;a href="http://localhost/user/info" rel="noopener noreferrer"&gt;http://localhost/user/info&lt;/a&gt; , diríamos: El que falla es el user info , cada endpoint es la url + metodo + data disponible que utilizamos para hacer alguna acción sobre el servidor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Header&lt;/strong&gt;&lt;br&gt;
Los headers tienen una definición un poco compleja y para entender esto al 100% debemos hablar de redes (y soy bastante ignorante en esta materia), voy a tratar de simplificar el concepto. &lt;br&gt;
Debemos saber que podemos tener cabeceras de petición y de respuesta.&lt;br&gt;
Ya con esto podemos decir que en las cabeceras de petición, lo utilizamos para proporcionar al servidor información adicional o complementaria del tipo de petición que estamos realizando. &lt;br&gt;
La cabecera de petición más común es el &lt;code&gt;Content-Type&lt;/code&gt; que lo utilizamos para indicar el formato de texto a utilizar en el payload (definido más abajo), esto se conforma por un par llave-valor por lo que la definición completa de esta cabecera sería &lt;code&gt;Content-Type:application/json&lt;/code&gt; &lt;br&gt;
Otra cabecera muy común es &lt;code&gt;Authorization&lt;/code&gt; utilizada para agregar un token.&lt;br&gt;
En la industria también se ha creado un estandar para utilizar cabeceras customizadas y estas tienden a iniciar con una letra equis (x) aunque no es obligario, ejemplo: &lt;code&gt;X-Api-Key&lt;/code&gt; &lt;br&gt;
Existen palabras reservadas o cabeceras pre-definidas y justo cuando una cabcera custom coincide con el nombre de una de las pre-definidas es cuando entra en juego el usar la X. Les comparto el listado completo de cabeceras por si quieren darle una mirada: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers" rel="noopener noreferrer"&gt;List of all HTTP headers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Path param&lt;/strong&gt;&lt;br&gt;
Path param (parámetros de ruta) son básicamente variables de solicitud que se agregan a la url para indicar que queremos acceder a un recurso específico. No existe un posición específica en la que deba estar, aunque es muy común que al momento de crear la definición del endpoint se agregue al final de la ruta, ejemplo: &lt;code&gt;/user/1234&lt;/code&gt; , a nivel de código encontraremos algo así &lt;code&gt;/user/:userId&lt;/code&gt;&lt;br&gt;
Otro ejemplo que puedo mostrarles: &lt;code&gt;/client/:clientId/department/:departmentId/employees&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payload o Request Body&lt;/strong&gt;&lt;br&gt;
En el contexto de APIs, payload o request body hace referencia a los datos que van a ser enviados en una petición. En esencia el conetenido de un mensaje que será enviado entre un cliente y un servidor. La mayoría de las APIs implementan JSON como formato pero hay que ser consciente que no es el único, también existen XML, Raw text y Plain text. (Desconozco si existen otros formatos. Si conocen algún otro lo pueden dejar en los comentarios y lo agrego y así habilitamos de alguna manera el modo colaborativo).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query param&lt;/strong&gt;&lt;br&gt;
A diferencia de los parámetros de ruta, los parámetros de consultas son fáciles de identificar: se colocan al final de la url, viene después del signo de interrogación (?) y se utiliza bajo la premisa de llave-valor. &lt;br&gt;
Estos parámetros tienen en defición una funcionalidad específica: filtrar la respuesta, un caso de uso común sería seleccionar los usuarios que solo estén con status pendiente, ejemplo: &lt;code&gt;/users?status=pending&lt;/code&gt; &lt;br&gt;
Se pueden utilizar cuanto parámetros sean necesarios para ser lo más específico en lo que deseamos obtener como respuesta, y para poder agregar más parámetros tan solo debemos agregar un ampersand(&amp;amp;), ejemplo: &lt;code&gt;/users?status=pending&amp;amp;sort=desc&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dato extra: también existe &lt;strong&gt;matrix param&lt;/strong&gt; aunque la utilización es casi nula, siempre suma el saber de su existencia.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Request&lt;/strong&gt; &lt;br&gt;
Bastante sencillo, es la petición en si. Podemos decir que al utilizar un cURL estamos creando una petición.&lt;br&gt;
Para desglozar un poco, podemos decir que una request se compone por: un método, una url, cabeceras y payload &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Response&lt;/strong&gt;&lt;br&gt;
Al igual que request, la definición es muy sencilla. Es la respuesta a una petición. Esta respuesta se compone por: cabeceras de respuesta, un código de estatus y un cuerpo de respuesta (si aplica)&lt;/p&gt;




&lt;p&gt;Como describo en el título las deficiones presentadas son solamente aquellas que vamos a estar utilizando en el día a día, obviamente nos faltan muchas definiciones por lo que les comparto para búsqueda otras que son importantes de conocer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API&lt;/li&gt;
&lt;li&gt;Rest&lt;/li&gt;
&lt;li&gt;API Rest&lt;/li&gt;
&lt;li&gt;API Rest full&lt;/li&gt;
&lt;li&gt;URI&lt;/li&gt;
&lt;li&gt;Métodos o Verbos HTTP&lt;/li&gt;
&lt;li&gt;HTTP &lt;/li&gt;
&lt;li&gt;Signature (hmac)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Con esto hemos finalizado lo que podríamos llamar la introducción a APIs, en la siguiente publicación hablaremos sobre las buenas prácticas para construcción de una Api Rest que nosotros como probadores debemos conocer, ya que también es parte de nuestra labor poder participar en la definición de los endpoints.&lt;/p&gt;

&lt;p&gt;Esta lista ha sido corta pero con saber esto ya tenemos medio camino cruzado. &lt;br&gt;
¿Consideras qué hay alguna otra definición que debamos agregar? Comentala y actualizo! &lt;/p&gt;

</description>
      <category>testing</category>
      <category>api</category>
      <category>apitesting</category>
      <category>e2etesting</category>
    </item>
    <item>
      <title>Primera parte: Introducción API Rest</title>
      <dc:creator>Alfred Tejeda</dc:creator>
      <pubDate>Thu, 06 Jun 2024 01:31:41 +0000</pubDate>
      <link>https://dev.to/soyalfred-qa/primera-parte-introduccion-api-rest-4109</link>
      <guid>https://dev.to/soyalfred-qa/primera-parte-introduccion-api-rest-4109</guid>
      <description>&lt;p&gt;API Rest es tal vez la arquitectura de backend más utilizada en la industria y que parece ser atemporal. Aunque fue creada para resolver un problema, se usa para solucionar casi cualquier problema 😶.&lt;/p&gt;

&lt;p&gt;Al ser (volvernos) probadores funcionales, el backend es algo que generalmente desconocemos ya que solo nos piden que nuestro foco esté en lo que ve el usuario, disminuyendo así las combinaciones o escenarios de pruebas posibles a ejecutar ya que algunas casuísticas requieren manipulación de datos a nivel de base de batos (y no tenemos acceso a ellas) o manipulación de las respuestas de los endpoints que son consumidos (ya que desconocemos la manera en como la información consultada es devuelta (retornada) al front).&lt;/p&gt;

&lt;p&gt;Como mencioné al principio Rest API es muy utilizado, tan así; que podemos notar su presencia en casi todas las aplicaciones que usamos en nuestro día a día así como las que tenemos que probar (ya sean web, mobile, desktop, iot) por tanto conocer y sobre todo entender con que se come API marca una gran diferencia a la hora de asegurar la calidad de un producto digital.&lt;/p&gt;

&lt;p&gt;Luego de esta mediana introducción, ahora si entremos en materia:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qué es API Rest?&lt;/strong&gt;&lt;br&gt;
Sin entrar en tecnicismos (más adelante si profundizaremos en esto) y de manera muy simple, una API es básicamente un medio que permite crear, consultar,  actualizar y/o eliminar información con el sistema que estamos interactuando (interno o externo) sin importar con que lenguaje de programación se encuentra construído. &lt;/p&gt;

&lt;p&gt;Visualmente una API Rest es:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4v8fu1z6q3vp4delfjk5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4v8fu1z6q3vp4delfjk5.jpg" alt="API representation" width="720" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La imagen anterior, para mi; es la mejor representación visualmente hablando sobre qué es un API. Es aquel (aquello) al que le hacen una solicitud (orden) y luego que esta es preparada (solicitud procesada) se entrega la preparación al comensal (consumidor).&lt;/p&gt;




&lt;p&gt;Para no saturar de información, este primer post de la serie es tan solo una introducción, en cada post iremos profundizando hasta tener todo lo necesario para volvernos expertos en API Testing! &lt;/p&gt;

</description>
      <category>testing</category>
      <category>api</category>
      <category>apitesting</category>
    </item>
    <item>
      <title>Herramientas que todo tester debe conocer si desea realizar web testing</title>
      <dc:creator>Alfred Tejeda</dc:creator>
      <pubDate>Tue, 16 Jan 2024 16:28:06 +0000</pubDate>
      <link>https://dev.to/soyalfred-qa/herramientas-que-todo-tester-debe-conocer-si-desea-realizar-web-testing-48kb</link>
      <guid>https://dev.to/soyalfred-qa/herramientas-que-todo-tester-debe-conocer-si-desea-realizar-web-testing-48kb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Aunque el web testing tiende a ser sencillo (abrir el navegador e ir a la url que vamos a probar) es recomendable contar con herramientas que nos ayuden a agilizar los tiempos de ejecución de pruebas o ejecutar otros escenarios que nos ayuden a ampliar el alcance y cobertura de las pruebas. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Charles proxy
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fe8w3vvlmi5kqqaj9fl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fe8w3vvlmi5kqqaj9fl.png" alt="Charles proxy home example" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta es la herramienta que para mí siempre va a estar en el top 1, Charles permite principalmente (y entre otras cosas) capturar las peticiones http/https (llamados a nuestra API o de terceros) que realiza la aplicación web e interceptar las mismas.&lt;br&gt;
Gracias a esto podemos modificar tanto la petición como la respuesta ideal para realizar pruebas de nuestros casos negativos, por ejemplo si queremos validar si se muestra un toast cuando obtenemos un error 4XX como código de respuesta, o si la aplicación realiza reintentos (retry) al obtener como respuesta del servicio 5XX, esto sin la necesidad de tener que indisponibilizar los servicios.&lt;/p&gt;

&lt;p&gt;Hay otras alternativas como ProxyMan y Fiddler.&lt;/p&gt;

&lt;h2&gt;
  
  
  Responsively App
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspkx0vlnjv9j6ba3unjs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspkx0vlnjv9j6ba3unjs.png" alt="Responsively App example" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Probar una web responsive es muy tedioso, tanto que puede llegar a ser complejo ya hay muchas resoluciones y tener que estar manipulando el navegador para ir viendo una a una hace que esto se vuelva más lento, por su puesto al igual que el mobile testing debemos tener armar una estrategia para no tener que probar todas.&lt;br&gt;
Con Responsively podemos seleccionar multiples resoluciones (y agregar personalizada de ser necesario) y ver todas estas en tiempo real a medida que vamos interactuando.&lt;br&gt;
Ideal para casos en lo que se deba de mostrar o no ciertos elementos según la resolución.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jam Dev
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33bcq2t4ua2fqpjsjdcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33bcq2t4ua2fqpjsjdcu.png" alt="Jam Dev example" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jam es un descubrimiento reciente para mí (antes usaba otras herramientas un poco más complicadas), más allá de ser una herramienta que permite hacer screenshots y videos (con voz  si lo desean) también te muestra el "Developer tool", lo que permite que podamos explorar errores en console y network&lt;br&gt;
de manera interactiva, en el caso de la pestaña Network podemos en caso de ser necesario copiar el cURL que es algo siempre vital de tener cuando probamos aplicaciones cuya responsabilidad de negocio se encuentra en el backend, además con las diferentes integraciones que tiene podemos enviar esto a través de slack o crear un bug en jira entre otros.&lt;/p&gt;




&lt;p&gt;Esta es una lista corta y precisa pero con alto impacto si las usamos correctamente, en la actualidad cada vez que voy a iniciar mis activades de testing siempre tengo habilitado Charles y Jam (ya que por el momento no es responsive la web de mi trabajo actual). Esta es una "deadly combination" que ayuda a encontrar y reportar defectos de manera muy eficaz, rápida y con baja dependencia.&lt;/p&gt;

&lt;p&gt;Cabe destacar que este listado también es una recomendación basada 100% en mi experiencia.&lt;/p&gt;

&lt;p&gt;¿Quisieras conocer a detalle alguna de estas herramientas?&lt;br&gt;
¿Conocees alguna alternativa? &lt;br&gt;
Dejámelo saber en los comentarios. &lt;/p&gt;

&lt;p&gt;También te invito a comentar que te ha parecido este tipo de publicaciones.&lt;/p&gt;




&lt;p&gt;Me gusta enseñar lo que he aprendido durante estos 7 años de experiencia (al momento de escribir el post) por lo que me he propuesto a compartir con la comunidad de testing en español todo lo que pueda.&lt;br&gt;
Si esta publicación ha sido de tu agrado puedes apoyarme compartiendo o agregando una reacción.&lt;/p&gt;




&lt;p&gt;Si mi contenido te gusta y está a tu disposición puedes regalarme también un café&lt;br&gt;
&lt;a href="https://www.buymeacoffee.com/alfredtester" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwve1hh3j8ewl5aowo7r.png" alt="Buy Me A Coffee" width="434" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>tools</category>
      <category>webtesting</category>
      <category>testingtools</category>
    </item>
  </channel>
</rss>
