python3+unittest+ddt+excel+jenkins接口自动化测试讲解(二)

hello,今天和大家一起来了解下接口自动化中得ddt+excel操作

首先我们来安装一下ddt,命令:pip3 install ddt,ddt的本质其实是一个装饰器,主要是修饰类和修饰测试方法,废话不多说,直接上案例:

from ddt import ddt,data
import unittest
test_data=[[1,2,3],[4,5,6]]

@ddt
class TestDemo(unittest.TestCase):
    @data(*test_data)
    def test_01(self,item):
        print(item)


if __main__=='__main__':
    unittest.main()


输出结果:
        [1,2,3]
        [4,5,6]

接下来我们来学习下如何从excel中读出数据,这里我们先来介绍第一种方法openpyxl,下面是excel的格式

 直接上代码:

from openpyxl import load_workbook


class Doexcel(object):
    def __init__(self,file_name,sheet_name):
        self.file_name=file_name
        self.sheet_name=sheet_name

    def get_data(self):
        wb=load_workbook(self.file_name)#打开excel
        sheet=wb[self.sheet_name]#定位excel中的sheet表单
        test_data=[]
        for x in range(2,sheet.max_row+1):
            sub_data={}
            sub_data['case_number'] = sheet.cell(i, 1).value
            sub_data['case_title'] = sheet.cell(i, 2).value
            sub_data['case_url'] = sheet.cell(i, 3).value
            sub_data['case_method'] = sheet.cell(i, 4).value
            sub_data['case_header'] = sheet.cell(i, 5).value
            sub_data['case_body'] = sheet.cell(i, 6).value
            sub_data['case_expect_result'] = sheet.cell(i, 7).value
            sub_data['case_result'] = sheet.cell(i, 8).value
            sub_data['test_result'] = sheet.cell(i, 9).value
            test_data.append(sub_data)
        return test_data
    
    def write_back(self,i,result,Testresult):
        wb=load_workbook(self.file_name)
        sheet=wb[self.sheet_name]
        sheet.cell(i,7).value=result
        sheet.cell(i,8).value=Testresult
        wb.save(self.file_name)

if __name__=='__main__':
    Doexcel('xxxx.xlsx','Sheet').get_data()

这里需要注意得是,对于openpyxl需要使用得excel是xlsx格式得,同时openpyxl对于行和列都是从下边1开始,不像xlrd是从0开始得,另外上面得xlsx文件我是存放在当前目录里得,所以不需要绝对路径,对于上面有一些小知识点,上代码直接看:

from openpyxl import load_workbook
!:打开excel表
wb=load_workbook('xxx.xlsx')
2:定位表单
sheet=wb['Sheet1']
3:读取数据
res=sheet.cell(1,1).value
4:最大行
print(sheet.max.row)
5:最大列
print(sheet.max_column)

对于上面一个个循环在excel中找值,是否可以换一种方式,不需要手动添加列名,上代码:

from openpyxl import load_workbook

class Doexcel(object):
    def __init__(self,file_name,sheet_name):
        self.file_name=file_name
        self.sheet_name=sheet_name

    def do_excel(self):
        open_file=load_workbook(self.file_name)
        sheet_value=open_file[self.sheet_name]
        # print(sheet_value)
        data=[]
        for x in range(1,sheet_value.max_row+1):
            for y in range(1,sheet_value.max_column+1):
                sheet_data={}
                if x + 1 <= sheet_value.max_row:
                    sheet_name=sheet_value.cell(x,y).value
                    sheet_data[sheet_name]=sheet_value.cell(x+1,y).value
                    data.append(sheet_data)
        print(data)
        # return data.append(sheet_data)


if __name__ == '__main__':
    Doexcel(r'这里填文件得绝对路径\xxx.xlsx', 'Sheet1').do_excel()

 

你可能感兴趣的:(自动化测试)