持续完善中……

使用python2.7有写过一篇ddt,此处再用3.6写一次,这次把接口headers、url、body、expect、result都写到excle中

 

目录

1、模块准备

2、读写excle的类

3、使用ddt

 

 

1、模块准备

ddt数据驱动模块:

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

python3.6+requests实现接口自动化8

xlrd读取excle模块:

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

python3.6+requests实现接口自动化8

openpyxl写excle模块:pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

python3.6+requests实现接口自动化8

 

2、读写excle的类

读取excle:

  • 打开workbook获取Book对象

xlrd.open_workbook(filename[, logfile, file_contents, ...]):打开excel文件
filename:需操作的文件名(包括文件路径和文件名称);
若filename不存在,则报错FileNotFoundError;
若filename存在,则返回值为xlrd.book.Book对象

  •  获取Book对象中所有sheet名称

BookObject.sheet_names():获取所有sheet的名称,以列表方式显示

 

封装读取文件,返回字典对象:

import xlrd
import os

class ExcelUtil():
    def __init__(self,exclePath,sheetName="Sheet1"):
        self.data=xlrd.open_workbook(exclePath)
        self.table=self.data.sheet_by_name(sheetName)
        #获取第一行作为key值
        self.keys=self.table.row_values(0)
        #获取总行数
        self.rowNum=self.table.nrows
        #获取总列数
        self.colNum=self.table.ncols

    def dict_data(self):
        if self.rowNum<=1:
            print ("总行数小于1")
        else:
            r=[]
            j=1
            for i in list(range(self.rowNum-1)):
                s={}
                #从第二行取对应value值
                s['rowNum']=i+2
                values=self.table.row_values(j)
                for x in list(range(self.colNum)):
                    s[self.keys[x]]=values[x]
                r.append(s)
                j+=1
            return  r


if __name__ =="__main__":
    cur_path=os.path.abspath("") #获取脚本所在路径
    report_path=os.path.join(cur_path,"data.xlsx")#将当前脚本和测试数据放在一个文件夹下
    print(report_path)
    data=ExcelUtil(report_path)
    print(data.dict_data())
    # print(data)

 

写excle:

根据行列找到单元格,然后将值写入单元格,并保存

from openpyxl import load_workbook
import openpyxl

class Write_excel(object):
    def __init__(self,filename):
        self.filename=filename
        self.wb=load_workbook(self.filename)
        self.ws=self.wb.active

    def write(self,row_n,col_n,value):
        self.ws.cell(row_n,col_n).value=value
        self.wb.save(self.filename)

 

if __name__=="__main__":
    m2="G:\\api\\jpress_api\\common\\data03.xlsx"
    wt=Write_excel(m2)
    wt.write(1,2,"test")

 

3、使用ddt

第一步:读取excle的第一行头部信息,data1是通过dict_data()函数获取到字典对象,形如:[{'rowNum': 2, 'id': 1.0, 'url': 'xx', 'headers': 'xxx','body':'xx'}]

通过字典取值方式得到str对象,然后通过eval()再转成dict传入post请求中

        url=data1['url']  #url
        body=eval(data1['body'])#body
        headers=eval(data1['headers']) #headers
        expect=data1['expect'] #期望值

  

注:使用eval函数将str转换成字典类型的值,当然也可以使用json.loads()来转换

 第二步:用excle准备数据

python3.6+requests实现接口自动化8

 

 

 第三步:使用ddt模块

ddt模块他会顺序取每一行数据进行执行,就算报错,它也会完成所有组别数据的遍历

import ddt
from common.readexcle import *
import unittest
from common.write_excle import *
import requests

#读取本地的测试数据
datapath="G:\\api\\jpress_api\\common\\data01.xlsx"
d=ExcelUtil(datapath)
testdata=d.dict_data()   #读excle
wt=Write_excel(datapath) #写excle

@ddt.ddt
class Testme(unittest.TestCase):
    def setUp(self):
        self.requests=requests
    #开始读取用例
    @ddt.data(*testdata)
    def test(self,data1):
        id=data1['id']
        url=data1['url']  #url
        body=eval(data1['body'])#body
        headers=eval(data1['headers']) #headers
        expect=data1['expect'] #期望值
        result=self.requests.post(url,body,headers=headers)
        myresult=result.json()["message"]
        #预期结果等于实际结果,则设置用例结果为pass,否则为fail
        if myresult==expect:
            data1['result']="pass"
        else:
            data1['result']="fail"
        #将用例结果写回到excle中
        wt.write(id+1,6,data1['result'])
        self.assertEqual(expect,myresult) #实际结果等于预期结果

if __name__=="__main__":
    unittest.main()
 

 

 excle结果:

python3.6+requests实现接口自动化8

 

相关文章:

  • 2021-08-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-07
  • 2021-07-06
  • 2022-12-23
  • 2021-08-02
猜你喜欢
  • 2022-01-29
  • 2021-07-21
  • 2021-11-02
  • 2021-08-31
  • 2022-02-06
  • 2022-01-24
  • 2021-11-08
相关资源
相似解决方案