Prueba automatizada de aplicaciones: empaquetado práctico del marco Python + Appium + Pytest + Allure (detalles)


Prefacio

Pytest es solo un marco de prueba unitario separado. Para completar la automatización de las pruebas de aplicaciones, debe integrar pytest y appium, y usar allure para completar la salida de los informes de prueba.

Los pasos específicos para escribir un script lineal convencional son los siguientes:
1. Diseñar casos de prueba automatizados para la aplicación que se va a probar
2. Crear un nuevo proyecto de prueba de aplicación
3. Configurar el archivo conftest.py, etc.
4. Escribir la aplicación general caso de prueba ejecutando archivo
5. Automatizar el diseño. Convertir casos de prueba en notas de script.

El siguiente ejemplo utiliza una calculadora como ejemplo.

Requisitos previos: Descargar la biblioteca de terceros
Descargar appium-python-client
Descargar pytest
Descargar allure-pytest

1. Diseñar casos de prueba automatizados para la aplicación a probar.

E1

2. Cree un nuevo proyecto de prueba de APLICACIÓN

E2

3. Información del archivo de configuración

Primero configure el archivo externo conftest.py

import pytest

# 配置app的各种连接信息
@pytest.fixture(scope='session')
def android_setting():
    des = {
    
    
        'automationName': 'appium',
        'platformName': 'Android',
        'platformVersion': '6.0.1',  # 填写android虚拟机/真机的系统版本号
        'deviceName': 'MuMu',  # 填写安卓虚拟机/真机的设备名称
        'appPackage': 'com.sky.jisuanji',  # 填写被测app包名
        'appActivity': '.JisuanjizixieActivity',  # 填写被测app的入口
        'udid': '127.0.0.1:7555',  # 填写通过命令行 adb devices 查看到的udid
        'noReset': True,  # 是否重置APP
        'noSign': True,  # 是否不签名
        'unicodeKeyboard': True,  # 是否支持中文输入
        'resetKeyboard': True,  # 是否支持重置键盘
        'newCommandTimeout': 30  # 30秒没发送新命令就断开连接
    }
    return des

Luego configure el archivo conftest.py de la capa de casos de uso

import time
import pytest
from appium import webdriver

driver = None
# 启动安卓系统中的计算器app
@pytest.fixture()
def start_app(android_setting):
    global driver
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',android_setting)
    return driver

# 关闭安卓系统中的计算器app
@pytest.fixture()
def close_app():
    yield driver
    time.sleep(2)
    driver.close_app()

Configure el archivo pytest.ini para la configuración del grupo

E3

4. Escriba el archivo de entrada de ejecución de prueba run_all_cases.py

import os
import pytest

# 当前路径(使用 abspath 方法可通过dos窗口执行)
current_path = os.path.dirname(os.path.abspath(__file__))
# json报告路径
json_report_path = os.path.join(current_path,'report/json')
# html报告路径
html_report_path = os.path.join(current_path,'report/html')

# 执行pytest下的用例并生成json文件
pytest.main(['-s','-v','--alluredir=%s'%json_report_path,'--clean-alluredir'])
# 把json文件转成html报告
os.system('allure generate %s -o %s --clean'%(json_report_path,html_report_path))

5. Escribe casos de prueba

Hay dos submódulos comerciales test_add_sub_module y test_mul_div_module bajo la capa de casos de prueba;

El código del archivo test_add.py en el módulo test_add_sub_module
es el siguiente:

import allure
from appium.webdriver.webdriver import By

@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():
    @allure.story('加法运算')
    @allure.title('[case01] 验证计算机能否正常完成加法功能')
    # @pytest.mark.add_basic
    def test_cases01(self,start_app,close_app):
        with allure.step('1、启动安卓系统中的计算机app'):
            driver = start_app
        with allure.step('2、依次按下9、+、8、='):
            driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn9"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/jia"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn8"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()
            actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').text
        with allure.step('3、验证实际结果是否正确'):
            # 断言 实际结果 == 17.0
            assert actual_result == '17.0'

El código del archivo test_sub.py en el módulo test_add_sub_module
es el siguiente:

import allure
from appium.webdriver.webdriver import By

