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

下面是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. C#中?.、??、?:、及?等符号用途

    1.可空类型修饰符(?)   众所周知,在C#中引用类型可以使用一个null引用来表示一个不存在的值,比如 string str = null 是正确的: 但是值类型却不能为空,比如 int k = ...

  2. C语言gcc编译环境搭建

    第一步,根据以下链接下载gcc工具包: gcc工具包下载地址: 链接:https://pan.baidu.com/s/1JqEjakTcWLPv7p6zkah6sA提取码:k4d2 第二步,将下载好的 ...

  3. P8451 题解

    显然,题面明摆着让你写一个可持久化 AC 自动机. 但是从空间来说这是不可能的. 想起做 不强制在线 的可持久化数据结构的一种方法,建立"时光树",具体来说,假若版本 \(x\) ...

  4. debian11安装备忘

    1. 网卡驱动 参考网址:如何安装Debian RTL8821CE驱动? 2. 分辨率 貌似还是有点问题,还要进一步研究一下 参考网址:虚拟机中debian11修改控制台(console)分辨率|li ...

  5. Jingle Bio:产品出海的最重要一课是「重营销轻技术」?

    名字: Jingle Bio 开发者 / 团队: Luo Baishun 平台: Web 请简要介绍下这款产品 Jingle Bio 是一款不需要任何编程基础就可以轻松驾驭的个人网站制作工具,你可以使 ...

  6. oeasy教您玩转vim - 86 - # 外部命令external Command

    ​ 外部命令 external 回忆 上次研究的是global :[range]global/{pattern}/{command} range 是执行的范围 pattern 是搜索的模式 comma ...

  7. VBA:用代码操作代码

    Sub auto_open() Call runtimer '打开文档时自动运行 End Sub Sub runtimer() Application.OnTime Now + TimeValue(& ...

  8. SMU Summer 2024 Contest Round 2 (7.9)zhaosang

    A-A http://162.14.124.219/contest/1006/problem/A 考查用vector画图 我枚举到n==5才开始用,浪费40分钟,还是找规律太慢,得多学 做题代码如下: ...

  9. .NET 控件转图片

    Windows应用开发有很多场景需要动态获取控件显示的图像,即控件转图片,用于其它界面的显示.传输图片数据流.保存为本地图片等用途. 下面分别介绍下一些实现方式以及主要使用场景 RenderTarge ...

  10. RPA京麦咚咚批量发送消息

    京麦咚咚发送消息,首先我们需要确定给谁发,发送什么内容 给谁发:可以传入京东用户名.京东订单号.咚咚将通过此条件进行搜索进入会话框 发送什么内容:批量发送信息给不同的用户,比如给不同的订单用户发送其相 ...