Tecnología de pruebas automatizadas Python-Allure

La mayoría de las personas pueden estar haciendo trabajos de análisis de datos, web y rastreadores. Hoy compartiré lo que puede hacer con python en el campo de las pruebas automatizadas. Por ejemplo, el siguiente es un hermoso informe de prueba automatizado generado con python + pytest + allure. Este artículo Solo para demostración, la cantidad de casos de uso es pequeña. En el trabajo específico, los casos de uso se escriben de acuerdo con el proyecto. El informe de prueba de encanto ahora es muy popular. Para obtener más detalles, consulte la figura a continuación. La cantidad de casos de prueba, la tasa de aprobación, el proceso de ejecución de los pasos de prueba y la descripción se nos proporcionan. Generados en detalle, estos casos de prueba se toman para informar al líder, y la fuerza es absolutamente alta.

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

1. Configuración del entorno

1. La computadora está equipada con la versión jdk 1.8+, el entorno en el que se basa Allure

2. Allure, un paquete separado, debe estar equipado con variables de entorno después de la instalación.

3. pytest, allure-pytest, allure-python-commons, selenium se puede instalar a través de pip

2. Directorio de archivos

1. informe: el directorio donde finalmente se genera el informe

2. xml: archivo de datos xml, utilizado para generar el informe final (producto intermedio)

3. Archivo de secuencia de comandos de automatización 20.py

4. Methods.py se utiliza para llamar al archivo de método de secuencia de comandos

5. Archivo de inicio de secuencia de comandos Start_script.py, generar informe

Inserte la descripción de la imagen aquí

3. Código del archivo de secuencia de comandos de inicio Start_script.py

Ejecute principalmente dos comandos a través de os.system para producir informes finales xml y html, clean se usa para vaciar el directorio antiguo

import os

# file_path 是自动化脚本文件
file_path = "20.py"

# xmlpth是生成的xml数据文件,用来生成最终报告
xmlpath = "./xml"

xmlStr = "pytest -s -q {file_path} --alluredir {xmlpath}".format(file_path=file_path, xmlpath=xmlpath)
print("xmlStr",xmlStr)

# 执行命令,生成xml文件
a = os.system(xmlStr)

# 生成报告,--clean会清除旧文件
htmlStr = "allure generate {0} -o ./report/ --clean".format(xmlpath)
os.system(htmlStr)

4. Archivo de script de prueba automatizado 20.py

Todos los métodos se llaman en methods.py

1 、 setup_class:

El método de inicialización de la clase, maximiza el navegador, de lo contrario no se pueden encontrar algunos elementos

2 、 teardown_class:

Método de destrucción de la clase, salir del controlador.

3 、 desmontaje:

El método de destrucción de cada método de caso de uso no me sirve, como el escenario de la aplicación: el servicio se usa para volver a la página de inicio después de que el servicio se bloquea, para no afectar la ejecución del siguiente caso de uso

Transferencia de parámetros, vea la introducción más adelante, copié y pegué directamente uno, que representa 2 casos de uso, solo entienda el proceso

import allure, os,sys

sys.path.insert(0,r"C:\\Users\\Administrator\\Desktop\\关于网站\\ccc\\爬虫系统\\go\\allure_test")
from allure_test import methods

class Test_20:
 def setup_class(self):
  methods.max_window()

 def teardown_class(self):
  methods.close()

 @allure.feature('打开京东')
 @allure.story('点击登陆')
def test_case_15(self):
   '''用例名称京东-登录-百度-新闻-百度'''
  methods.get_url("https://www.jd.com", desc="打开京东")
  methods.click("xpath=>//*[contains(text(),'请登录')]", desc="登陆")
  methods.click("xpath=>//*[contains(text(),'账户登录')]", desc="切换账户登陆")
  methods.send_key("xpath=>//*[@id='loginname']", 188888888, desc="发送账户名密码")
  methods.wait(5)

 @allure.feature('打开京东')
 @allure.story('点击登陆')
 def test_case_16(self):
   '''用例名称京东-登录-百度-新闻-百度'''
  methods.get_url("https://www.jd.com", desc="打开京东")
  methods.click("xpath=>//*[contains(text(),'请登录')]", desc="登陆")
  methods.click("xpath=>//*[contains(text(),'账户登录')]", desc="切换账户登陆")
   methods.send_key("xpath=>//*[@id='loginname']", 188888888, desc="发送账户名密码")
  methods.wait(5)

5. El archivo methods.py

por ejemplo

método send_key:

1. loc: La posición del elemento que debe pasarse. La regla de definición es xpath => " ", id => " ", por lo que puedo obtener el método de selección del elemento y la ruta específica de xpath o el nombre de identificación después de dividir => símbolo , Como xpath => // [@ id = 'loginname'] Después de la segmentación, puede obtener ["xpath", "// [@ id = 'loginname']"] para que ubique y seleccione elementos

2. Clave: el valor que debe pasarse

3. desc: descripción del paso del caso de uso

4. con allure.step se utiliza para registrar los pasos para generar un informe de allure

def send_key(loc,key,desc=None):
   with allure.step(desc):
     try:
      getElement(loc).send_keys(Keys.CONTROL,'a')
      getElement(loc).send_keys(key)
     except Exception as e:
       raise e

