Python3+requests+unittest接口自动化测试实战
off999 2025-05-21 15:45 48 浏览 0 评论
一、Requests介绍
Requests is an elegant and simple HTTP library for Python, built for human beings.翻译过来就是:Requests 是为人类写的一个优雅而简单的 Python HTTP 库。这个介绍很直白了,让我们先来感受一下 Requests 的威力。
import requests
# 发送请求
response = requests.get(url="http://www.baidu.com/s", params={'wd':'python'})
# 处理响应
print(response.status_code)
#返回
200这个请求如果用 urllib 来实现,代码如下:
import urllib.parse
import urllib.request
url = "http://www.baidu.com/s"
params = urllib.parse.urlencode({'wd':'python'})
# 发送请求
response = urllib.request.urlopen('?'.join([url, params]))
# 处理响应
print(response.getcode())
#返回
200从感官上就能看出来,使用 urllib 在 URL 、参数等方面会复杂一些。这只是冰山一角,实际使用中 Requests 还有好多方面超越 urllib ,它并不是浪得虚名,接下来的学习中你就会感受到。
二、unittest介绍
说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是unittest。 的确,作为 Python 的标准库,它很优秀,并被广泛用于各个项目。但你知道吗?其实在 Python 众多项目中,主流的单元测试框架远不止这一个。
本系列文章将为大家介绍目前流行的 Python 的单元测试框架,讲讲它们的功能和特点并比较其异同,以让大家在面对不同场景、不同需求的时候,能够权衡利弊,选择最佳的单元测试框架。
三、Python3+requests+unittest
首先,我们可以捋一捋思路,想一想接口测试的流程
其次,选择合适的框架
流程清晰之后,我们需要选择一个合适的框架,于是选择了Python3+requests+unittest框架
Requests模块发送http的网络请求,请求类型主要包含了post,get, PUT,DELETE,HEAD
python+unittest单元测试框架构成,和测试报告生成(HTMLTestRunner)
框架详解不在此赘述
基于以上,我们来一步步搭建我们的框架。在这个过程中,我们需要做到业务和数据的分离,这样才能灵活,达到我们写框架的目的。接下来,我们来进行结构的划分。
我们的结构是这样的
data:存放自动化测试所用到的数据文档
log:存放生成的日志文件
base:存放公共的方法
report:存放生成的自动化测试报告
testcase:存放测试脚本
接下来,公共方法的开发
整体结构有了划分,接下来就该一步步的填充整个框架了,我们先来看看Base文件中的公共类或函数,这主要用于后续测试case的调用,所有公共的、一成不变的数据都可以放在这里,维护也方便
配置文档如下
[DATABASE]
data_address = ./data/
report_address = ./report/
[HTTP]
base_url = http://xxx.xx
想知道怎样从配置文档中得到或写入相应的数据吗?那继续看吧
import os
import configparser
# 获取当前py文件地址
proDir = os.path.split(os.path.realpath(__file__))[0]
# 组合config文件地址
configPath = os.path.join(proDir,"config.ini")
class ReadConfig:
def __init__(self):
#获取当前路径下的配置文件
self.cf = configparser.ConfigParser()
self.cf.read(configPath)
def get_config(self,field,key):
#获取配置文件中的key值
result = self.cf.get(field,key)
return result
def set_config(self,field,key,value):
#向配置文件中写入配置信息
fb = open(configPath,'w')
self.cf.set(field,key,value)
self.cf.write(fb)
那问题又来了,我们的测试数据放在哪里?怎么取值?怎么写入?怎么保存?。。。
别急,接着往下看
测试数据优先考虑放在excel或database中,此处以excel为例做个简单介绍
这里需要用到两个操作表格的库,xlrd数据驱动的读取,作用于excel文档,但xlrd不能写入数据,所以引入xlutils数据驱动的读取和写入
安装方法可以用pip3 install xlrd和pip3 install xlutils 来安装。
import xlrd
import xlutils.copy
from Base.readConfig import ReadConfig
import time
class ReadExcel:
def __init__(self,section,field,sheet):
# 打开工作表,并定位到sheet
data_address = ReadConfig().get_config(section,field)
workbook = xlrd.open_workbook(data_address)
self.table = workbook.sheets()[sheet]
def get_rows(self):
# 获取excel行数
rows = self.table.nrows
return rows
def get_cell(self,row,col):
# 获取单元格数据
cell_data = self.table.cell(row,col).value
return cell_data
def get_col(self,col):
# 获取整列数据
col_data = self.table.col_value(col)
return col_data
class WriteExcel:
def __init__(self,section,field,sheet):
# 打开工作表
self.address = ReadConfig().get_config(section,field)
self.workbook = xlrd.open_workbook(self.address)
self.wf = xlutils.copy.copy(self.workbook)
self.ws = self.wf.get_sheet(sheet)
def set_cell(self,row,col,value):
#设置单元格数据
self.ws.write(row,col,value)
def save_excel(self,filename,format):
#获取当前时间
self.time = time.strftime("%Y%m%d%H%M%S", time.localtime())
#生成文件的文件名及格式
self.report = filename + '_' +self.time + format
#保存文件
self.wf.save(self.report)然后,测试脚本的编辑
一切准备就绪,下面通过一个简单的、完整的代码进行演示公共函数的调用,框架的使用及报告的生成
import unittest
import requests
from Base.readConfig import ReadConfig
from Base.readExcel import ReadExcel
from Base.readExcel import WriteExcel
#实例化
readexcel = ReadExcel('DATABASE','data_address',0)
writeexcel = WriteExcel('DATABASE','data_address',0)
class testcase(unittest.TestCase):
#初始化
def setUp(self):
#获取url
self.base_url = ReadConfig().get_config('HTTP', 'base_url')
self.url = self.base_url + readexcel.get_cell(1,1)
#获取请求头
self.headers = readexcel.get_cell(1,4)
def test_case(self):
nok = 0
ner = 0
# 循环读取excel中的测试数据,进行结果验证,并生成excel形式的测试报告
for i in range(3,readexcel.get_rows()):
#发送网络请求,得到响应值
response = requests.post(self.url, headers=self.headers, data=readexcel.get_cell(i,4).encode('utf-8'))
actualresult = response.json()
#获取excel中的预期结果
expectresult = eval(readexcel.get_cell(i,6))
# 获取需验证的数据
key = eval(readexcel.get_cell(i, 5))
keylen = len(key)
j = 0
for k in range(keylen):
aresult = 'actualresult' + key[k]
eresult = 'expectresult' + key[k]
if eval(aresult) == eval(eresult):
#预期结果和实际结果一致
j = j + 1
if j == keylen:
#测试数据执行通过
nok = nok + 1
writeexcel.set_cell(i, 8, 'SUCCESS')
else:
# 测试数据执行失败,并将实际结果写入excel
ner = ner + 1
writeexcel.set_cell(i, 8, 'FAILURE')
writeexcel.set_cell(i, 7, str(actualresult))
print('第', i + 1, '行用例执行失败:预期结果是', expectresult, '实际结果是', actualresult)
# 保存测试报告
writeexcel.save_excel('testreport', '.xls')
print('测试数据中总共', nok, '条用例执行通过', ner, '条用例执行失败')
#释放资源
def tearDown(self):
pass
if __name__ == '__main__':
#构造测试集合
suite = unittest.TestSuite()
suite.addTest(testcase('test_case'))
#创建html文件
filename = ReadConfig().get_config('DATABASE', 'report_address') + 'testreport.html'
fb = open(filename,"wb")
#执行测试并生成html测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream = fb,description = '针对接口的描述信息',title = '某某的自动化测试报告')
runner.run(suite)
#关闭文件
fb.close()
最后,生成的html报告
最后:【可能给你带来帮助的教程】
这一些资料,对做【软件测试】的朋友而言应该是较为完整了,这类学习资料也陪伴我走过了最艰难的路程,希望也可以帮助到你!万事要尽早,尤其是技术行业,一定要提升技术功底。
- 上一篇:全网最全pytest大型攻略,单元测试学这就够了
- 下一篇:pytest单元测试框架
相关推荐
- 连wifi神器哪个最好(连wifi软件哪个好用)
-
水星的更好。如果需要支持最新无线协议WIFI6的路由,可以选择水星X18G,全千兆网口,双频并发,无线速率1800M,有端口盲插功能,对小白很友好;采用最新的MU-MIMO技术,在多用户环境下,每个...
- boot manager是什么意思(boot,manager)
-
1.长按电脑开机键,强制性关机;2.按开机键打开电脑,当看到电脑主板LOGO的时候按对应的Bios启动快捷键(每个主板不大一样请自行查询进入BIOS的快捷键)进入BIOS;3.找到启动(Boot)菜单...
-
- hp laserjet1020打印机驱动(hp laserjet1020手机驱动)
-
1、用USB线缆连接惠普LaserJet1020打印机和个人计算机。线缆两端的接头一扁一方,扁的一头连个人计算机,方的一头连打印机。小提示:打印机的电源开关位于背面,先不用打开。 2、将随打印机附带的驱动光盘放入个人计算机的...
-
2025-12-11 13:51 off999
- win10最早版本是哪个(win10早期版本)
-
一般WINDOWS10是家庭版或专业版。因为WINDOWS10作为微软公司的新一代操作系统,具有不同版本,家庭版和专业版是最为常见的版本,两者在功能和适用场景上有所不同。家庭版适用于家庭用户和学生...
- 360网页版(网页版360浏览器网址)
-
1、首先打开电脑浏览器。2、然后在浏览器上搜索搜索360网盘。3、然后就可以看到网页版登录入口。4、最后点击进去就可以输入账号密码,登录360云盘了。5、登录成功后,就进入到云盘主界面中。就可以进行文...
- 电脑最新系统下载(电脑安装最新系统版本)
-
系统文件格式有exFAT、NTFS、FAT等,不同的磁盘格式有不同的特性。1:exFAT、NTFS、FAT分区的比较exFAT优势明显1.支持非常大的文件和存储设备.2.对性能的改进支持。3.对未来的...
- 一键系统重装哪个好用(一键系统重装那个好)
-
1.黑鲨装机大师。运行很稳定经过多人多次测试非常的稳定不会出错,也经过了多用户验证使用很不错。界面清晰操作简便,对于新手来说可能都不会安装但是这款软件简单易懂极好上手。2.一键还原精灵装机版。安装简单...
- 雨林木风官网 gho系统(雨林木风系统官网网址)
-
雨林木风系统官网是一家软件公司的官方网站,提供了该公司产品的下载、购买、使用教程、技术支持等服务。这个网站主要面向那些需要使用雨林木风系统的用户,可以通过官网了解和下载该公司的软件产品,以满足用户在工...
- 分区助手给c盘扩容靠谱吗(分区助手 c盘扩容)
-
应该是盘符没有了,请重新设置一下盘符就可以了,不用使用恢复软件。直接用微软的磁盘管理工具就可以了,前提是你磁盘上有未分配的空间。如果没有可以用AcronisDiskDirectorSuite,这...
- 2025手机cpu性能排行榜(手机芯片天梯图2025)
-
骁龙870处理器华为Mate40Pro(麒麟9000)为例,麒麟9000芯片CPU采用1+3+4设计,一个大核为3.13GHz的A77、3个中核为2.54GHz的A77、4个2.05GHz的A55,...
- 电脑系统还原怎么关闭(电脑系统还原怎么关闭程序)
-
要关闭电脑系统还原功能,您可以按照以下步骤进行操作(适用于Windows系统):1.打开“控制面板”。您可以通过在Windows搜索栏中输入“控制面板”并点击打开,或者在开始菜单中找到“控制面板”并...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
使用 python-fire 快速构建 CLI_如何搭建python项目架构
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
