接口自动化之ddt

接口自动化会用到数据驱动模式,也就是一个ddt模块

目录

1、环境准备

2、调用时标准格式

3、应用(结合excle来传值)

1、环境准备

首先,需要安装ddt模块

pip install ddt

2、调用时标准格式

在类下面如下写上:@ddt.ddt

在调用的方法下面需要写上:@ddt.data(需要传入的多组数据)

3、应用(结合excle来传值)

第一步:写一个excle取数据方法:

# coding:utf-8

import xlrd
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  #返回的是excle的每一行的值

#调试一下,上面函数是否正确
if __name__ =="__main__":
    filepath ="D:\1.xlsx"
    sheetName="Sheet1"
    data=ExcelUtil(filepath,sheetName)
    print(data.dict_data())

第二步:写一个接口模块,一个case模块

第三步:在case模块中使用ddt模块、接口模块,来使用excle传入参数值

# coding:utf-8

import requests
import unittest
import ddt
import readexcle1
import login01

#excle放在文件下,就可以直接只写文件名
d=readexcle1.ExcelUtil("D:\1.xlsx", sheetName="Sheet1") #带上模块名,不然会报错
data1 = d.dict_data()

@ddt.ddt
class Test(unittest.TestCase):
    def setUp(self):
        self.s = requests.session()

#在这一步,就会取每一行的数据进行用例的执行
    @ddt.data(*data1)
    def test_(self, A):  #通过参数A,来取列表的每一行的每一个值
        # print("测试用例数据:%s"%aaaa)
        user = A['user']  
        password = A['password']
        q=login01.Login01()
        result =q.login01(user, password)
        # print(result)
        login_result = login01.is_login_sucess(result)
        # print("实际结果:%s" % login_result)  # 实际结果 bool
        expect = A['expect']   # 取文件中的True和用例跑出来的True对比,做期望值
        # print str(login_result)
        self.assertTrue(str(login_result) == expect)   #实际结果为bool值,转成字符串与期望结果做对比

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

  

原文地址:https://www.cnblogs.com/weizhideweilai/p/9465089.html