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

下面是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. OpenCV程序练习(四):人脸识别

    一.人脸检测 准备图片 代码 import cv2 img=cv2.imread("Faces.jpeg") faceCascade=cv2.CascadeClassifier(' ...

  2. mapreduce压缩

    这是mr的一种优化策略,通过压缩编码对mapper或者reducer的输出进行压缩,以减少磁盘io,提高mr运行速度(但也相应增加了cpu运算负担) 特性: 1.mr支持将map输出的结果或者redu ...

  3. C#多态性学习,虚方法、抽象方法、接口等用法举例

    1. 多态性定义   C#中的多态性是OOP(面向对象编程)的一个基本概念,它允许一个对象在不同情况下表现出不同的行为,以增强代码的可重用性和灵活性.   根据网上的教程,我们得知C#多态性分为两类, ...

  4. k8s实战 ---- pod 基础

    如果你对k8s还不了解,可以看下前文 k8s 实战 1 ---- 初识       (https://www.cnblogs.com/jilodream/p/18245222) 什么是pod,pod在 ...

  5. Unicode 和JS中的字符串

    计算机内部使用二进制存储数据,只认识0和1两个数字,计算机的世界只有0和1.但我们的世界却充满着文字,如a, b, c.怎样才能让计算机显示文字,供我们使用和交流?只能先把文字转化成数字进行存储,然后 ...

  6. 第一个Vert.x程序(基于Gradle7)

    这里跑一下Vert.x中文站的入门程序(以后就不写那个点了,或者干脆写vx)简易教程.这个程序非常简单,为啥还写一下呢?因为里面的依赖有点老,已经不能直接成功启动了. 搭建项目 通过IDEA创建Gra ...

  7. TOPSIS模型原理以及代码实现

    TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距.下面我们来介绍具体步骤与代码实现 目录 问题提出 第一步:数据输入 1.如何从excel ...

  8. Peaks:每周至少要进行一次用户访谈?

    名字:Peaks 开发者 / 团队:Vogelhaus Apps GmbH 平台:iOS.watchOS 请简要介绍下这款产品 每个人生活的节奏都有一个内置的生理时钟,这就是所谓的昼夜节律.它不仅控制 ...

  9. VBA | 统计数组某元素出现的次数,适用于一维、二维数组

    很简单的需求,但是中文网络上基本都是循环的方法,经过查找下面的方法很有效.为了方便用户的使用,进行了如下的整改. 1 Sub Statistics_Number_of_occurrences_test ...

  10. Apache Kyuubi 在小米大数据平台的应用实践

    导读:今天分享的主题是<Kyuubi 在小米大数据平台的应用实践>,主要分为四部分内容: Kyuubi 在小米的落地过程 打造易用和高可用的 Kyuubi 服务 基于 kyuubi 的改进 ...