# Liberé logassert 5

**URL:** https://pyar.discourse.group/t/libere-logassert-5/371
**Category:** Anuncios
**Created:** [8 Agosto, 2020 20:30 UTC](https://pyar.discourse.group/t/libere-logassert-5/371 "2020-08-08T20:30:24Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![facundo](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/facundo/32/7_2.png) [@facundo](https://pyar.discourse.group/u/facundo)
#### Post date: [8 Agosto, 2020 20:30 UTC](https://pyar.discourse.group/t/libere-logassert-5/371/1 "2020-08-08T20:30:25Z")

</div>

Estoy feliz de traerles una nueva versión de `logassert`, un mecanismo simple para verificar en los tests de un programa en Python que los logs se realizaron correctamente.

Porque todes sabemos que tenemos que chequear los logs de nuestros programas, ¿cierto? Con `logassert` esto es muy fácil.

Esta nueva versión trae la funcionalidad de poder usar `logassert` como un _fixture_ de _pytest_, con semánticas totalmente renovadas (para las estructuras de “unittest clásico”, `logassert` casi no cambió, por compatibilidad).

Entonces, para pytest todo lo que se necesita es declarar `logs` en los argumentos del test (funciona como cualquier otro fixture), y luego chequear (usando `assert`, como es normal con _pytest_) si una linea específica está en los logs para un nivel específico.

Miren este ejemplo, con varias lineas logueadas, y un control específico:

```python
    logger.info("Starting system")
    places = ['/tmp/', '~/temp']
    logger.debug("Checking for config XYZ in all these places %s", places)
    logger.warning("bad config XYZ")

    assert "bad config XYZ" in logs.debug

```

Vean como el mensaje de falla es muy útil:

```auto
assert for regex 'bad config XYZ' check in DEBUG, failed; logged lines:
       INFO 'Starting system'
       DEBUG "Checking for config XYZ in all these places ['/tmp/', '~/temp']"
       WARNING 'bad config XYZ'

```

Puede instalar `logassert` [desde PyPI](https://pypi.org/project/logassert/). El proyecto está [en Github](https://github.com/facundobatista/logassert).

¿Les interesa más detalle de como funciona?

Como les dije arriba, pueden incluir el fixture `logs` y después directamente usar `assert`. Ejemplo:

```python
def test_bleh(logs)
    (...)
    assert "The meaning of life is 42" in logs.debug

```

En verdad, la linea que escriben es una expresión regular, entonces pueden hacer (en caso de que sepan exactamente cual es el significado de la vida):

```python
    assert "The meaning of life is \d+" in logs.debug

```

La cadena indicada se busca dentro de las lineas logueadas, no tiene que ser exactamente la linea completa. Si quieren eso, indíquenlo como en cualquier expresión regular:

```python
    assert "^The meaning of life is \d+$" in logs.debug

```

De forma similar, también pueden verificar que esté al principio o al final de la linea logueada.

> **NOTA** : el mensaje verificado es el final, luego de que el system de `logging` reemplazó todos los parámetros indicados en la cadena indicada.

Si quieren verificar que un texto fue logueado sin importar en qué nivel, sólo hagan:

```python
    assert "The meaning of life is 42" in logs.any_level

```

Para verificar que un texto NO fue logueado, sólo usen la sintáxis de Python! Por ejemplo:

```python
    assert "A problem happened" not in logs.error

```

Si no les gusta las expresiones regulares, importen `Exact` de `logassert` y envuelvan la cadena con eso. Por ejemplo, en este caso el `..` significa “dos puntos”, no hace nada a nivel expresión regular:

```python
    assert Exact("The meaning of life is ..") in logs.any_level

```

Para pedir ayuda, si tienen alguna pregunta, o encuentran algún detalle, por favor [abran un ticket](https://github.com/facundobatista/logassert/issues/new).

¡Gracias por vuestro tiempo!

---

<div class="post-metadata">

### Author: ![fisa](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/fisa/32/160_2.png) [@fisa](https://pyar.discourse.group/u/fisa)
#### Post date: [8 Agosto, 2020 20:50 UTC](https://pyar.discourse.group/t/libere-logassert-5/371/2 "2020-08-08T20:50:46Z")

</div>

Buenísimo!!

Voy a empezar a usarlo en el trabajo 🙂

---

<div class="post-metadata">

### Author: ![ssebastianj](https://avatars.discourse-cdn.com/v4/letter/s/ed8c4c/32.png) [@ssebastianj](https://pyar.discourse.group/u/ssebastianj)
#### Post date: [12 Agosto, 2020 01:30 UTC](https://pyar.discourse.group/t/libere-logassert-5/371/3 "2020-08-12T01:30:45Z")

</div>

¡Buen aporte! Oof, `logassert` me habría venido útil hace unos meses atrás, para los próximos tests será 😄.

---

<div class="post-metadata">

### Author: ![mmodenesi](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/mmodenesi/32/120_2.png) [@mmodenesi](https://pyar.discourse.group/u/mmodenesi)
#### Post date: [18 Agosto, 2020 20:08 UTC](https://pyar.discourse.group/t/libere-logassert-5/371/4 "2020-08-18T20:08:23Z")

</div>

Buenísimo el quickstart guide, @facundo!

> Porque todes sabemos que tenemos que chequear los logs de nuestros programas, ¿cierto?

Tengo sentimientos encontrados con eso: a veces lo uso porq realmente quiero chequear que cierto mensaje se emite (pensando en mi yo futuro mirando kibana).

Otras veces encuentro (o escribo yo mismo) test cases donde se validan cosas que mucho mejor hubieran sido testeadas con mock o directamente no testeadas.

Si tenés ganas / tiempo podés compartir qué tipo de uso le das a este recurso?
