Implementación de pruebas basadas en datos en Python Selenium

Los beneficios de las pruebas en modo basado en datos son obvios en comparación con las pruebas en modo normal. Con el modelo basado en datos, puede descomponer los datos de prueba según el negocio. Solo necesita definir variables y usar datos externos o personalizados para parametrizarlos, evitando así el uso de datos fijos en el script de prueba anterior. La secuencia de comandos de prueba se puede separar de los datos de prueba, de modo que la secuencia de comandos de prueba se reutilice mucho en diferentes conjuntos de datos. No solo puede aumentar la cobertura de prueba de condiciones complejas, sino que también puede reducir en gran medida la escritura y el mantenimiento de scripts de prueba.

A continuación se utilizará la biblioteca del modo basado en datos (ddt) en Python, combinada con la biblioteca unittest para crear una prueba de búsqueda de Baidu en un modo basado en datos.

La biblioteca ddt contiene un conjunto de clases y métodos para implementar pruebas basadas en datos. Las variables de la prueba se pueden parametrizar.

Puede descargarlo e instalarlo mediante el comando pip que viene con python: pip install ddt. Para obtener más información sobre ddt, consulte:

https://pypi.org/project/ddt/

Una prueba sencilla basada en datos

Para crear una prueba basada en datos, debe usar el decorador @ddt en la clase de prueba y el decorador @data en el método de prueba. El decorador @data trata los parámetros como datos de prueba. Los parámetros pueden ser valores únicos, listas, tuplas y diccionarios. Para las listas, debe usar el decorador @unpack para analizar tuplas y listas en múltiples parámetros.

Lo siguiente es implementar la prueba de búsqueda de Baidu, ingresar palabras clave de búsqueda y resultados esperados, el código es el siguiente:

import unittest
from selenium import webdriver
from ddt import ddt, data, unpack

@ddt
class SearchDDT(unittest.TestCase):
  '''docstring for SearchDDT'''
  def setUp(self):
    self.driver = webdriver.Chrome()
    self.driver.implicitly_wait(30)
    self.driver.maximize_window()
    self.driver.get("https://www.baidu.com")

  # specify test data using @data decorator
  @data(('python', 'PyPI'))
  @unpack
  def test_search(self, search_value, expected_result):
    search_text = self.driver.find_element_by_id('kw')
    search_text.clear()
    search_text.send_keys(search_value)

    search_button = self.driver.find_element_by_id('su')
    search_button.click()

    tag = self.driver.find_element_by_link_text("PyPI").text
    self.assertEqual(expected_result, tag)

  def tearDown(self):
    self.driver.quit()

if __name__ == '__main__':
  unittest.main(verbosity=2)

En el método test_search (), se utilizan dos parámetros, valor_búsqueda y resultado_esperado, para recibir datos analizados por tuplas. Cuando se ejecuta el script, ddt convierte los datos de prueba en un identificador de Python válido y genera un nombre de método de prueba más significativo. Los resultados son los siguientes:

Pruebas basadas en datos utilizando datos externos

Si los datos de prueba requeridos ya existen externamente, como un archivo de texto, una hoja de cálculo o una base de datos, también puede usar ddt para obtener directamente los datos y pasarlos al método de prueba para realizar la prueba.

Lo siguiente implementará ddt con la ayuda de archivos CSV (valores separados por comas) externos y datos de tablas EXCLE.

Obtener datos a través de CSV

Como se indicó anteriormente, el decorador @data usa el CSV externo analizado (testdata.csv) como datos de prueba (en lugar de los datos de prueba anteriores). Los datos son los siguientes:

A continuación, primero cree un método get_data (), que incluye la ruta (aquí la ruta actual se usa por defecto) y el nombre del archivo CSV. Llame a la biblioteca CSV para leer el archivo y devolver una fila de datos. Luego use @ddt y @data para implementar la búsqueda de Baidu de prueba basada en datos externos, el código es el siguiente:

import csv, unittest
from selenium import webdriver
from ddt import ddt, data, unpack

def get_data(file_name):
  # create an empty list to store rows
  rows = []
  # open the CSV file
  data_file = open(file_name, "r")
  # create a CSV Reader from CSV file
  reader = csv.reader(data_file)
  # skip the headers
  next(reader, None)
  # add rows from reader to list
  for row in reader:
    rows.append(row)
  return rows

