iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python-接口自动化(九)
  • 345
分享到

Python-接口自动化(九)

接口Python 2023-01-31 00:01:02 345人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

(十)python操作Excel读/写测试数据 1、夹心饼干 setUp:在每一条测试用例执行之前执行 tearDown:在每一条测试用例执行之后执行 上面的这两个东东就叫做夹心饼干,在必要的时候写, 比如说在执行测试用例之前你有数据需

(十)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 import load_workbook
 2 
 3 # 打开Excel
 4 wb=load_workbook("xz.xlsx") # 返回打开的工作薄
 5 
 6 # 定位表单
 7 sheet=wb["Python"] # 传表单名
 8 
 9 # 定位单元格:根据行列值去定位
10 res=sheet.cell(1,1).value
11 print(res)

打印出来的结果是:小猪

 

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

 1 from openpyxl import load_workbook
 2 
 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)

打印出来的结果是:

5

6

 

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

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

 1 from openpyxl import load_workbook
 2 
 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} <class 'dict'>

 

 

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

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

 1 from openpyxl import load_workbook
 2 
 3 
 4 class DoExcel:
 5     def __init__(self, file_name, sheet_name):
 6         self.file_name = file_name
 7         self.sheet_name = sheet_name
 8 
 9     def get_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).value
22 
23             sub_data['url'] = sheet.cell (i, 2).value
24 
25             sub_data['data'] = sheet.cell (i, 3).value
26 
27             sub_data['expected'] = sheet.cell (i, 4).value
28 
29             test_data.append (sub_data)
30 
31         return test_data
32 
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 import load_workbook
 2 
 3 
 4 class DoExcel:
 5     def __init__(self, file_name, sheet_name):
 6         self.file_name = file_name
 7         self.sheet_name = sheet_name
 8         # 获取一个表单对象
 9         self.sheet_obj=load_workbook(self.file_name)[self.sheet_name]
10         self.max_row=self.sheet_obj.max_row
11 
12     def get_data(self,i,j):
13         '''根据传入的坐标来获取值'''
14         return self.sheet_obj.cell(i,j).value
15 
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 import load_workbook
 2 
 3 
 4 class DoExcel:
 5     def __init__(self, file_name, sheet_name):
 6         self.file_name = file_name
 7         self.sheet_name = sheet_name
 8 
 9     def get_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         return header
18 
19     def get_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).value
33             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}]

 

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

--结束END--

本文标题: Python-接口自动化(九)

