python----数据驱动@ddt.file_data结合yaml文件的使用

一、创建yaml文件
1. 安装yaml模块
 pip install pyyaml
2. 新建yaml文件
 右键任意文件夹-->New-->File,输入文件名并以.yaml或.yml结尾

二、yaml文件格式

1. 列表
 列表中的所有元素缩进相同,且均已“- ”(一个横杠和一个空格)开头

- 苹果
- 橙子
- 香蕉

代码读取yaml文件的数据

import yaml

f = open(r'C:\Users\yitai\Desktop\python相关\综评_json\test1.yaml',encoding='utf-8')
res = yaml.load(f)
print(type(res))
print(res)

最后打印结果为:
 
2. 字典
 字典中同级别的元素缩进相同,由简单的键 : 值的形式组成(必须得是英文冒号,且冒号后面要跟一个空格)

name : 张三
age : 25
phone : 18700000000

同上代码读取yaml文件的数据,最后打印结果为:

3. 复合结构

-
  cookieType : 1
  dataType: 0
  url : user/login
  method : post
  detail : 登录
  data :
    username: 张三
    password : 123456
  check :
    - 操作成功

最后打印结果为:

三、测试代码

import unittest,requests
import ddt
from urllib import parse
from conf.setting import BASE_URL,COOKIE
@ddt.ddt
class My_case(unittest.TestCase):
    base_url = BASE_URL
    @ddt.file_data(r'C:\Users\****\Desktop\****\case_data\test1.yaml')#ddt帮你读文件,获取文件内容,循环调用函数
    def test_request(self,**kwargs):
        detail = kwargs.get('detail','没写用例描述')
        self._testMethodDoc = detail  #动态的用例描述
        url = kwargs.get('url')#url
        url = parse.urljoin(self.base_url,url)#拼接好url
        method = kwargs.get('method','get')#请求方式
        data = kwargs.get('data',{}) #请求参数
        header = kwargs.get('header',{})#请求头
        cookieType = kwargs.get('cookieType')
        check = kwargs.get('check')
        dataType = kwargs.get('dataType')
        method = method.lower() #便于处理

        if cookieType:
            cookie = COOKIE
        else:
            cookie={}
        try:
            if method=='post':
                if dataType:
                    res = requests.post(url,json=data,cookies=cookie,headers=header).text
                else:
                    res = requests.post(url,data=data,cookies=cookie,headers=header).text
            else:
                res = requests.get(url,params=data,cookies=cookie,headers=header).text
        except Exception as e:
            print('接口请求出错')
            res = e
        # 列表
        for c in check:
            self.assertIn(c,res,msg='预计结果不符,预期结果:'+c +''+ '实际结果:' +res)
if __name__ == '__main__':
    unittest.main()
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(My_case))
    report_html = BeautifulReport.BeautifulReport(suite)
    # report_html.report(filename='test', description='用例描述')
    fmt = '{date}_TestReport.html'.format(date=time.strftime('%Y%m%d%H%M%S'))
    #生成报告的文件名格式20180329190544_TestReport.html
    report_html.report(filename=fmt, description='用例描述')

四、yaml文件中参数化
下面以创建体育考试为例

import datetime
def get_cur_time(dic: dict): #取系统当前日期
    if 'cur_time' in dic.values():
        for k in dic:
            if dic.get(k) == 'cur_time':
                dic[k] = '%s' % datetime.date.today()
    return dic
import unittest,requests
@ddt.ddt
class Physical(unittest.TestCase):
    base_url = BASE_URL
    @ddt.file_data(r'C:\Users\yitai\Desktop\python相关\综评_json\case_data\setxqjy.yaml')#ddt帮你读文件,获取文件内容,循环调用函数
    def test_request(self,**kwargs):
        detail = kwargs.get('detail','没写用例描述')
        self._testMethodDoc = detail  #动态的用例描述
        url = kwargs.get('url')#url
        url = parse.urljoin(self.base_url,url)#拼接好url
        method = kwargs.get('method','get')#请求方式
        data = kwargs.get('data',{}) #请求参数
        data = get_cur_time(data) #将yaml文件中的cur_time字段替换为系统当前时间
        header = kwargs.get('header',{})#请求头
        cookieType = kwargs.get('cookieType')
        check = kwargs.get('check')
        dataType = kwargs.get('dataType')
        method = method.lower() #便于处理

        if cookieType:
            cookie = COOKIE
        else:
            cookie={}
        try:
            if method=='post':
                if dataType:
                    res = requests.post(url,json=data,cookies=cookie,headers=header).text
                else:
                    res = requests.post(url,data=data,cookies=cookie,headers=header).text
            else:
                res = requests.get(url,params=data,cookies=cookie,headers=header).text
        except Exception as e:
            print('接口请求出错')
            res = e
        # 列表
        for c in check:
            self.assertIn(c,res,msg='预计结果不符,预期结果:'+c +''+ '实际结果:' +res)


if __name__ == '__main__':
    unittest.main()
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(Physical))
    report_html = BeautifulReport.BeautifulReport(suite)
    # report_html.report(filename='test', description='用例描述')
    fmt = '{date}_TestReport.html'.format(date=time.strftime('%Y%m%d%H%M%S'))
    #生成报告的文件名格式20180329190544_TestReport.html
    report_html.report(filename=fmt, description='用例描述')

 

 



 

 

 

 

转载于:https://www.cnblogs.com/yttbk/p/10180969.html

如果你想使用`@file_data`装饰器来从YAML文件获取多个参数,可以按照以下步骤进行操作: 首先,确保你已经安装了`ddt`和`pyyaml`库。可以使用以下命令进行安装: ``` pip install ddt pyyaml ``` 然后,创建一个YAML文件(例如data.yaml),在其添加要使用的参数。参数可以按照键值对的形式进行组织。 例如,data.yaml的内容如下: ```yaml - username: username1 password: password1 - username: username2 password: password2 ``` 接下来,你可以创建一个测试类,并在测试方法上使用`@ddt`装饰器。然后,使用`@file_data`装饰器来指定YAML文件的路径。 下面是一个示例代码: ```python import unittest import yaml from ddt import ddt, file_data @ddt class MyTestClass(unittest.TestCase): @file_data('data.yaml') def test_login(self, credentials): username = credentials['username'] password = credentials['password'] # 执行你的登录测试逻辑 print(f"Username: {username}, Password: {password}") if __name__ == '__main__': unittest.main() ``` 在上面的示例,`test_login`方法使用了`@file_data('data.yaml')`装饰器来指定了YAML文件的路径。在方法内部,我们可以通过访问`credentials`参数的键来获取用户名和密码。 当你运行这个测试类时,`test_login`方法会根据YAML文件的每一个键值对运行测试。 希望这个示例能够帮助你使用`@file_data`装饰器从YAML文件获取多个参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值