@ddt
class SearchCSVDDT(unittest.TestCase):
  def setUp(self):
    self.driver = webdriver.Chrome()
    self.driver.implicitly_wait(30)
    self.driver.maximize_window()
    self.driver.get("https://www.baidu.com")

  # get test data from specified csv file by using the get_data funcion
  @data(*get_data('testdata.csv'))
  @unpack
  def test_search(self, search_value, expected_result):
    search_text = self.driver.find_element_by_id('kw')
    search_text.clear()
    search_text.send_keys(search_value)

    search_button = self.driver.find_element_by_id('su')
    search_button.click()

    tag = self.driver.find_element_by_link_text("PyPI").text
    self.assertEqual(expected_result, tag)

  def tearDown(self):
    self.driver.quit()

if __name__ == '__main__':
  unittest.main(verbosity=2)

Cuando se ejecuta la prueba, @data llamará al método get_data () para leer el archivo de datos externos y devolver los datos a @data línea por línea. Los resultados de la implementación también son los mismos que los anteriores ~
Si intercambia experiencia en pruebas de software, pruebas de interfaz, pruebas automatizadas y entrevistas. Si está interesado, puede agregar comunicación de prueba de software: 1085991341, y habrá intercambios técnicos con colegas.

Obtener datos a través de Excel

Excle se usa a menudo para almacenar datos de prueba durante la prueba. Como arriba, el decorador @data también se puede usar para analizar CSV externo (testdata.csv) como datos de prueba (en lugar de datos de prueba anteriores). Los datos son los siguientes:

A continuación, primero debemos crear un método get_data (), que incluye la ruta (aquí la ruta actual se usa por defecto) y el nombre del archivo EXCEL. Llame a la biblioteca xlrd para leer el archivo y devolver los datos. Luego use @ddt y @data para implementar la búsqueda de Baidu de prueba basada en datos externos, el código es el siguiente:

import xlrd, unittest
from selenium import webdriver
from ddt import ddt, data, unpack

def get_data(file_name):
  # create an empty list to store rows
  rows = []
  # open the CSV file
  book = xlrd.open_workbook(file_name)
  # get the frist sheet
  sheet = book.sheet_by_index(0)
  # iterate through the sheet and get data from rows in list
  for row_idx in range(1, sheet.nrows): #iterate 1 to maxrows
    rows.append(list(sheet.row_values(row_idx, 0, sheet.ncols)))
  return rows

@ddt
class SearchEXCLEDDT(unittest.TestCase):
  def setUp(self):
    self.driver = webdriver.Chrome()
    self.driver.implicitly_wait(30)
    self.driver.maximize_window()
    self.driver.get("https://www.baidu.com")

  # get test data from specified excle spreadsheet by using the get_data funcion
  @data(*get_data('TestData.xlsx'))
  @unpack
  def test_search(self, search_value, expected_result):
    search_text = self.driver.find_element_by_id('kw')
    search_text.clear()
    search_text.send_keys(search_value)

    search_button = self.driver.find_element_by_id('su')
    search_button.click()

    tag = self.driver.find_element_by_link_text("PyPI").text
    self.assertEqual(expected_result, tag)

  def tearDown(self):
    self.driver.quit()

if __name__ == '__main__':
  unittest.main(verbosity=2)

Al igual que con el archivo CVS leído anteriormente, cuando se ejecuta la prueba, @data llamará al método get_data () para leer el archivo de datos externos y devolver los datos a @data línea por línea. Los resultados de la ejecución son los mismos que los anteriores ~

Si desea obtener datos de la tabla de base de datos de la base de datos, también necesita un método get_data () y usar la biblioteca relacionada con DB para conectarse a la base de datos y la consulta SQL para obtener los datos de prueba.

Lo anterior es todo el contenido de este artículo, espero que sea de utilidad para el estudio de todos. Los amigos que han recibido ayuda son bienvenidos a dar me gusta y comentar.

Supongo que te gusta

Origin blog.csdn.net/Chaqian/article/details/106524512
Recomendado
Clasificación