"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Módulo shutil do Python para testes automatizados

Módulo shutil do Python para testes automatizados

Publicado em 2024-08-27
Navegar:331

Python

Introdução

No domínio dinâmico do desenvolvimento de software, garantir a qualidade do aplicativo por meio de testes automatizados é vital. O teste automatizado envolve a execução de vários testes que requerem uma configuração específica de arquivos e diretórios. Configurar e desmontar ambientes de teste de forma eficiente é uma parte significativa deste processo, que muitas vezes pode ser uma tarefa tediosa e propensa a erros sem as ferramentas certas.

Encontrar as ferramentas certas para simplificar tarefas pode fazer uma grande diferença. O módulo utilitário padrão conhecido como shutil é uma abreviatura de utilitários shell. Ele fornece operações de arquivo de alto nível para copiar, mover e remover arquivos e diretórios que podem simplificar o gerenciamento de ambientes de teste. Este blog explica como o módulo shutil pode agilizar as operações de arquivos em testes automatizados de software.

Para garantir que cada teste comece com o ambiente correto, precisamos automatizar o processo de configuração, criando um ambiente de teste consistente e isolado.

Introdução ao Shutil

O módulo Shutil faz parte da Biblioteca Padrão do Python, portanto não precisamos instalar nada extra. Basta importá-lo no início do seu script.

# Import shell utility module
import shutil

Métodos essenciais de cópia de arquivos

Ao testar um aplicativo, geralmente precisamos de um conjunto específico de arquivos de dados. Em vez de copiar arquivos manualmente, quatro métodos comuns fornecem uma maneira fácil e eficiente de copiar um arquivo usando o módulo shutil.

  1. shutil.copy()
  2. shutil.copy2()
  3. shutil.copyfile()
  4. shutil.copyfileobj()

1. Método shutil.copy()

shutil.copy(source, destination, *, follow_symlinks=True)

Este método copia o arquivo de origem para o diretório ou arquivo especificado no destino e retorna o destino do arquivo. Ele copia os dados do arquivo e o modo de permissão do arquivo, mas os metadados (hora de criação e modificação do arquivo) do arquivo copiado não são preservados. A origem e o destino devem ser objetos ou strings semelhantes a caminhos. O destino pode especificar arquivo ou diretório. Se o destino especificar um caminho para um diretório, o arquivo será copiado para o diretório de destino com o nome do arquivo do caminho de origem.
Ao trabalhar com link simbólico:

  • Se follow_symlinks=True, o destino será uma cópia do arquivo para o qual o link simbólico na origem aponta. O valor padrão do parâmetro follow_symlinks é True.

  • Se follow_symlinks=False, o destino será criado como um link simbólico.

# Import shell utility module
import shutil

#  Copy the content of source_file.txt to destination_file.txt
shutil.copy('source_file.txt', 'destination_file.txt')

2. Método shutil.copy2()

shutil.copy2(source, destination, *, follow_symlinks=True)

O método shutil.copy2() fornece a funcionalidade adicional de preservar todos os metadados do arquivo que puder. Outras características são as mesmas do método shutil.copy(). O destino pode especificar arquivo ou diretório. Se o destino for um diretório, o arquivo será copiado com o mesmo nome do arquivo de origem.

# Import shell utility module
import shutil

#  Copy the content of source_file.txt to destination_file.txt
shutil.copy2('source_file.txt', 'destination_file.txt')

Eu usei esse método ao automatizar o teste, pois ele copia o conteúdo do arquivo junto com a maioria de seus metadados associados para que possamos obter programaticamente o mesmo resultado que copiar e colar um arquivo usando atalhos de teclado em um gerenciador de arquivos gráfico e também de perto replica o comportamento de uma operação típica de copiar e colar usando um mouse no gerenciador de arquivos gráfico.

3. Método shutil.copyfile()

shutil.copyfile(source, destination, *, follow_symlinks=True)

