写自动化测试代码中,数据驱动传递参数比较方便一些,也便于后期维护,下面介绍两种数据驱动:

下面是test.yaml文件:

start_HRApp:
ip: 127.0.0.1
port: 4723
implicitly_wait: 10
caps:
android:
platformName: Android
#模拟器
platformVersion: 6.0
deviceName: OPPO
appPackage: com.csksc2b.invertory
appActivity: com.csks.login.SplashAty
# noReset: True
# unicodeKeyboard: True
# resetKeyboard: True
# autoGrantPermissions: True
automationName: uiautomator2
ios:

①用于一般文件的yaml数据驱动:【个人推荐这个】,它不仅可以用在测试用例,也可以用在其他py文件中

from appium import webdriver
import yaml
import os def des_caps(): # 基础路径
base_dir = os.path.dirname(os.path.dirname(__file__))
# yaml路径
yaml_path = base_dir + "/data/ddt_data_file.yaml"
# 获取yaml的数据
with open(yaml_path,'r',encoding='utf-8') as file:
data = yaml.load(file)
start = data['start_HRApp']
Cap = start['caps']['android'] driver = webdriver.Remote("http://"+ str(start['ip']) +":"+ str(start['port']) +"/wd/hub",Cap)
driver.implicitly_wait(10) return driver

=========================================================

yaml文件

case01:
url: https://ascendas.17mine.cn/basic/pick/selectPage
headers:
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJuZWVkRWRpdCI6LTEsImxvZ2luVGltZSI6MTU5MDYyOTYwMTU0NSwibG9naW5XYXkiOjEsInVzZXJOYW1lIjoi5byg55WFIiwidXNlcklkIjoiMTI1NDI5NDE4NzAzODM0NzI2NCIsImxvZ2luU291cmNlIjotMSwiYWNjb3VudCI6IjEzNjQyMDQwNjMxIiwiZXhwIjoxNTkwNjcyODAxfQ.qydhemA3sGfrBuHFWcTi8OdaOcm7hvIpgErtkQ2OVBo
payload:
pageNum: 1
pageSize: 1
user_id: 1254294187038347264
userId: 1254294187038347264
infos_id: 1207504682260500480
infoId: 1207504682260500480

或者自定义一个方法:

    def yamlData(self):
'''获取yaml数据'''
self.path = os.path.dirname(os.path.abspath(__file__))
# yaml路径
self.yamlPath = self.path + "/data/case_data.yaml"
# 获取yaml数据
with open(self.yamlPath, 'r', encoding='utf-8') as file:
data = yaml.load(file)
return data

然后再引用:

    def test_request01(self):
case01 = self.yamlData()['case01']
url = case01['url']
payload = case01['payload']
headers = case01['headers'] r = requests.post(url,params=payload,headers=headers).json()
self.assertEqual(r['data']['records'][0]['stockOutName'],"0506测试仓库")

②用于测试用例中的yaml数据驱动(DDT):

yaml文件:

case02:
url: https://www.v2ex.com/api/nodes/show.json
payload:
name: python

import unittest
import requests
import os
import yaml
from ddt import ddt, data, file_data, unpack @ddt
class TestResquest(unittest.TestCase):
@file_data('./data/case_data.yaml')
@unpack
def test_request02(self,**kwargs):
url = kwargs['url']
payload = kwargs['payload']
r = requests.get(url,params=payload).json()
self.assertEqual(r['id'],901)

但是DDT有一点不好的是不灵活,如果有两个case的yaml,想获取url,他会把两个URL一块执行再一个用例中

case01:
url: https://ascendas.17mine.cn/basic/assemble/selectPage
headers:
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJuZWVkRWRpdCI6LTEsImxvZ2luVGltZSI6MTU5MTE0NDk2NTExOSwibG9naW5XYXkiOjEsInVzZXJOYW1lIjoi5byg55WFIiwidXNlcklkIjoiMTI1NDI5NDE4NzAzODM0NzI2NCIsImxvZ2luU291cmNlIjotMSwiYWNjb3VudCI6IjEzNjQyMDQwNjMxIiwiZXhwIjoxNTkxMTg4MTY1fQ.OiSBpkRJMZsABAlKhfo4P2cmZuqk6V63vDACZBY5Xs8
payload:
pageNum: 1
pageSize: 1
# user_id: 1254294187038347264
# userId: 1254294187038347264
# infos_id: 1207504682260500480
infoId: 1207504682260500480 case02:
url: https://www.v2ex.com/api/nodes/show.json
payload:
name: python

如果想测试重复的用例可以适用这个。但是变化较多的字段的用例不适用。

如下测试重复的用例:

用例1:
data1:
- keys: "yaml01"
- keys: "yaml02"
data2:
- keys: "yaml03"
- keys: "yaml04"
用例2:
data1:
- keys: "yaml05"
- keys: "yaml06"
data2:
- keys: "yaml07"
- keys: "yaml08"
用例3:
data1:
- keys: "yaml09"
- keys: "yaml10"
data2:
- keys: "yaml11"
- keys: "yaml12"

代码:

import unittest
import requests
import os
import yaml
from ddt import ddt, data, file_data, unpack @ddt
class TestResquest(unittest.TestCase):
@file_data("../data/ddt_data_file.yaml")
@unpack
def test_baiduSearch03(self,**kwargs):
keys = kwargs['data1'][1]['keys']
print("第三组测试用例:",keys)
self.baidu_search(keys)
self.assertEqual(self.driver.title, keys + "_百度搜索", msg="标题不正确!")

