Estrutura de teste automatizado Python - aprendizado pytest

1. Conceito

        pytest é uma estrutura de teste de unidade para Python, que é semelhante à estrutura de teste integrada UnitTest. Comparada com a estrutura UnitTest, é mais simples e mais eficiente de usar.

2. Características

  • Fácil de usar, documentação rica, fácil de começar, há muitos exemplos na documentação para referência
  • Suporta testes de unidade simples e testes funcionais complexos
  • Parametrização de suporte
  • Alguns testes podem ser ignorados durante a execução do teste ou alguns casos de falha esperados podem ser marcados como falhas
  • Casos que suportam falhas de execução repetidas
  • Suporta a execução de casos de teste escritos por Nose e UnitTest (o código UnitTest pode ser executado diretamente com pytest)
  • Possui muitos plug-ins de terceiros e pode ser personalizado e estendido
  • Fácil integração com ferramentas de integração contínua

3. Instalação

安装:pip3 install pytest

查看:pip show pytest

确认版本:pytest --version

Ou instale o pytest diretamente no pycharm

Nota: Se o comando pytest não estiver disponível, você precisa abrir o terminal como administrador para reinstalar o pytest

4. Formato do código

class Testxxx:    # Test 开头的测试类

    def testxxx(self):    # test 开头的测试方法
        pass

5. Modo de operação

(1) Modo de linha de comando

Execute pytest -s test.py (nome do arquivo) na linha de comando

(2) Modo de função principal

Adicione a função principal ao arquivo Python:

if __name__ == '__main__'
    pytest.main(['-s',"文件名"])

 -s indica suporte para impressão de console, se nenhuma impressão for adicionada, nada aparecerá

6. Método especial (mesmo efeito do acessório na estrutura UnitTest)

(1) Nível do método

# 初始化(前置处理)
def setup(self):           --> 首先自动执行
 
# 销毁(后置处理)
def teardown(self):        --> 最后自动执行
 
# 运行于测试方法的始末,即:运行一次测试方法就会运行一次setUp和tearDown

(2) Nível de classe

# 初始化(前置处理)
def setup_class(self):        --> 首先自动执行 
 
# 销毁(后置处理):  
def teardown_class(self):     --> 最后自动执行
 
# 运行于测试类的始末,即:每个测试类只会运行一次setup_class和teardown_class

7. Arquivo de configuração

Cenário de aplicação: Depois de usar o arquivo de configuração, você pode usar rapidamente os itens configurados para selecionar quais módulos de teste executar

Como usar: Crie um arquivo pytest.ini no diretório raiz (arquivos tox.ini ou setup.cfg também estão disponíveis)

conteúdo do documento:

[pytest]
testpaths = ./study/pytest    # 文件搜索路径,即文件所在位置
addopts = -s                  # 添加命令行参数
python_files = test*.py       # 指定文件名称
python_classes = Test*        # 指定类名称
python_functions = test*      # 指定方法名称

Observação:

1. No sistema Windows, no arquivo de configuração pytest, não é permitido escrever informações de comentários

2. Um projeto precisa apenas de um arquivo de configuração pytest e o nome do arquivo precisa estar correto

3. Em geral, você só precisa colocar o arquivo de configuração pytest no diretório raiz do projeto

4. Para um projeto configurado com um arquivo de configuração pytest, você só precisa abrir a linha de comando e digitar o comando pytest para executar o teste

8. Plugins comuns para pytest

(1) Gerar plug-in de relatório de teste pytest-html

Instalação: Instale via pip3 install pytest-html ou instale o plugin pytes-html  via pycharm

Uso: Adicione --html=report path/report.html  ao parâmetro de linha de comando addopts no arquivo de configuração

Se você deseja mesclar arquivos css, adicione --self-contained-html            após

(2) Plug-ins que controlam a ordem de execução das funções pytest

Instalação: Instale via pip3 install pytest-ordering ou instale o plugin pytest-ordering  via pycharm

Use: mark e função testada, @pytest.mark.run(order=x)

ordem Se todos positivos ou todos negativos, quanto menor o valor, maior a prioridade; quando existem números positivos e negativos ao mesmo tempo, o número positivo tem maior prioridade

(3) plug-in de nova tentativa de falha do pytest

Instalação: instale via pip3 instale pytest-rerunfailures ou instale o plugin pytest-rerunfailures  via pycharm

Uso: Adicione --reruns -n  ao parâmetro de linha de comando addopts no arquivo de configuração (n determina o número de novas tentativas, não mais que 3)

9. Pular operação

# 跳过测试函数
# 参数:
    # condition:跳过的条件,必传参数
    # reason:标注原因,必传参数
@pytest.mark.skipif(condition , reason=None)

Uso: Adicione o decorador @pytest.mark.skipif(condition,reason="xxx")  ao script de teste que precisa ser ignorado

10. Parametrização

# 数据参数化
# 参数:
    # argnames:参数名
    # argvalues:参数对应值,类型必须为可迭代类型,一般用list
@pytest.mark.parametrize(argnames,argvalues,indirect=False,ids=None,scope=None)

Uso: adicione o decorador @pytest.mark.parametrize(argnames,argvalues)  no topo da função de teste que precisa ser parametrizada

Exemplo de um único parâmetro:

import pytest

class Test1:

    @pytest.mark.parametrize("name",["小明","小李","小张"])
    def test_method(self,name):
        print(name)

Exemplo com vários parâmetros:

import pytest

class TestLogin:
    # 拓展:另一种写法 
    # @pytest.mark.parametrize(("admin","passwd"),[("admin",123456),("test",456789)])
    @pytest.mark.parametrize("admin,passwd",[("admin",123456),("test",456789),("xxx","yyy")])
    def test_method(self,admin,passwd):
        print(admin)
        print(passwd)

11, Afirmação

Método: assert xxx que vem com o sistema (o método assertion que vem com o framework UnitTest)

Exemplo:

assert 1==2    # 判断是否相等

assert "name" in "my name is student"    # 判断是否包含

assert 2 > 1    # 判断大小

おすすめ

転載: blog.csdn.net/ouihsiad/article/details/127383542