python 接口自动化 recharge_Python-接口自动化(九)

python操作Excel处理测试数据(九)

(十)python操作Excel读/写测试数据

1、夹心饼干

setUp:在每一条测试用例执行之前执行

tearDown:在每一条测试用例执行之后执行

上面的这两个东东就叫做夹心饼干,在必要的时候写, 比如说在执行测试用例之前你有数据需要提前准备好,在测试用例执行结束之后有东西需要清除掉,就可以用夹心饼干。在之后的代码中可以看到这个夹心饼干的作用和用法。

2、解决用例相互关联性或依赖性太强

方法1:写到setUp里面,每次都重新对第一条用例进行请求;

方法2:全局变量

方法3:反射

3、Excel处理测试数据

在这一部分会用到两个东西:pip install openpyxl,pip install ddt (需要安装好)

注意:openpyxl只支持后缀为.xlsx的格式,其余的均不支持;新建Excel的方式一:可以在桌面先创建一个后缀为.xlsx格式的Excel,再复制到写代码所在的文件夹中即可;方法二:找到写代码的当前目录路径,在目录路径下创建一个后缀为.xlsx的Excel即可。

(1)新建Excel并读取Excel单元格中的数据

首先我在桌面创建了一个名为xz.xlsx的Excel,在Excel中第一行第一列写了一个小猪,表单名是python

1 from openpyxl importload_workbook2

3 #打开Excel

4 wb=load_workbook("xz.xlsx") #返回打开的工作薄

5

6 #定位表单

7 sheet=wb["python"] #传表单名

8

9 #定位单元格:根据行列值去定位

10 res=sheet.cell(1,1).value11 print(res)

打印出来的结果是:小猪

(2)打印行和列的最大值(我举的例子是存放了5行6列的数据)

1 from openpyxl importload_workbook2

3 #打开Excel

4 wb=load_workbook("xz.xlsx") #返回打开的工作薄

5

6 #定位表单

7 sheet=wb["python"] #传表单名 返回一个表单对象

8

9 #定位单元格:根据行列值去定位

10 res=sheet.cell(1,1).value11

12 #表单的最大行

13 print(sheet.max_row)14

15 #表单的最大列

16 print(sheet.max_column)

打印出来的结果是:

5

6

(3)数据从Excel中读取出来之后的类型:数字还是数字,其余都是字符串

例如:(我举的例子是在Excel第一行中写入了4个数据)

1 from openpyxl importload_workbook2

3 #打开Excel

4 wb=load_workbook("xz.xlsx") #返回打开的工作薄

5

6 #定位表单

7 sheet=wb["python"] #传表单名 返回一个表单对象

8

9 #定位单元格:根据行列值去定位

10 #res=sheet.cell(1,1).value

11

12 #表单的最大行

13 print(sheet.max_row)14

15 #表单的最大列

16 print(sheet.max_column)17

18 #print(res)

19

20 #从Excel中读取数据

21 print("url:{0}".format(sheet.cell(1,1).value))22 print("data:{0}".format(sheet.cell(1,2).value))23 print("code:{0}".format(sheet.cell(1,3).value))24 print("method:{0}".format(sheet.cell(1,4).value))

打印出来的结果是:

url:case_id

data:module

code:title

method:http_method

这里可以用type()函数打印出这些数据的类型

(4)eval():把数据类型转换成原本的数据类型

例如:

1 s='{"age":18}'

2 print(eval(s),type(eval(s)))

打印出来的结果是:{'age':18}

(5)读取数据的三种方式

方式一:一次性读取所有的数据,对内存的要求要高一些(推荐使用)

1 from openpyxl importload_workbook2

3

4 classDoExcel:5 def __init__(self, file_name, sheet_name):6 self.file_name =file_name7 self.sheet_name =sheet_name8

9 defget_data(self):10 wb =load_workbook (self.file_name)11

12 sheet =wb[self.sheet_name]13 #14 #res = sheet.cell (1, 1).value

15

16 #取到第一行的所有数据

17 test_data =[]18 for i in range (1, sheet.max_row + 1):19 sub_data ={}20

21 sub_data['method'] = sheet.cell (i, 1).value22

