python+requests+unittest执行自动化接口测试
1、安装requests、xlrd、json、unittest库
<1>pip 命令安装:
pip install requests
pip install xlrd
pip install json
pip install unittest
<2> pycharm里安装
2、利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施)

3、先在base包里创建一个Base_Page.py

<1>导入模块,并创建Base类,封装各类请求方法
import requests #导入requests模块
class Base():
def method_post(self,url,params = None,data = None,headers = None,files = None):
return requests.post(url = url,params = params,data = data,headers = headers,files = files)
def method_get(self,url,params = None,data = None,headers = None,files = None):
return requests.get(url = url,params = params,data = data,headers = headers,files = files)
def method_put(self,url,params = None,data = None,headers = None,files = None):
return requests.put(url = url,params = params,data = data,headers = headers,files = files)
def method_delete(self,url,params = None,data = None,headers = None,files = None):
return requests.delete(url = url,params = params,data = data,headers = headers,files = files)
因为每一个请求都会有params参数或是data参数,但是不可能两个都存在,所以这里用了None,依次类推
<2>适配于接口用例执行,读取Excel表时,将各类请求做判断,当符合哪一种时,就去执行哪一种
def requests_type(self,method,url,params = None,data = None,headers = None,files = None):
if method =='post' or method =='POST':
return self.method_post(url = url,params = params,data = data,headers = headers,files = files)
elif method =='get' or method =='GET':
return self.method_get(url = url,params = params,data = data,headers = headers,files = files)
elif method =='put' or method =='PUT':
return requests.put(url = url,params = params,data = data,headers = headers,files = files)
elif method =='delete' or method =='DELETE':
return requests.delete(url = url,params = params,data = data,headers = headers,files = files)
<3> 将几种请求做简单调试,调试通了,那么我们就可以进行下一项

也可以对需要拿到cookie的接口进行封装方法保存:
def Get_Login_cookie(self,data):
res = self.method_post(url = "请求网址",data = data)
return {"userId":str(res.json()['result']['userId']),"sessionId":res.json()['result']['sessionId']}
之后我们要将base页验证的这些代码做清除,否则的话永远都是调的这些接口
4、再common类下创建commons.py文件,并创建common类

<1> 封装日志方法
这里我添加了一个data包,用于存放xlrd表,以及html报告存放路径、log日志存放路径
log_path = r'D:\PycharmProjects\自动化接口\自动化接口测试\report\logs'
report_html = r'D:\PycharmProjects\自动化接口\自动化接口测试\report\html'
read_xlrd = r'D:\PycharmProjects\自动化接口\自动化接口测试\data'
class Common():
#封装日志方法
def get_logs(self,path = log_path):
import logging,time
logs = logging.getLogger()
logs.setLevel(logging.DEBUG)
path = path+'/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.log'
write_file = logging.FileHandler(path,'a+',encoding='utf-8')
write_file.setLevel(logging.DEBUG)
set_logs = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s')
write_file.setFormatter(set_logs)
pycharm_text = logging.StreamHandler()
pycharm_text.setFormatter(set_logs)
logs.addHandler(write_file)
logs.addHandler(pycharm_text)
return logs
<2> 封装读取Excel表方法,把他转换成字典形式,方便json格式读取
# 读取Excel表方法,方便后续读取接口用例数据
def ReadExcelTypeDict(self,file_name,path = read_xlrd):
path = path+'/' + file_name
import xlrd
work_book = xlrd.open_workbook(path) # 打开Excel表
sheets = work_book.sheet_names() # 获取所有的sheets页
DatasList = []
for sheet in sheets:
sheets = work_book.sheet_by_name(sheet)
nrows = sheets.nrows
for i in range(0,nrows):
values = sheets.row_values(i)
DatasList.append(values)
title_list = DatasList[0]
content_list = DatasList[1:]
new_list = []
for content in content_list:
dic = {}
for i in range(len(content)):
dic[title_list[i]] = content[i]
new_list.append(dic)
return new_list #最终返回为字典形式 有键和值
为什么要转换格式呢?
这里就涉及到了怎么设计一个自动化接口用例

