CodeGym /Cursos /Python SELF PT /Testando e debugando scripts para garantir estabilidade

Testando e debugando scripts para garantir estabilidade

Python SELF PT
Nível 38 , Lição 4
Disponível

1. Métodos para testar scripts

Bem-vindo à nossa aula dedicada ao processo favorito de todos os programadores — debug e teste! Se você já criou um botzinho legal com Selenium, chegou a hora de transformá-lo de um robô rebelde em um executor obediente que não apenas funciona, mas faz isso de forma estável. Afinal, ninguém quer que seu bot decida "tirar férias" no momento mais crucial.

Vamos começar discutindo diferentes métodos de teste para seus scripts. Testar é como uma visita obrigatória ao médico: ninguém gosta, mas é necessário. Mesmo o script mais brilhante precisa ser testado quanto à robustez e confiabilidade. A boa notícia é que o Python tem várias ferramentas para ajudar nisso.

Unit Tests

Tudo começa com os unit tests. Eles são como pequenos relógios suíços, verificando cada engrenagem do seu mecanismo. No Python, a biblioteca unittest é o padrão de fato para escrever unit tests. A ideia principal é testar partes individuais do seu código isoladamente.


import unittest
from my_selenium_script import my_function

class TestMyFunction(unittest.TestCase):

    def test_success_case(self):
        result = my_function("entrada esperada")
        self.assertEqual(result, "resultado esperado")

unittest.main()

Este exemplo simples mostra como você pode testar funções específicas do seu código. É claro que, na prática, você testará não apenas os casos de sucesso, mas também casos limite e entradas inválidas.

Testes de Integração

Quando você já confia em cada "peça" individual, é hora de verificar como elas funcionam juntas. Testes de integração, como um encontro perfeito, mostram como os componentes individuais interagem. Aqui, você pode usar as mesmas bibliotecas, mas abordando os testes de outro ângulo.


class TestIntegration(unittest.TestCase):

    def test_full_workflow(self):
        # Imagine que cada passo é uma função do seu script
        open_page()
        fill_form()
        submit_form()
        self.assertTrue(check_results())

Testes de integração podem ser mais complexos e levar mais tempo, mas eles dão confiança de que o sistema todo funciona como uma unidade.

2. Debug e correção de erros

Agora que falamos sobre testes, vamos mergulhar na parte mais intrigante — debug. Debug é quando seu bot decide ser criativo e improvisar, enquanto você tenta trazê-lo de volta ao script.

Ferramentas para debug

Uma ferramenta maravilhosa para debug no Python é o pdb. Ele permite que você pause a execução do script e examine seu estado passo a passo. Vamos dar uma olhada em um exemplo:


import pdb

def some_function(value):
    pdb.set_trace()  # Aqui a execução será pausada
    result = value + 1
    return result

some_function(3)

            

Ao executar este código, você entrará em um ambiente interativo onde poderá percorrer o código, verificar os valores das variáveis, alterá-los e até mesmo continuar a execução do programa passo a passo. Isso facilita muito a vida quando seu script parece estar fazendo algo estranho.

Visualizando o estado da página

Para debugging visual, é útil salvar capturas de tela da página em cada etapa do script. Isso ajuda a ver quais elementos estão aparecendo na tela e como a página está no momento do erro.


driver.save_screenshot("estado_da_pagina.png")

            

Estratégias para encontrar e corrigir erros

Infelizmente, nenhum debugger mostrará onde há um erro fundamental na lógica do código. Aqui entram estratégias:

  • Logging: Adicione logs em todos os lugares. Como disse alguém sábio, "se você não sabe o que está acontecendo com o código, é porque tem poucos logs". Usar a biblioteca logging ajuda a evitar poluir seu código com print() e dá mais controle.
  • Ler o código em voz alta: Às vezes, o cérebro resolve problemas melhor se você falar o que o código faz. Parece engraçado, mas funciona!
  • Dividir em módulos: Separe claramente as partes do código em módulos ou funções. Isso facilita a descoberta de onde ocorreu o erro.

3. Analisando seus scripts Selenium

Para criar um script confiável, é importante testá-lo em diferentes cenários. Aqui estão alguns exemplos de tais cenários:

Ausência de elementos na página

Durante a depuração, é importante verificar se todos os elementos necessários estão presentes na página e disponíveis para interação. Use o método find_elements() e verifique o comprimento da lista retornada para evitar erros como NoSuchElementException.


elements = driver.find_elements_by_class_name("class_name")
if len(elements) == 0:
    logging.warning("Elementos não encontrados")
else:
    logging.info("Elementos encontrados com sucesso")

            

Estados inesperados da página

Por exemplo, páginas com diferentes formas de carregamento ou elementos que aparecem dependendo das condições. O script deve estar preparado para lidar com essas situações.


try:
    special_offer = driver.find_element(By.ID, "special_offer")
    logging.info("Oferta especial encontrada e processada")
except NoSuchElementException:
    logging.info("Oferta especial não encontrada, prosseguindo sem ela")

            

Elementos variáveis na página

Ao testar, considere que na mesma página os elementos podem mudar (como banners diferentes, blocos de anúncios, etc.). Teste o script considerando diferentes estados da página.

Teste em diferentes navegadores

Diferentes navegadores podem processar páginas de maneira diferente, então, para garantir a estabilidade, é útil testar o script em vários navegadores (como Chrome, Firefox, Edge). O Selenium permite executar testes em diferentes navegadores usando diferentes webdrivers.


from selenium import webdriver

# Rodar no Chrome
driver = webdriver.Chrome()

# Rodar no Firefox
driver = webdriver.Firefox()

# Rodar no Edge
driver = webdriver.Edge()

            

4. Automatizando o teste do script

Escrevendo testes com unittest

Use a biblioteca unittest para rodar automaticamente testes de diferentes partes do script. Isso ajuda você a verificar regularmente a funcionalidade de cada elemento.


import unittest
from selenium import webdriver

class SeleniumTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://example.com")

    def test_element_presence(self):
        driver = self.driver
        element = driver.find_element_by_id("submit_button")
        self.assertIsNotNone(element, "Elemento não encontrado na página")

    def tearDown(self):
        self.driver.quit()

unittest.main()

            

Criando conjuntos de testes com parâmetros

Crie conjuntos de testes para verificar diferentes combinações de elementos e cenários. Por exemplo, você pode testar páginas com diferentes parâmetros, como diferentes dados no formulário de entrada.

Testando estabilidade e performance

  • Teste a estabilidade do script com grandes volumes de dados: Certifique-se de que o script pode lidar com grandes volumes de dados e funcionar por longos períodos.
  • Rode testes regulares: Execute testes regularmente para monitorar a estabilidade do script, especialmente se o site com o qual você está trabalhando for atualizado frequentemente.
  • Avalie a performance: Evite longas esperas e elementos lentos. Use timers para avaliar o tempo de execução de cada etapa e otimize-as, se necessário.
1
Pesquisa/teste
Correção de erros em scripts Selenium, nível 38, lição 4
Indisponível
Correção de erros em scripts Selenium
Correção de erros em scripts Selenium
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION