pytestDDT技术_txt文件_csv文件_excel文件_数据库

一。数据结构:列表,数据字典,json串

二。文件:txt文件 csv文件 excel文件

三。数据库DDT:数据库连接 数据库提取

四。参数化 @pytest.mark.parametrize @pytest.fixture

一。数据结构

数据字典;

# 字典读取
# 方法1:读取key
for key in userinfo.keys():
    print(key)
# 方法2:读取value
for val in userinfo.values():
    print(val)
# 方法3:读取所有内容
for k in userinfo:
    print(k,userinfo[k])

json串

# 例子:json文件操作
import json
# 读取json文件,用json.load()方法转换成字典格式,再去读取.如果json文件里面有汉字,记得该编码为encoding='utf-8'否则乱码
jsonfile=open('interface.json','r',encoding='utf-8')
# print(jsonfile)
# print(type(jsonfile))
# 转换数据类型
jsondict=json.load(jsonfile)
#print(type(jsondict))
# 提取json文件中的内容
# 目标找到item里面的内容
for data in jsondict['item']:
    # print(data['name'])
    # 对于多层级的内容,逐层去找
    for d in data['request']['body']['formdata']:
        # print(d)
        for key in d:
            print(key,d[key])

 二,文件

2.1 txt文件的读取

打开文件: file=open('文件名.txt','r',encoding='uft-8')

读取文件内容:con=file.read()

写入文件内容:file.write('写入的内容')

关闭文件:file.close

处理完文件后,有2中方法可以进行DDT技术

2.1.1.DDT技术和@pytest.mark.parametrize参数化结合

2.1.2.DDT技术和conftest.py结合

 DDT方法2种不要混用。要么import+@pytest.mark.parametrize参数化:可以设置一个单独的数据驱动层,存放数据文件和数据驱动。团队成员需要数据时,直接import 然后使用

要么:使用conftest.py+@pytedt.fixture。conftest.py原理是,运行pytest项目之前,默认优先执行同级目录下的conftest.py文件,数据处理完后,加上固件

举例1parametrize。从txt文件读取内容,处理后用第一种@pytest.mark.parametrize参数化

import pytest
# txt参数化举例
# 定义一个方法专门处理字符串
def get_list():
    f1=open('eg.ext','r',encoding='utf8')
    content=f1.read()
    # 对读取的字符串进行处理,去掉头的[和尾的],然后按照,分割.按自己需求弄
    autholist=[]
    result=content[1:-1].split(', ')
    # 分割好的字符串append()放入列表待用
    for i in result:
        autholist.append(i)
    # 返回列表autolist方便接下来的@pytest.mark.parametrize参数化传入
    return autholist

class Test_parametirize_practice():
    # 将函数名get_list传入,返回值传入。这里是txt参数化处理得到的列表
    @pytest.mark.parametrize('parameter1',get_list)
    def test_practice1(self):
        print(get_list())

举例2conftest.py。pytest有更方便的管理数据驱动方法的办法:conftest.py

conftest.py特点:

1.conftest.py名字固定的,不可以修改

2.conftest.py文件所在目录必须存在__init__py文件

3.conftest.py文件不能被其他文件导入

4.所有同目录测试文件运行都会执行conftest.py文件

conftest.py一般和@pytest.fixture()固件放在一起使用

conftest原理是,运行pytest项目之前,默认优先执行当前层的conftest.py文件,数据处理完后,加上固件赋予直接传参的能力.注意;如果想conftest.py对所有文件都生效的话,一般建在根目录下

 

 

DDT和pytest融合几种方式分别是

1.同一py文件中,2.不同py文件中,3.公共数据层,这三种需要使用参数parametrize,或者import

4.conftest.py需要使用固件fixture

2.2 csv文件的读取,DDT

导入类库                        import csv

打开csv文件                   file=open('文件名','r',)

读取csv文件的内容         readers=csv.reader(csvfile)

写入csv文件的内容         file=open("文件名.csv",'w')

                                        writers=csv.writer(file)

关闭文件                          file.close()

直接粘贴小试验,包含文件的读,写,以及结合DDT参数化传参.

import csv
import pytest
def get_data():
    datalist=[]
    file=open('../DDT_test/testcase.csv','r')
    # 读文件
    result=csv.reader(file)
    # 跳过首行
    result.__next__()
    for row in result:
        # 将字符串类型转化为字典类型
        a=eval(row[2])
        datalist.append(a)
    print(datalist)
    # print(type(datalist))
    return datalist

class Test_file_operate():
    # 使用参数化方法,把得到的数据传入
    @pytest.mark.parametrize('userinfo',get_data())
    def test_file_read(self,userinfo):
        print(userinfo['username'])
        print(userinfo['password'])
        print(userinfo['state'])
# 写文件
# 把文件读取,然后写入'testreport.csv'文件中去
def write_csv():
    # newline=''可以去除行之间的空格
    file2=open('testreport.csv','w',newline='')
    writer=csv.writer(file2)
    file=open('../DDT_test/testcase.csv','r')
    readers=csv.reader(file)
    for row in readers:
        # 每行结尾添加’测试结果‘,然后把读到的内容写到文件里面
        row.append('测试结果')
        writer.writerow(row)
    # 操作完后一定记得关闭文件
    file2.close()
    file.close()

 2.3 excel文件读取+Pandas结合

导入类库        import pandas as pd

读取excel        df=pd.read_excel('文件名.xlsx')

提取对应行的内容 row=df.loc[1,3].values

提取对应列的内容         colum=df['输入参数'].values

首先需要下载pandas和xlrd库,才可以读取xlsx文件,但是pycharm默认的下载源是国外,经常超时下载失败,所以换源下载,如下,飞快

pip install pandas  -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install xlrd==1.2.0  -i https://pypi.tuna.tsinghua.edu.cn/simple  

新版的xlrd读取文件失败了,所以下载1.2.0的版本,确定稳定没问题

# 试验:excel文件操作
import pandas as pd
import pytest
def get_data():
    df=pd.read_excel('testcase.xlsx')
    # 取行:读取第0行的值。但是得注意,0表示第二行,默认不读取第一行标题行
    #取多行,例如loc[[0,2]],就是取第0 行和第二行,记得是2个中括号
    row=df.loc[0].values
    # 取标题为‘输入参数’的列
    cloum=df['输入参数'].values
    #取出的值 cloum的类型是pandas自己的类型numpy.ndarray,不是字典或者字符串,需要转化
    #使用tolist()方法可以直接转化为列表
    listdata=cloum.tolist()

    return listdata

class Test_practice_xlsx():
    @pytest.mark.parametrize('userinfo',get_data())
    def test_002(self,userinfo):
        # 使用eval()方法将字符串转化为字典格式
        dd=eval(userinfo)
        print(dd['username'])
        print(dd['password'])

  2.4.DDT数据库的读取

待续,

好累,今天先睡了。。。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值