Tabla de contenidos: Introducción
-
- Prefacio
- 1. Programación en Python desde el nivel básico hasta el dominio
- 2. Implementación práctica de proyectos de automatización de interfaces.
- 3. Combate real del proyecto de automatización web.
- 4. Implementación práctica del proyecto de automatización de aplicaciones.
- 5. Currículums de los fabricantes de primer nivel.
- 6. Probar y desarrollar el sistema DevOps
- 7. Herramientas de prueba automatizadas de uso común
- 8. Prueba de rendimiento de JMeter
- 9. Resumen (pequeña sorpresa al final)
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.
2. Cree un nuevo proyecto de prueba de APLICACIÓN
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
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.
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
2. Implementación práctica de proyectos de automatización de interfaces.
3. Combate real del proyecto de automatización web.
4. Implementación práctica del proyecto de automatización de aplicaciones.
5. Currículums de los fabricantes de primer nivel.
6. Probar y desarrollar el sistema DevOps
7. Herramientas de prueba automatizadas de uso común
8. Prueba de rendimiento de JMeter
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.