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

下面是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. 【资料分享】全志科技T507工业核心板硬件说明书(下)

    目    录 3 电气特性 3.1 工作环境 3.2 功耗测试 3.3 热成像图 4 机械尺寸 5 底板设计注意事项 5.1 最小系统设计 5.1.1 电源设计说明 5.1.2 系统启动配置 5.1. ...

  2. 基于OMAPL138+FPGA核心板多核软件开发组件MCSDK开发入门(上)

    本文测试板卡为创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 F ...

  3. BI小班课程表:PowerBI、finebi、quickbi,每周开课

    为了帮助更多BI的友友更好的接触BI,并应用于实践工作中,我决定将我这些年的工作经验和付费咨询的实际经验,拿出一部分基础并且实用的知识和方法整理成课程.其中 PowerBI十节课,计划20个小时: F ...

  4. 物联网浏览器(IoTBrowser)-基于计算机视觉开发的应用“智慧眼AIEye”

    一.起因 最近毕业在家:),准备筹划社区运营和IoTBrowser升级的事务,遇到了一系列物业管理上的问题,本来出于好心提醒物业人员,结果反被误认为是打广告推销的,当时被激怒一下,后面一想也许这也是一 ...

  5. 开源免费又好用的中式数据报表:UReport2是一款高性能的架构在Spring之上纯Java报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。

    北润乾.南帆软,数加发力在云端. uReport 身何安?中式报表真开源. 报表江湖之中,uReport安身立命的产品品类定位是什么? 说来很简单,uReport的价值在于填补了这样一个市场空白:开源 ...

  6. 宇宙最强开发工具VScode快速搭建前后端分离环境【VUE+Springboot】

    VS Code 的全称是 Visual Studio Code,是一款开源的.免费的.跨平台的.高性能的.轻量级的代码编辑器.它在性能.语言支持.开源社区方面,都做得很不错,是这两年非常热门的一款开发 ...

  7. 解决方案 | winrar 使用命令行解压到同名文件夹 (QTTabBar 中创建一个【解压文件】命令按钮的设置)

    需求:我们经常需要把rar或者zip解压到当前文件夹,如果是直接解压的话可能会解压出来很多文件,事实上我们当然可以通过右键解压到这个指定文件夹. 但是 经过查询知道,如果是指定文件夹好说,直接指定.\ ...

  8. 3.1 Y86-64指令集体系结构

    程序员可见的状态 这里的程序员即可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器.程序员可见的状态如下,有15个程序寄存器(%rax,%rbx等),三个一位的条件(ZF,OF,SF) ,程序 ...

  9. oeasy 教您玩转 linux 之 010301 电子宠物 pet

    我们来回顾一下 上一部分我们都讲了什么? 中️文诗词fortune=zh的使用 建立自己的彩色诗词库 通过pip把输出结果交给cowsay或boxes 我们这次讲一讲桌面的一些应用 oneko 我们可 ...

  10. ASP.NET Core 程序集注入(二)

    public void ConfigureServices(IServiceCollection services) { string strValue = Configuration.GetSect ...