Ideas para escribir casos de uso automatizados (usando pytest para escribir un script de prueba)

Tabla de contenido

1. Definir el objeto de prueba

Segundo, escriba casos de prueba

construir datos de solicitud

Código de prueba del paquete

Configuración de aserciones

3. Ejecute el script para obtener los resultados de la prueba.

cuatro, resumen


Después del estudio anterior, intentamos usar el marco pytest para escribir un caso de prueba de automatización de interfaz para aclarar la idea de escribir casos de uso de automatización de interfaz.

Cuando buscamos una consulta meteorológica en Baidu, aparecerán los resultados que se muestran en la siguiente figura:

A continuación, tomamos la interfaz de consulta meteorológica como ejemplo para escribir un script de caso de prueba de interfaz.

1. Definir el objeto de prueba

Para hacer una prueba de interfaz para una determinada función, primero debemos determinar qué interfaz se llama para implementar esta función. La información específica de esta interfaz (como función, protocolo, URL, método de solicitud, descripción del parámetro de solicitud, descripción del parámetro de respuesta, etc.) se pueden ver mediante visualización Los documentos de interfaz proporcionados por el desarrollo también se pueden obtener a través de la captura de paquetes (en ausencia de documentos de interfaz). Después de encontrar la interfaz correspondiente, es decir, el objeto de prueba, el siguiente paso se puede llevar a cabo con un propósito.

1. Obviamente, no hay ningún documento de interfaz que proporcione información relacionada con la interfaz aquí, y ni siquiera conocemos la URL de la solicitud, por lo que primero capture el paquete con Fiddler para obtener la información de la interfaz.

A través de la captura de paquetes, capturamos la información de esta interfaz de la siguiente manera:

URL de solicitud: https://weathernew.pae.baidu.com/weathernew/pc

Método de solicitud: OBTENER

Solicitar parámetros:

2. Después de capturar la información de la interfaz anterior, primero escribimos un script simple para solicitar la interfaz, de la siguiente manera:

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)

Ejecute el código, se pasa la depuración de la interfaz y se pueden obtener los resultados, de la siguiente manera:

3. Aclarar los requisitos y determinar los casos de uso.

Cuando realizamos pruebas automatizadas para una interfaz, debemos aclarar los puntos de prueba que el caso de uso debe verificar. Algunas interfaces necesitan realizar tanto la verificación directa como la anormal, mientras que algunas interfaces solo necesitan realizar la verificación directa durante la automatización, sin verificación de excepción.

Analicemos la interfaz de consulta meteorológica del ejemplo. Hay dos puntos de prueba principales:

  • Solicitud de reenvío: ingrese una ciudad existente y encuentre el clima de la ciudad correspondiente
  • Solicitud anormal: ingrese una ciudad que no existe, lo que genera un error

Segundo, escriba casos de prueba

Al escribir casos de prueba, necesitamos encapsular el código, que se puede encapsular en clases/métodos de prueba y funciones de prueba. Hay requisitos para el método de nomenclatura de encapsulación de casos de uso en pytest Para obtener más información, consulte mi artículo anterior Reglas de nomenclatura de prueba de pytest.

En cuanto a la encapsulación en una clase o una función, no hay requisitos específicos.Generalmente, las interfaces relacionadas con la misma escena o el mismo punto de prueba se pueden definir como una clase.

Al mismo tiempo, el caso de uso también necesita establecer aserciones para verificar si el contenido devuelto es el contenido esperado. El caso de prueba debe afirmarse, de lo contrario no tiene sentido.

construir datos de solicitud

Solicitud de reenvío, los datos son los siguientes:

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

Solicitud anómala, los datos son los siguientes:

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

Ya obtuvimos el resultado de la solicitud de reenvío cuando depuramos y solicitamos la interfaz anterior, como se muestra en la captura de pantalla anterior.

Echemos un vistazo al resultado de la solicitud anormal para preparar la configuración posterior de la aserción.Los resultados son los siguientes:

Después de enviar la solicitud anormal, el código devuelto también es 200, y el resultado mostrará que la ciudad aún no se ha abierto y que no hay contenido window.tplData en la solicitud de reenvío.

Código de prueba del paquete

Aquí hay dos casos de prueba diferentes para la misma interfaz. Encapsulamos directamente una clase de prueba específicamente para probar esta interfaz. El código de ejemplo es el siguiente:

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)

Tenga en cuenta que no hay aserciones en el código y no es un caso de uso completo. Aquí solo pongo la afirmación en el siguiente paso para ilustrar el proceso y luego escribo la afirmación después del análisis.

Configuración de aserciones

Afirmación, es decir, si el resultado de la verificación es el esperado. Para saber cómo se afirma pytest, consulte el artículo pytest-asertion.

Al establecer aserciones, debemos especificar qué campos verificar primero. En términos generales, el código de la respuesta de la interfaz debe confirmarse y status_code == 200 indica que se pasó la solicitud de la interfaz. Luego vaya a afirmar otros campos necesarios para verificar si se realiza la función de interfaz.

De los resultados anteriores, podemos ver que la solicitud de reenvío puede hacer las siguientes afirmaciones:

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

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

De los resultados anteriores, podemos ver que las solicitudes anormales pueden hacer las siguientes afirmaciones:

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

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

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

3. Ejecute el script para obtener los resultados de la prueba.

Al usar el marco pytest para administrar y ejecutar casos de uso, primero debe instalar pytest e importarlo en el módulo. Los estudiantes que no lo tengan claro pueden consultar mi serie de artículos pytest, y no explicaré demasiado aquí.

El código de ejemplo completo es el siguiente:

# @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()

Por supuesto, debido a que la URL se comparte aquí, será mejor que la extraigamos en lugar de definir esta variable una vez para cada método de prueba, como se muestra en la siguiente figura:

Los resultados de la ejecución son los siguientes:

cuatro, resumen

Para un caso de prueba de automatización de interfaz única, podemos seguir los pasos anteriores, es decir, especificar el objeto de prueba --> escribir el caso de prueba --> escribir el script de prueba --> ejecutar el script y obtener el resultado de la prueba. A través de estos pasos, tenemos una idea básica para la escritura de casos de uso automatizados (esto es muy importante para la formación de nuestro pensamiento de prueba automatizado), sentando las bases para nuestro aprendizaje y práctica posteriores.

De hecho, cuando se usa un lenguaje de programación para automatizar las pruebas de un proyecto, es casi imposible tener un solo caso de prueba, entonces, ¿cómo administrar los casos de uso, ejecutar los casos de uso y obtener los resultados de la prueba cuando hay varias pruebas? ¿casos? Este es el problema que los marcos de pruebas unitarias deben resolver.

Supongo que te gusta

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