用例的参数值要用json格式写入,不要有空格
预期结果的出参也要用json格式写入
不要有' '值都要用" "包起来
<3>封装一个生成HTML报告方法
# 封装一个HTML报告方法
def GetHtmlResult(self,suite,title,path = report_html):
import HTMLTestReportCN,time
path = path + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.html'
with open(path,'wb+') as f:
run = HTMLTestReportCN.HTMLTestRunner(stream=f,description='用户相关接口测试报告',tester='小白',title = title)
run.run(suite)
其余还有需要补充的可以继续添加,我这里三个基本够用
5、在case包下创test用例,并调用我们在base页封装好的请求api以及common中的读取Excel数据表联合使用
<1>创建test_login.py

<2> 导入unittest、common类下的commons类、ddt数据驱动、Base下的base_page页
import unittest
import ddt
import 自动化接口测试.common.commons as common
from 自动化接口测试.base.Base_Page import Base
<3> 搭建unittest框架内部,并填充方法
import unittest
import ddt
import 自动化接口测试.common.commons as common
from 自动化接口测试.base.Base_Page import Base
r = common.Common().ReadExcelTypeDict('cezxhi .xlsx') # 拿到具体的Excel表数据
@ddt.ddt #导入ddt模块
class TestLogin(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None: # setupclass类方法 全部用例开始前执行一次
cls.logs = common.Common().get_logs() # 导入日志方法
cls.logs.debug('开始写入接口自动化测试用例')
@classmethod
def tearDownClass(cls) -> None:
cls.logs.debug('自动化接口用例结束') def setUp(self) -> None:
self.logs.debug('开始本条接口用例') def tearDown(self) -> None:
self.logs.debug('结束本条用例') @ddt.data(*r) # 引入ddt模块,读取拿到的数据
def test_logins(self,pars): # 用例方法名开头必须已test pars参数为接收的表数据值
import json #导入json模块
dic = json.loads(pars['body参数值']) # 将Excel数据中的参数值转变为json格式
url = pars['接口地址'] # 拿到请求url
yuqi = pars['预期结果'] # 拿到预期结果
fs = pars['请求方式'] # 拿到请求方式
result = Base().requests_type(method = fs,url = url,data = dic) # 填充base页的请求api
self.assertEqual(result.text,yuqi) # 进行断言 看用例是否通过
<4> 执行用例后生成测试报告:
if __name__ == '__main__':
load = unittest.TestLoader().loadTestsFromTestCase(TestLogin) #使用loader加载方式 来找寻所有已test开头的用例
suite = unittest.TestSuite([load,]) common.Common().GetHtmlResult(suite,'登录测试用例')
如果对软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以加软件测试交流:1085991341,还会有同行一起技术交流。
<5> copy当前要执行的脚本路径,添加到运行方式为python里




最后我们run一下

控制台是这样的

为什么会有400呢?因为有一些接口是异常的,比如url错误的,少传入参数、空参,所以会出错,常理之中
<6> 看下生成的测试报告
在pycharm中是这样的

然后我们copy下他的路径到浏览器中查看


根据我追踪的信息,第一条失败是因为sessionId是可以变的,每一次的值都是不一样,在这里也希望大家能够找到BUG,并妥善处理好每一个问题。
以上内容希望对你有帮助,有被帮助到的朋友欢迎点赞,评论。
python+requests+unittest执行自动化接口测试的更多相关文章
- python之unittest框架实现接口测试实例
python之unittest框架实现接口测试实例 接口测试的方法有很多种,具体到工具有postman,jmeter,fiddler等,但是工具的局限性是测试数据的组织较差,接口的返回工具的判断有限, ...
- python+requests实现接口自动化
1. 前言 今年2月调去支持项目接口测试,测试过程中使用过postman.jmeter工具,基本能满足使用,但是部分情况下使用较为麻烦.比如:部分字段存在唯一性校验或字段间有业务性校验,每次请求均需手 ...
- python+requests+unittest 接口ddt测试
以数据驱动的形式,将用例维护在py文件中 源码分析: 变量定义 publicParameters.py """ 公共参数 , 按照各公司实情,自行编写 "&qu ...
- python+requests+unittest API接口测试
黑熊再网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,见用例维护在文本或表格中,而没有说明怎么样去生成想要的用例, 问题: 测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空, ...
- 使用python+requests+unittest实现接口自动化测试
这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下. 一.整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用. Common:公共方法:主要放 ...
- 自动化测试===requests+unittest+postman的接口测试
postman是一个跨平台的接口测试工具,下载链接在这里:https://www.getpostman.com/ unittest是一个单元测试框架,python中安装:pip install uni ...
- 基于Python+requests搭建的自动化框架-实现流程化的接口串联
框架产生目的:公司走的是敏捷开发模式,编写这种框架是为了能够满足当前这种发展模式,用于前后端联调之前(后端开发完接口,前端还没有将业务处理完毕的时候)以及日后回归阶段,方便为自己腾出学(mo)习(yu ...
- Python+requests+unittest+excel实现接口自动化测试框架
一.框架结构: 工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) import requests import json class ...
- Python+requests+unittest+excel实现接口自动化测试框架(摘录)
一.框架结构: 工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests 2 import json 3 ...
随机推荐
- PHP boolval() 函数
boolval 函数用于获取变量的布尔值.高佣联盟 www.cgewang.com 版本要求:PHP 5 >= 5.5.0, PHP 7. 语法 boolean boolval ( mixed ...
- 强烈推荐的 IntelliJ IDEA 插件,别说我没告诉你
为什么你的 Intellij IDEA 没别人的好用?还不是因为你缺少这几个插件啊! 善用 Intellij IDEA 插件可以提高我们的开发效率,今天和大家一起分享一下实际工作中常用的几款能提升幸福 ...
- Jdbc Template初步了解
JdbcTemplate简介 Java语言提供了jdbc来访问数据库,在jdbc api中需要手动的获取和释放连接等资源,使用起来需要做许多重复的工作.Spring在jdbc api的基础上做了抽象和 ...
- Elasticsearch第二篇:基本概念和基础操作
上一篇文章,我们已经是在Windows10 上搭建了 Elasticsearch 环境已经安装了相关的插件,现在我们就可以像操作webapi一样简单的操作 ElasticSearch 了,有园友说可以 ...
- 并发编程——IO模型详解
我是一个Python技术小白,对于我而言,多任务处理一般就借助于多进程以及多线程的方式,在多任务处理中如果涉及到IO操作,则会接触到同步.异步.阻塞.非阻塞等相关概念,当然也是并发编程的基础. ...
- springboot多环境部署(profile多环境支持)
springboot多环境部署(profile多环境支持) 背景 项目开发过程中会有开发环境(dev),测试环境(test)和生产环境(prod),不同的环境需要配置不同的配置,profile提供 ...
- 2020-06-02:千万级数据量的list找一个数据。
福哥答案2020-06-02: 对于千万级长度的数组单值查找:序号小的,单线程占明显优势:序号大的,多线程占明显优势.单线程时间不稳定,多线程时间稳定. go语言测试代码如下: package mai ...
- C#LeetCode刷题之#234-回文链表(Palindrome Linked List)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3905 访问. 请判断一个链表是否为回文链表. 输入: 1-> ...
- 从系统报表页面导出20w条数据到本地只用了4秒,我是如何做到的
背景 最近有个学弟找到我,跟我描述了以下场景: 他们公司内部管理系统上有很多报表,报表数据都有分页显示,浏览的时候速度还可以.但是每个报表在导出时间窗口稍微大一点的数据时,就异常缓慢,有时候多人一起导 ...
- 使用Python Openssl库解析X509证书信息
X.509 证书结构描述 常见的X.509证书格式包括: 后缀 作用 cer/crt 用于存放证书,它是2进制形式存放的,不含私钥 pem 以Ascii来表示,可以用于存放证书或私钥. pfx/p12 ...