Usando este método, o conteúdo de um arquivo é copiado de sua origem até seu destino sem metadados. A origem e o destino devem ser objetos ou strings semelhantes a caminhos. O caminho de destino só pode especificar um caminho para um arquivo, mas não pode especificar um caminho para um diretório.

# Import shell utility module
import shutil

#  Copy the content of source_file.txt to destination_file.txt
shutil.copyfile('source_file.txt', 'destination_file.txt')

4. Método shutil.copyfileobj()

shutil.copyfileobj(fsrc, fdst, length)

Este método copia o conteúdo do objeto de arquivo de origem para o objeto de arquivo de destino. A origem e o destino devem ser objetos semelhantes a arquivos. Não preserva metadados e não retorna nenhum valor. O parâmetro opcional length especifica um valor inteiro para o tamanho do buffer.

# Import shell utility module
import shutil

# Create file objects
source_file_object = open("../hello.txt", "r")
destination_file_object = open("CopyFile/copyFalseSrcPath.txt", "w")

# Copy the content of the file object to another file object
shutil.copyfileobj(source_file_object, destination_file_object)

Prevenindo erros comuns:

  • A origem e o destino não podem especificar o mesmo caminho em shutil.copy(), shutil.copy2() e shutil.copyfile(). Se a origem e o destino especificarem o mesmo caminho de arquivo, a exceção "SameFileError" será gerada. Este erro não é gerado em shutil.copyfileobj() pois substitui o arquivo de destino se ele já existir.
  • Um erro "FileNotFound" será gerado se a fonte especificar um caminho para um arquivo que não está presente.

Conclusão

Cada método fornece diferentes aspectos de operações de arquivo, proporcionando flexibilidade e poder para atender a diversas necessidades de teste. O módulo shutil do Python oferece ferramentas essenciais para operações eficientes de arquivos em testes de software:

  • shutil.copy: Ótimo para cópia básica de arquivos, incluindo permissões.
  • shutil.copy2: Ideal para copiar arquivos junto com a maioria de seus metadados, incluindo carimbos de data e hora.
  • shutil.copyfile: Melhor para cópia rápida e simples de conteúdo sem metadados.
  • shutil.copyfileobj: permite a cópia precisa entre objetos semelhantes a arquivos.

Algumas outras funções utilitárias comumente usadas que podem ser úteis ao automatizar nossos testes são:

  1. shutil.mkdirs(): Cria diretórios recursivamente. Útil para configurar estruturas de diretório necessárias para testar ou organizar arquivos.
  2. shutil.copytree(): copia recursivamente uma árvore de diretórios inteira. Ideal para duplicar estruturas de diretórios complexas, incluindo todos os arquivos e subdiretórios, para criar ou fazer backup de ambientes para teste ou implantação.
  3. shutil.rmtree(): Exclui uma árvore de diretórios recursivamente. Essencial para limpeza após testes ou remoção completa de diretórios temporários e seus conteúdos.
  4. shutil.move(): Move um arquivo ou diretório para outro local. Realoca arquivos ou diretórios com eficiência dentro do sistema de arquivos, facilitando a organização ou o processo de implantação.
  5. shutil.make_archive(): Cria um arquivo (como AIP ou TAR) de um diretório e seu conteúdo. Útil para empacotar diretórios para distribuições ou fins de backup.

Mais funções utilitárias e descrições detalhadas podem ser encontradas na documentação oficial.

O módulo shutil em Python serve como um conjunto de ferramentas versátil não apenas em testes de software, mas também em diversos campos de desenvolvimento de software, como controle e implantação de versão, ciência de dados e aprendizado de máquina, TI e administração de sistemas, pesquisa e academia, e muitos mais.

Integrando o shutil em nossos processos de teste, podemos realizar operações complexas de arquivos com o mínimo de código, economizando nosso tempo e esforço e nos permitindo focar no desenvolvimento de software de alta qualidade.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/jankaritech/pythons-shutil-module-for-automated-testing-413n?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3