一个用例可以执行三遍

优缺点:

①一般的yaml方法,可以适用于任何文件,只是写法有点繁琐,适用于多种用例,较灵活。

②DDT的yaml方法,只能用于测试用例文件中,写法简单,适用于一种重复性用例,不灵活。

拓展:

YAML、YML在线编辑(校验)器

把yaml文件转换成json

【Python + yaml】之yaml文件数据驱动(包括DDT驱动)的更多相关文章

  1. python使用zipfile压缩文件,包括空目录

    zipfile压缩文件.包括空目录 # !/usr/bin/python import os import zipfile def zipdir(dirPath=None, zipFilePath=N ...

  2. Python中yaml和json文件的读取和应用

    Python对yaml和json文件的读取: yaml文件读取: 首先创建一个yaml文件test.yaml import yaml   #引入包 f=open(path)  #建立Python的文件 ...

  3. Python基础笔记2-ruamel.yaml读写yaml文件

    上一篇笔记记录了Python中的pyyaml库对yaml文件进行读写,但了解到ruamel.yaml也能对yaml文件进行读写,于是想尝试一下它的用法. 一,注意 这里首先要更正一下网上大部分博客的说 ...

  4. Selenium(Python) ddt读取Excel文件数据驱动

    首先, 引入xlrd模块: ExcelDDT.py: import unittestfrom time import sleep from ddt import ddt, datafrom selen ...

  5. Selenium(Python) ddt读取CSV文件数据驱动

    import csvimport unittestfrom time import sleep from ddt import ddt, data, unpackfrom selenium impor ...

  6. 【webdriver自动化】Python数据驱动工具DDT

    一.Python数据驱动工具ddt 1.  安装 ddt pip install ddt DDT是 “Data-Driven Tests”的缩写 资料:http://ddt.readthedocs.i ...

  7. Python基础(八) yaml在python中的使用

    yaml 通常用来存储数据,类似于json YAML 简介 YAML(Yet Another Markup Language),一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅 ...

  8. java结合testng,利用yaml做数据源的数据驱动实例

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...

  9. 基于Python+Requests+Pytest+YAML+Allure实现接口自动化

    本项目实现接口自动化的技术选型:Python+Requests+Pytest+YAML+Allure ,主要是针对之前开发的一个接口项目来进行学习,通过 Python+Requests 来发送和处理H ...

  10. python之读取yaml数据

    一.yaml简介 yaml:一种标记语言,专门用来写配置文件. 二.yaml基础语法 区分大小写: 使用缩进表示层级关系: 使用空格键缩进,而非Tab键缩进 缩进的空格数目不固定,只需要相同层级的元素 ...

随机推荐

  1. 《DNK210使用指南 -CanMV版 V1.0》第二章 Kendryte K210简介

    第二章 Kendryte K210简介 1)实验平台:正点原子DNK210开发板 2)章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail. ...

  2. 3568F-Linux应用开发手册

       

  3. Spring之拦截器和过滤器

    Spring拦截器 拦截器简介 Spring拦截器是一种基于AOP的技术,本质也是使用一种代理技术,它主要作用于接口请求中的控制器,也就是Controller. 因此它可以用于对接口进行权限验证控制. ...

  4. HTML手稿

    没有一张图解决不了的事:https://www.processon.com/mindmap/5ccebc48e4b0841b844a23fb 1.网页中web 标准的三层组成? W3C 万维网联盟 结 ...

  5. VMware vCenter Server 7.0U3r 下载 - 修复堆溢出 (远程执行代码) 和本地权限提升漏洞

    VMware vCenter Server 是一款高级服务器管理软件,提供了一个集中式平台来控制 vSphere 环境,以实现跨混合云的可见性. 简化且高效的服务器管理 什么是 vCenter Ser ...

  6. [oeasy]python017_万行代码之梦_vim环境_复制粘贴

    继续运行 回忆上次内容 上次 保存运行一条龙 :w|!python3 %   我想 再多输出 几行 增加一下 代码量 可以吗?       添加图片注释,不超过 140 字(可选) 代码量 在正常模式 ...

  7. [oeasy]python0118_语言的发展_希腊字符_拼音文字_亚历山大大帝

    希腊字符回忆上次内容 尼罗河流域 的 埃及圣书体 是象形文字 两河流域 的 苏美尔楔形文字 不是象形文字 做生意的 腓尼基人 利用 埃及圣书体 的 字型 苏美尔楔形文字 的 写法 构造出 腓尼基字符 ...

  8. Charles 4.6 小茶杯 网络抓包工具

    下载官网: https://www.charlesproxy.com/download 破解网站: Charles破解工具 (zzzmode.com)

  9. python global将结果存储起来给另外一个文件对象使用

    python global将结果存储起来给另外一个文件对象使用 使用场景: 在aaa.py文件里面操作数据生成结果C 然后再在bbb.py文件里面使用C 下面是aaa.py代码: #!/usr/bin ...

  10. ComfyUI插件:ComfyUI layer style 节点(一)

    前言: 学习ComfyUI是一场持久战,而ComfyUI layer style 是一组专为图片设计制作且集成了Photoshop功能的强大节点.该节点几乎将PhotoShop的全部功能迁移到Comf ...