@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():
    @allure.story('减法运算')
    @allure.title('[case01] 验证计算机能否正常完成减法功能')
    def test_cases01(self,start_app,close_app):
        with allure.step('1、启动安卓系统中的计算机app'):
            driver = start_app
        with allure.step('2、依次按下6、-、2、='):
            driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn6"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/jian"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn2"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()
            actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').text
        with allure.step('3、验证实际结果是否正确'):
            # 断言 实际结果 == 4.0
            assert actual_result == '4.0'

El código del archivo test_mul.py en el módulo test_mul_div_module
es el siguiente:

import allure
from appium.webdriver.webdriver import By

@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():
    @allure.story('乘法运算')
    @allure.title('[case01] 验证计算机能否正常完成乘法功能')
    def test_cases01(self,start_app,close_app):
        with allure.step('1、启动安卓系统中的计算机app'):
            driver = start_app
        with allure.step('2、依次按下3、*、4、='):
            driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn3"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/chen"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn4"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()
            actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').text
        with allure.step('3、验证实际结果是否正确'):
            # 断言 实际结果 == 12.0
            assert actual_result == '12.0'

El código del archivo test_div.py en el módulo test_mul_div_module
es el siguiente:

import allure
from appium.webdriver.webdriver import By

@allure.epic('安卓计算机项目')
@allure.feature('V1.0版本')
class TestAddSub():
    @allure.story('除法运算')
    @allure.title('[case01] 验证计算机能否正常完成除法功能')
    def test_cases01(self,start_app,close_app):
        with allure.step('1、启动安卓系统中的计算机app'):
            driver = start_app
        with allure.step('2、依次按下8、*、4、='):
            driver.find_element(By.XPATH,'//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn8"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/chu"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/btn4"]').click()
            driver.find_element(By.XPATH, '//android.widget.Button[@resource-id="com.sky.jisuanji:id/denyu"]').click()
            actual_result = driver.find_element(By.XPATH, '//android.widget.EditText[@resource-id="com.sky.jisuanji:id/text"]').text
        with allure.step('3、验证实际结果是否正确'):
            # 断言 实际结果 == 2.0
            assert actual_result == '2.0'

6. Genere un informe de prueba a partir de los resultados de la ejecución.

E4

El siguiente es el diagrama del sistema de arquitectura de conocimiento de aprendizaje de ingenieros de pruebas de software más completo que compilé en 2023.

1. Programación en Python desde el nivel básico hasta el dominio

Por favor agregue la descripción de la imagen.

2. Implementación práctica de proyectos de automatización de interfaces.

Por favor agregue la descripción de la imagen.

3. Combate real del proyecto de automatización web.

Por favor agregue la descripción de la imagen.

4. Implementación práctica del proyecto de automatización de aplicaciones.

Por favor agregue la descripción de la imagen.

5. Currículums de los fabricantes de primer nivel.

Por favor agregue la descripción de la imagen.

6. Probar y desarrollar el sistema DevOps

Por favor agregue la descripción de la imagen.

7. Herramientas de prueba automatizadas de uso común

Por favor agregue la descripción de la imagen.

8. Prueba de rendimiento de JMeter

Por favor agregue la descripción de la imagen.

9. Resumen (pequeña sorpresa al final)

Los sueños son velas y las luchas son barcos. Sólo mediante una búsqueda continua podremos llegar al otro lado del éxito. Monta las olas, avanza con valentía y haz tu mejor esfuerzo para finalmente izar la vela de la victoria. Cree en ti mismo y aventúrate con valentía, y podrás navegar hacia la gloria y escribir tu propio y magnífico capítulo.

La vida es como escalar una montaña: cuanto más empinada es la montaña, más coraje demostramos. Supera las dificultades, supérate a ti mismo y trabaja duro para alcanzar la brillantez. No olvides tu intención original, avanza con determinación y fortalece tu fe, podrás conquistarlo todo y crear una vida propia y brillante.

El escenario del destino es de los valientes, y cada esfuerzo es una oportunidad de cambio. Libera tu mente y sigue adelante. Sólo la lucha puede crear infinitas posibilidades. Cree en tu propia fuerza y ​​persevera, y te embarcarás en un viaje glorioso y escribirás tu propia y magnífica leyenda.

Supongo que te gusta

Origin blog.csdn.net/m0_60054525/article/details/132007635
Recomendado
Clasificación