1. Entender YAML
- YAML (YAML Ain't Markup Language) es un lenguaje de serialización de datos legible por humanos. Su objetivo de diseño es facilitar el intercambio y el intercambio de datos entre diferentes lenguajes de programación. YAML emplea una sintaxis concisa e intuitiva para representar estructuras de datos de una manera fácil de leer y escribir.
- YAML se usa ampliamente en archivos de configuración, serialización de datos, diseño de API y muchas otras áreas. Es compatible con muchos lenguajes de programación y marcos, incluidos Python, Java, Ruby, etc. En Python, la biblioteca PyYAML se puede usar para leer y escribir archivos YAML.
- Las ventajas de YAML incluyen alta legibilidad, fácil comprensión, compatibilidad con múltiples lenguajes de programación y soporte para estructuras de datos enriquecidas. Su sintaxis concisa hace que los archivos de configuración sean más intuitivos y fáciles de mantener. Ya sea como formato de archivo de configuración o como formato de intercambio de datos, YAML es una opción poderosa y popular.
2. Especificación de sintaxis YAML
Las características sintácticas de YAML incluyen:
- Use sangría para indicar relaciones jerárquicas y no use llaves u otros símbolos.
- Use dos puntos para indicar pares clave-valor.
- Se admiten listas y estructuras anidadas.
- Use comentarios que comiencen con "#".
- Admite referencias y anclas, puede hacer referencia a otras partes de los datos en el documento.
YAML (YAML Ain't Markup Language) admite una variedad de tipos de datos, incluidas cadenas, números, booleanos, listas, diccionarios y valores nulos. Los siguientes son códigos de muestra y las especificaciones de sintaxis correspondientes para cada tipo de datos:
1. Cuerda
- Especificación gramatical: use comillas simples o comillas dobles para encerrar la cadena. Las comillas de cadena también se pueden omitir
name: "John"
addr: "长沙"
2. Números
- Especificación gramatical: simplemente escriba el número directamente.
age: 30
3. valor booleano
- Especificación gramatical: use verdadero para representar verdadero, use falso para representar falso.
isStudent: true
isTeacher: false
4. Lista
- Especificación gramatical: use un guión (-) para representar los elementos de la lista y use líneas nuevas para separar los elementos de la lista.
fruits:
- apple
- banana
- orange
5. Diccionario
- Especificación de gramática: use dos puntos (:) para representar pares clave-valor y use espacios para separar pares clave-valor.
person:
name: "John"
age: 30
6. Valor nulo
- Especificación de gramática: use nulo para representar un valor vacío.
status: null
- Estos son los tipos de datos comunes admitidos por YAML y el código de muestra correspondiente. Puede utilizar estos tipos de datos para crear estructuras de datos complejas según sea necesario.
- Nota : YAML es muy sensible a la sangría, y los espacios se usan para la sangría para indicar relaciones jerárquicas. El número de espacios para la sangría puede ser 2 o 4, pero debe ser constante en todo el documento.
Tres, operación python YAML
- Python proporciona la biblioteca pyyaml para operar archivos YAML. Antes de operar archivos yaml, la biblioteca pyyaml debe estar instalada.
- Ejecute el siguiente comando en Terminal (Pycharm-Terminal) o Símbolo del sistema (cmd) para instalar la biblioteca pyyaml: pip install pyyaml
1. Python lee el archivo yaml
- Paso 1: el archivo yaml preparado de antemano, el sufijo del archivo yaml es .yaml o .yml
name: "John"
addr: "长沙"
age: 18
status: null
isStudent: true
fruits:
- apple
- banana
- orange
teacher:
name: "Alex"
age: 30
- Paso 2: use python para leer los datos en yaml
import yaml
with open(file="d.yaml", mode="r",encoding='utf-8') as f:
res = yaml.safe_load(f)
print(res)
- Método yaml.safe_load(): lee los datos en el archivo YAML. El parámetro del método yaml.safe_load() es un objeto de archivo
- Resultado en ejecución: los datos en yaml se convertirán automáticamente al tipo de datos admitido por python
2.python escribe datos en el archivo yaml
- El primer paso: escriba el valor de la variable especificado por python en el archivo yaml
import yaml
data = {
"Person": {
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA"
}
}
}
# 将data变量存储的数据写入YAML文件
with open(file="example.yaml", mode="w") as f:
yaml.dump(data, f)
- Método yaml.dump(): escriba los datos en el archivo yaml. El primer parámetro del método yaml.dump() es escribir los datos y el segundo parámetro es el objeto del archivo.
- Paso 2: Ver la pantalla en ejemplo.yaml
4. YAML combinado con la automatización de la interfaz de usuario para realizar KDT
- KDT (Keyword-Driven Testing): abreviatura en inglés de prueba basada en palabras clave.
- preparación de datos yaml
# 访问页面
- action: goto
params:
url: 'https://www.baidu.com'
# 输入python
- action: sendkeys
params:
locator: ['id','kw']
value: 'python'
# 点击搜索按钮
- action: click
params:
locator: ['id','su']
# 断言
- action: assert_text_contains
params:
locator: ['id','content_left']
excepted: 'python'
- Encapsulación del método de página base
from selenium.webdriver import Chrome,ActionChains
class BasePage:
def __init__(self,driver:Chrome):
self.driver = driver
def goto(self,url):
'''打开网址'''
self.driver.get(url)
def click(self,locator):
'''点击操作'''
el = self.driver.find_element(*locator)
try:
el.click()
except:
ActionChains(self.driver).click(el).perform()
def sendkeys(self,value,locator=None):
'''发送文本操作'''
if locator:
# 相当于ActionChains中的send_keys_to_element(ele,value),先做点击,再做文本输入
el = self.driver.find_element(*locator)
el.send_keys(value)
else:
ActionChains(self.driver).send_keys(value).perform()
def assert_text_contains(self,locator,excepted):
'''断言文本是否包含指定的内容'''
el = self.driver.find_element(*locator)
assert excepted in el.text
- Escritura de casos de prueba --- implementar pruebas basadas en palabras clave
import time
import yaml
from selenium import webdriver
from basepage import BasePage
# 1、读取yaml文件中的数据
with open(file='test_keyword.yaml',mode='r',encoding='utf-8') as f:
data = yaml.safe_load(f)
# 2、测试用例编写
def test_01():
# 初始化浏览器操作
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
# 实例化BasePage的对象
basepage = BasePage(driver)
# 遍历读取到的data数据
for step in data:
# 获取动作名称
method_name = step['action']
# 获取参数
params = step['params']
# 获取类中方法名
method = getattr(basepage, method_name)
# 调用方法,输入参数
method(**params) # 字典解包
time.sleep(2)
driver.quit()