método getElement:

Para llamar, debe pasar la locomotora introducida anteriormente

# 获取单个页面元素
def getElement(loc):
   try:
     by = loc.split("=>")[0]
     value = loc.split("=>")[1]
    element = WebDriverWait(driver, 10).until(lambda x: x.find_element(by=byTypeDict[by], value=value))
     # print(element)
     return element
  except Exception as e:
    raise e

método de clic:

Si necesita pasar en la posición del elemento, debe pasar loc

def click(loc,desc=None):
   with allure.step(desc):
     try:
      print("这里是点击方法")
      getElement(loc).click()
     except Exception as e:
       raise e
import os
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import allure

byTypeDict = {
    
    
 "xpath": By.XPATH,
 "id": By.ID,
 "name": By.NAME,
 "class_name": By.CLASS_NAME,
 "tag_name": By.TAG_NAME,
 "link_text": By.LINK_TEXT,
 "partial_link_text": By.PARTIAL_LINK_TEXT,
 "css selector" : By.CSS_SELECTOR
}

driver = webdriver.Chrome(executable_path='C:\chrome\chromedriver246.exe')
# 获取单个页面元素
def getElement(loc):
  try:
   by = loc.split("=>")[0]
   value = loc.split("=>")[1]
   element = WebDriverWait(driver, 10).until(lambda x: x.find_element(by=byTypeDict[by], value=value))
    # print(element)
    return element
   except Exception as e:
    raise e

# 获取一组相同的元素,以列表形式返回
def getElements(loc):
   try:
    by = loc.split("=>")[0]
    value = loc.split("=>")[1]
    elements = WebDriverWait(driver, 5).until(lambda x: x.find_elements(by=byTypeDict[by], value=value))
     return elements
   except Exception as e:
     raise e

def get_url(*args, desc=None):
   with allure.step(desc):
     try:
      driver.get(args[0])
     except Exception as e:
       raise e

def wait(*args, desc=None):
   with allure.step(desc):
     try:
      time.sleep(args[0])
     except Exception as e:
       raise e

def max_window(*args, **kwargs):
   try:
    driver.maximize_window()
   except Exception as e:
     raise e

def close(desc=None):
   with allure.step(desc):
     try:
      driver.quit()
     except Exception as e:
       raise e

def click(loc,desc=None):
   with allure.step(desc):
     try:
      print("这里是点击方法")
      getElement(loc).click()
     except Exception as e:
       raise e

def send_key(loc,key,desc=None):
   with allure.step(desc):
     try:
      getElement(loc).send_keys(Keys.CONTROL,'a')
      getElement(loc).send_keys(key)
     except Exception as e:
       raise e

6. Inicie el script python3 start_script.py

Imprima la información de ejecución del script, también puede ver si hay un error

Inserte la descripción de la imagen aquí

7. Inicie el script python3 start_script.py

Cambie al directorio del informe y ejecútelo. Especifique la dirección IP y el puerto para que se abra el informe. Después de que el mensaje sea exitoso, la página web se abrirá automáticamente, o puede copiar la dirección que aparece a continuación para abrir (le recuerdo a http://api.meiduo.site:8083 debido a mi Se cambia el dns de los hosts de la máquina. Si no se cambia el archivo de hosts, este problema no ocurrirá

encanto abierto -h 127.0.0.1 -p 8083 ./

Inserte la descripción de la imagen aquí

8. Otras instrucciones:

1. Esta es la automatización de la interfaz de usuario basada en la web, utilizando selenio. Más adelante, habrá artículos de automatización de la interfaz de usuario basados ​​en la aplicación de la aplicación. De hecho, también implementa otro rastreador para capturar datos de la aplicación.

2. El entorno de este artículo debe estar configurado correctamente, de lo contrario no se obtendrá el informe deseado

3. La aplicación real de un trabajo específico es mucho más complicada que la descrita en este artículo, muchas de las cuales se basan en jenkins y otras ejecuciones de secuencias de comandos por lotes.

4. El método methods.py debería continuar agregándose, solo estoy mostrando algunos métodos usados ​​aquí

La prueba de software es el tema más fácil para comenzar en las industrias relacionadas con TI ~ No requiere el pensamiento lógico de los desarrolladores, y no se requiere que el personal de operaciones y mantenimiento esté disponible las 24 horas del día. Lo que se necesita es una actitud cuidadosa y una amplia comprensión del conocimiento relacionado con TI. El camino de crecimiento de cada evaluador desde que ingresa a la industria hasta convertirse en un experto profesional se puede dividir en tres etapas: pruebas de software, pruebas automatizadas e ingenieros de desarrollo de pruebas.

Inserte la descripción de la imagen aquí
Aquí hay información que he recopilado. Si no desea volver a experimentar el autoaprendizaje, no puede encontrar la información, nadie responde la pregunta y desea darse por vencido después de unos días, puede agregar nuestro grupo de intercambio de pruebas de software 313782132, que contiene varios programas Datos de prueba e intercambios técnicos.

Supongo que te gusta

Origin blog.csdn.net/weixin_50271247/article/details/109288665
Recomendado
Clasificación