Ideias para escrever casos de uso automatizados (usando pytest para escrever um script de teste)

Índice

1. Defina o objeto de teste

Em segundo lugar, escreva casos de teste

dados de solicitação de construção

Código de teste do pacote

Configurações de declaração

3. Execute o script para obter os resultados do teste

Quatro, resumo


Após o estudo anterior, tentamos usar o framework pytest para escrever um caso de teste de automação de interface para esclarecer a ideia de escrever casos de uso de automação de interface.

Quando pesquisamos a consulta do tempo no Baidu, aparecem os resultados mostrados na figura abaixo:

Em seguida, tomamos a interface de consulta do clima como exemplo para escrever um script de caso de teste de interface.

1. Defina o objeto de teste

Para fazer um teste de interface para uma determinada função, primeiro precisamos determinar qual interface é chamada para implementar essa função. As informações específicas dessa interface (como função, protocolo, URL, método de solicitação, descrição do parâmetro de solicitação, descrição do parâmetro de resposta, etc.) podem ser visualizados através da visualização Os documentos de interface fornecidos pelo desenvolvimento também podem ser obtidos por meio de captura de pacotes (na ausência de documentos de interface). Depois de encontrar a interface correspondente, ou seja, o objeto de teste, a próxima etapa pode ser realizada propositadamente.

1. Obviamente, não há nenhum documento de interface para fornecer informações relacionadas à interface aqui e nem mesmo sabemos o URL da solicitação, portanto, primeiro capture o pacote com o Fiddler para obter as informações da interface.

Através da captura de pacotes, capturamos as informações desta interface da seguinte forma:

URL de solicitação: https://weathernew.pae.baidu.com/weathernew/pc

Método de solicitação: GET

Parâmetros de solicitação:

2. Depois de capturar as informações da interface acima, primeiro escrevemos um script simples para solicitar a interface, como segue:

url = "https://weathernew.pae.baidu.com/weathernew/pc"
params = {
	"query": "浙江杭州天气",
	"srcid": 4982
}
res = requests.get(url=url, params=params)
print(res.status_code)
print(res.text)

Execute o código, a depuração da interface é passada e os resultados podem ser obtidos, conforme a seguir:

3. Esclarecer os requisitos e determinar os casos de uso.

Quando fazemos testes automatizados para uma interface, precisamos esclarecer os pontos de teste que o caso de uso precisa verificar. Algumas interfaces precisam executar a verificação direta e anormal, enquanto algumas interfaces podem precisar apenas executar a verificação direta durante a automação, sem verificação de exceção.

Vamos analisar a interface de consulta do clima do exemplo. Existem dois pontos de teste principais:

  • Solicitação de encaminhamento: insira uma cidade existente e encontre o clima da cidade correspondente
  • Solicitação anormal: insira uma cidade que não existe, solicitando um erro

Em segundo lugar, escreva casos de teste

Ao escrever casos de teste, precisamos encapsular o código, que pode ser encapsulado em classes/métodos de teste e funções de teste. Existem requisitos para o método de nomenclatura do encapsulamento de caso de uso no pytest. Para obter detalhes, consulte meu artigo anterior regras de nomenclatura do teste pytest.

Quanto ao encapsulamento em uma classe ou função, não há requisitos específicos.Geralmente, as interfaces relacionadas à mesma cena ou ao mesmo ponto de teste podem ser definidas como uma classe.

Ao mesmo tempo, o caso de uso também precisa definir asserções para verificar se o conteúdo retornado é o conteúdo esperado. O caso de teste deve ser afirmado, caso contrário, não tem sentido.

dados de solicitação de construção

Solicitação de encaminhamento, os dados são os seguintes:

params = {
	"query": "浙江杭州天气",
    "srcid": 4982
}

Solicitação anormal, os dados são os seguintes:

params = {
	"query": "微信公众号:测试上分之路",
    "srcid": 4982
}

Já obtivemos o resultado da solicitação de encaminhamento quando depuramos e solicitamos a interface acima, conforme mostrado na captura de tela acima.

Vamos dar uma olhada no resultado da solicitação anormal para preparar a configuração subsequente da assertiva. Os resultados são os seguintes:

Depois de enviar a solicitação anormal, o código retornado também é 200 e o resultado mostrará que a cidade ainda não foi aberta e não há conteúdo window.tplData na solicitação de encaminhamento.

Código de teste do pacote

Aqui estão dois casos de teste diferentes para a mesma interface. Encapsulamos diretamente uma classe de teste especificamente para testar essa interface. O código de exemplo é o seguinte:

class TestWeather:
    '''
    校验百度天气查询接口:https://weathernew.pae.baidu.com/weathernew/pc
    '''

    def test_get_weather_normal(self):
        '''正向校验-查询存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "浙江杭州天气",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)


    def test_get_weather_error(self):
        '''异常校验-查询不存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "微信公众号:测试上分之路",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)

Observe que não há asserções no código e não é um caso de uso completo. Aqui, apenas coloco a asserção na próxima etapa para ilustrar o processo e, em seguida, escrevo a asserção após a análise.

Configurações de declaração

Asserção, ou seja, se o resultado da verificação é o que esperamos. Para saber como o pytest afirma, consulte o artigo pytest-assertion.

Ao definir asserções, precisamos especificar quais campos verificar primeiro. De um modo geral, o código da resposta da interface precisa ser declarado e status_code == 200 indica que a solicitação da interface foi aprovada. Em seguida, vá para afirmar outros campos necessários para verificar se a função de interface é realizada.

A partir dos resultados acima, podemos ver que a solicitação de encaminhamento pode fazer as seguintes afirmações:

# 断言code是否等于200,存在则该断言通过
assert res.status_code == 200

# 断言结果中是否存在"window.tplData",存在则该断言通过
assert "window.tplData" in res.text

A partir dos resultados acima, podemos ver que solicitações anormais podem fazer as seguintes afirmações:

# 断言code是否等于200,存在则该断言通过
assert res.status_code == 200

# 断言结果中是否存在"window.tplData",注意这里是不存在则该断言通过
assert "window.tplData" not in res.text

# 断言结果中是否存在"暂未开通此城市查询",存在则该断言通过
assert "暂未开通此城市查询" in res.text

3. Execute o script para obter os resultados do teste

Ao usar a estrutura pytest para gerenciar e executar casos de uso, você precisa primeiro instalar o pytest e importá-lo no módulo. Alunos que não estão claros podem verificar minha série de artigos pytest e não explicarei muito aqui.

O código de amostra completo é o seguinte:

# @time: 2022-03-20
# @author: 给你一页白纸
# 微信公众号:测试上分之路

import requests
import pytest


class TestWeather:
    '''
    校验百度天气查询接口:https://weathernew.pae.baidu.com/weathernew/pc
    '''

    def test_get_weather_normal(self):
        '''正向校验-查询存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "浙江杭州天气",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)
        # print(res.status_code)
        # print(res.text)
        assert res.status_code == 200
        assert "window.tplData" in res.text


    def test_get_weather_error(self):
        '''异常校验-查询不存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "微信公众号:测试上分之路",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)
        print(res.status_code)
        print(res.text)
        assert res.status_code == 200
        assert "window.tplData" not in res.text
        assert "暂未开通此城市查询" in res.text

        
if __name__ == '__main__':
    # 使用pytest执行用例
    pytest.main()

Obviamente, como a url é compartilhada aqui, é melhor extraí-la em vez de definir essa variável uma vez para cada método de teste, conforme mostrado na figura a seguir:

Os resultados da execução são os seguintes:

Quatro, resumo

Para um único caso de teste de automação de interface, podemos seguir as etapas acima, ou seja, especificar o objeto de teste --> escrever o caso de teste --> escrever o script de teste --> executar o script e obter o resultado do teste. Por meio dessas etapas, temos uma ideia básica para escrever casos de uso automatizados (isso é muito importante para a formação de nosso pensamento de teste automatizado), estabelecendo as bases para nosso aprendizado e prática subsequentes.

Na verdade, ao usar uma linguagem de programação para automatizar o teste de um projeto, é quase impossível ter apenas um caso de teste, então como gerenciar os casos de uso, executar os casos de uso e obter os resultados do teste quando existem vários casos de teste casos? Esse é o problema que as estruturas de teste de unidade precisam resolver.

Acho que você gosta

Origin blog.csdn.net/MXB_1220/article/details/131731482
Recomendado
Clasificación