23 sub_data['url'] = sheet.cell (i, 2).value24

25 sub_data['data'] = sheet.cell (i, 3).value26

27 sub_data['expected'] = sheet.cell (i, 4).value28

29 test_data.append (sub_data)30

31 returntest_data32

33

34 if __name__ == '__main__':35 print (DoExcel ("xz.xlsx", 'python').get_data ())

打印出来的结果是:

[{'method': 'case_id', 'url': 'module', 'data': 'title', 'expected': 'http_method'}, {'method': 1, 'url': 'login', 'data': '正常登录', 'expected': 'post'}, {'method': 2, 'url': 'login', 'data': '输入错误密码', 'expected': 'get'}, {'method': 3, 'url': 'recharge', 'data': '正常充值', 'expected': 'post'}, {'method': 4, 'url': 'recharge', 'data': '充值输入负数', 'expected': 'get'}]

方式二:在需要用的时候读取所有的数据(会对磁盘的读写要求高一些)

1 from openpyxl importload_workbook2

3

4 classDoExcel:5 def __init__(self, file_name, sheet_name):6 self.file_name =file_name7 self.sheet_name =sheet_name8 #获取一个表单对象

9 self.sheet_obj=load_workbook(self.file_name)[self.sheet_name]10 self.max_row=self.sheet_obj.max_row11

12 defget_data(self,i,j):13 '''根据传入的坐标来获取值'''

14 returnself.sheet_obj.cell(i,j).value15

16

17

18

19 if __name__ == '__main__':20 res=DoExcel ("xz.xlsx", 'python').get_data (1,1)21 print(res)

打印出来的结果是:case_id

方式三:利用嵌套循环读取数据(以我自己创建的Excel为例,仅供参考)

1 from openpyxl importload_workbook2

3

4 classDoExcel:5 def __init__(self, file_name, sheet_name):6 self.file_name =file_name7 self.sheet_name =sheet_name8

9 defget_header(self):10 '''获取第一行的标题'''

11 wb=load_workbook(self.file_name)12 sheet=wb[self.sheet_name]13 #存储标题行

14 header=[]15 for j in range(1,sheet.max_column+1):16 header.append(sheet.cell(1,j).value)17 returnheader18

19 defget_data(self):20 '''根据嵌套循环读取数据'''

21

22 wb =load_workbook (self.file_name)23

24 sheet =wb[self.sheet_name]25

26 header=self.get_header()#拿到header

27 test_data =[]28

29 for i in range (2, sheet.max_row + 1):30 sub_data ={}31 for j in range(1,sheet.max_column+1):32 sub_data[header[j-1]]=sheet.cell(i,j).value33 test_data.append (sub_data)34

35 return test_data #返回获取到的数据

36

37

38 if __name__ == '__main__':39 print (DoExcel ("xz.xlsx", 'python').get_data ())

打印出来的结果是:

[{'case_id': 'case_id', 'module': 'module', 'title': 'title', 'http_method': 'http_method', 'url': 'url', 'data': 'data', 'expected': 'expected', None: None}, {'case_id': 1, 'module': 'login', 'title': '正常登录', 'http_method': 'post', 'url': 'http://test.xxx.com/xxx/mvc/api/member/login', 'data': '{"mobilephone": "test", "pwd": "test"}', 'expected': 10001, None: None}, {'case_id': 2, 'module': 'login', 'title': '输入错误密码', 'http_method': 'get', 'url': 'http://test.xxx.com/xxx/mvc/api/member/login', 'data': '{"mobilephone": "test", "pwd": "test111"}', 'expected': 20111, None: None}, {'case_id': 3, 'module': 'recharge', 'title': '正常充值', 'http_method': 'post', 'url': 'http://test.xxx.com/xxx/mvc/api/member/recharge', 'data': '{"mobilephone": "test", "amount": "100"}', 'expected': 10001, None: None}, {'case_id': 4, 'module': 'recharge', 'title': '充值输入负数', 'http_method': 'get', 'url': 'http://test.xxx.com/xxx/mvc/api/member/recharge', 'data': '{"mobilephone": "test", "amount": "-100"}', 'expected': 20117, None: None}]

以上,第九部分到此结束~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值