本文链接: https://www.lsjlt.com/news/181993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python-接口自动化(九)
    (十)python操作Excel读/写测试数据 1、夹心饼干 setUp:在每一条测试用例执行之前执行 tearDown:在每一条测试用例执行之后执行 上面的这两个东东就叫做夹心饼干,在必要的时候写, 比如说在执行测试用例之前你有数据需...
    99+
    2023-01-31
    接口 Python
  • python+requests接口自动化
    文章来源:https://my.oschina.net/u/3041656/blog/820023         前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和j...
    99+
    2023-01-31
    接口 python requests
  • Python-接口自动化(三)
      (三)函数   1、函数 函数的语法: 1 def 函数名(): 2 3 函数体     a、函数的关键字是def,函数体就是你希望这个函数帮你实现什么功能,函数名命名需要遵循的原则是以小写字母分开,由数字字母数字...
    99+
    2023-01-31
    接口 Python
  • Python-接口自动化(六)
      (七)接口   1、接口:外部系统与本系统之间以及系统内部的各个子系统间,以约定标准提供的服务,包括对外提供的接口/对外提供的接口。 不同的请求协议:http  webservice  dubbo  socket http请求分为:...
    99+
    2023-01-31
    接口 Python
  • Python-接口自动化(十)
    (十一)ddt 1、利用ddt实现数据驱动,ddt是第三方模块,在终端输入pip install ddt 进行安装 导入:from ddt import ddt,data,unpack a、如果unpack后的参数少于5个可以使用 推荐...
    99+
    2023-01-31
    接口 Python
  • Python-接口自动化(一)
      一、python语言特点 1、易于学习:python有相对较少的关键字,结构简单,有一个明确定义的语法,学起来比较简单;   2、易于阅读:python代码定义的更清晰;   3、易于维护:python的成功在于它的源代码是相当容易...
    99+
    2023-01-31
    接口 Python
  • Python-接口自动化(七)
    (八)requests模块 1、requests是用python语言编写,属于第三方库,基于urllib,采用Apache2 Licensed开源协议的HTTP库,它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需...
    99+
    2023-01-31
    接口 Python
  • Python接口自动化之接口依赖
    目录一、场景说明二、token处理思路三、JsonPath基本用法1、JsonPath介绍2、JsonPath语法3、JsonPath源码4、JsonPath实战四、token依赖实...
    99+
    2022-11-12
  • 〖Python接口自动化测试实战篇④〗- 接口自动化测试详解
    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我。推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订...
    99+
    2023-09-04
    自动化 python自动化测试实战 自动化测试 接口测试 接口自动化测试
  • python接口自动化-token登录
    前言有些登录不是用cookie来验证的,是用token参数来判断是否登录。token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已;另外一种是在url请求参数里,这种更直观。 一、登录返回token1.如下图...
    99+
    2023-01-31
    接口 python token
  • python接口自动化测试(一)
    一.既然我们有这些的接口测试工具,为什么要做接口做自动化 敏捷开发,接口一般数量很大,团队实现接口测试,版本控制。 2、功能太死板,有些接口完全无法实现(复杂的加密接口,签名接口等) 3、接口项目当中...
    99+
    2023-09-01
    python 开发语言
  • python+pytest接口自动化参数关联
    目录前言一、什么是参数关联?二、有哪些场景?三、参数关联场景四、脚本编写1、在用例中按顺序调用2、 使用Fixture函数五、 总结前言 今天呢,笔者想和大家来聊聊python+py...
    99+
    2022-11-11
  • Python接口自动化浅析登录接口测试实战
    目录1、什么是接口?那么,接口测试和功能测试的区别在哪呢?2、如何开展接口测试?3、如何设计接口用例?1.获取接口文档Fiddler2.分析接口文档的接口,提取测试点3.接口测试用例...
    99+
    2022-11-12
  • Python接口自动化浅析如何处理接口依赖
    在前面的Python接口自动化测试系列文章:Python接口自动化浅析logging封装及实战操作, 其中介绍了将logging常用配置放入yaml配置文件、logging日志封装及...
    99+
    2022-11-12
  • Python接口自动化之文件上传/下载接口详解
    目录〇、前言一、文件上传接口1. 接口文档2. 代码实现二、文件下载接口1. 接口文档2. 代码实现总结〇、前言 文件上传/下载接口与普通接口类似,但是有细微的区别。 如果需要发送文...
    99+
    2022-11-13
  • python接口自动化1-发送get请求
    前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来就是学习它了。   一、环境安装 1.用pip安装requests模块 >>pip install requests  ...
    99+
    2023-01-30
    接口 python
  • python接口自动化框架怎么搭建
    要搭建Python接口自动化框架,可以按照以下步骤进行: 确定需要使用的Python库:一般情况下,需要使用requests库来...
    99+
    2023-10-23
    python
  • Python接口自动化浅析数据驱动原理
    目录一、openpyxl模块openpyxl模块介绍openpyxl安装openpyxl简单使用二、Excel用例管理三、ddt介绍及使用ddt介绍ddt使用ddt:data:unp...
    99+
    2022-11-12
  • Python接口自动化浅析Token应用原理
    目录一、Token基本概念及原理1、Token作用2、什么是Token3、Token运行原理4、Token认证优点5、Token和 Cookie、Session 的选型二、Token...
    99+
    2022-11-12
  • Python接口自动化之cookie、session应用详解
    目录一、cookie1、cookie介绍2、cookie原理二、session1、session介绍2、session原理1. 存储位置不同:2. 存储容量不同:3. 存取方式不同:...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作