python+untitest+request实现接口自动化测试
python+untitest+request实现接口自动化测试
- python+untitest+request实现接口自动化测试
- 目录结构
- 实现步骤描述
- post接口
- get接口
- 接口间token调用
- 下载
- 上传
- HTMLTestRunner
- run
python+untitest+request实现接口自动化测试
目录结构
- report
- test_case
- run_test_case.py
实现步骤描述
- 在test_case中,使用untitest把每个接口写成测试脚本,每个接口写一个测试脚本,但是包含多个测试用例(用例名称以test开头)
- 使用discover()方法,自动匹配查找测试用例,将所有测试用例组装到测试套件中,然后通过run执行discover
- 使用HTMLTestRunner生成测试报告
post接口
#coding:utf-8
import urllibimport requests
import json
import unittest
from login import get_loginclass post_request(unittest.TestCase):u'''01:正常登录 02:密码错误 03:登录账号密码错误'''def setUp(self):self.post_url = ''self.header = {"Accept": "Accept - Encoding": "Content-Type": "Cookie": }def test_post_01(self):u'''注释不显示'''# u'''登录测试-正向,账号:wangm/密码:1234567'''url = self.post_urlheader = self.header#data = {"userName": "wangm", "passWord":"1234567"}data = {"username" : "wangm","password" : 1234567,"token":get_login()}#将data序列化为json格式数据,传递给data参数r = requests.post(url,data=data , headers = header)print(r.status_code)print(r.text)#result = r.json()['code']#获取状态码#print(result)#断言#self.assertEqual(200,result)self.assertIn('message',r.text)#self.assertTrue('success' in r.text)def test_post_02(self):u'''登陆测试-密码错误,账号:wangm/密码L23'''url = self.post_urlheader = self.headerdata = {"username": "wangm","password": 123,"token":get_login()}r = requests.post(url,data=data, headers = header)print(r.status_code)print(r.text)def test_post_03(self):u'''登陆测试-密码错误,账号:wangm/密码L23'''url = self.post_urlheader = self.headerdata = {"username": "wang","password": 123,"token":get_login()}r = requests.post(url,data=data, headers = header)print(r.status_code)print(r.text)def tearDown(self):passif __name__ =='__main__':unittest.main()#data=json.dumps(data)
get接口
#coding:utf-8
import requests
import unittest
from login import get_loginclass get_request(unittest.TestCase):def setUp(self):self.get_url = " "self.header = {"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8","x-token": get_login()}def test_get_01(self):u'''描述'''url = self.get_urlheader = self.headerdata ={"page":1,"size":12,"keyword":"","token":get_login()}r = requests.get(url,data=data,headers=header)print( r.text)def tearDown(self):passif __name__ == '__main__':unittest.main()
接口间token调用
import requests
import jsondef get_login():url = ""data = {"username" :"wangm","password" :"1234567"}headers = {"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"}res = requests.post(url=url,data=data,headers=headers)return (res.json()["data"]["token"])token = str(get_login())
#print(token,"确认token成功返回")
print(token)#从响应结果中获取token值
下载
#coding:utf-8
#只要fidder开着,涉及SSL安全验证问题,运行失败,关闭fidder后,运行成功
import requests
import unittest
from login import get_loginclass get_request(unittest.TestCase):def setUp(self):self.get_url = ''self.header = {"Cookie":"Accept":"Connection":"Accept-Language":"token":get_login()}def test_get_01(self):url = self.get_urlheader = self.header#data = {#}r = requests.get(url=url,headers=header)#print(r.text)#open打开excel文件,保存为后缀为xls的文件fp = open("vehicleModel.xlsx","wb") #"w":写入 "b":二进制fp.write(r.content)fp.close()#print()def tearDown(self):passif __name__ == '__main__':unittest.main()
上传
#coding:utf-8
import requests
import unittest
from login import get_loginclass post_request(unittest.TestCase):def setUp(self):self.url = ''self.header = {#"Cookie": "x - token": "Content - Type": }def test_post_01(self):url = self.urlheaders = self.headerdata = {"Content - Disposition": "form - data","name": "file","filename": "vehicleModel.xlsx","Content - Type": "application / vnd.openxmlformats - officedocument.spreadsheetml.sheet","token": get_login(),}files = {"file": ("vehicleModel.xlsx", open("C:\\Users\\Kst\\Desktop\\vehicleModel.xlsx", "rb"), "text/plain", {}),#cookies=get_login()}r = requests.post(url=url,headers=headers,data=data,files=files)print(r.status_code)print(r.text)def tearDown(self):passif __name__ == '__main__':unittest.main()
HTMLTestRunner
将HTMLTestRunner.py文件放入Lib下,不同的HTMLTestRunner会产生不同样式的测试报告
run
# coding=utf-8
#https://www.jb51.net/article/151626.htm
#不发送邮件
import unittest
import HTMLTestRunner
import time
# 相对路径
test_dir ='./test_case'
test_dir1 ='./report'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
# 定义带有当前测试时间的报告,防止前一次报告被覆盖
now = time.strftime("%Y-%m-%d %H_%M_%S")
filename = test_dir1 + '/' + now + 'result.html'
# 二进制打开,准备写入文件fp = open(filename, 'wb')
# 定义测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'接口自动化测试报告', description=u'环境:Windows 10 浏览器:chrome 执行人:汪敏 用例执行情况')
runner.run(discover)#discover加载测试用例
python+untitest+request实现接口自动化测试相关推荐
- 基于python+unittest简单实现接口自动化测试实战教程
目录 1.前言 为什么要做接口自动化测试? 为什么要自己写框架呢? 2.一个现有的简单接口例子 接口信息如下 3.测试思路 原始脚本实现 未优化 优化 第一版 优化 第二版 优化 第三版 最终输出日志 ...
- [python自动化]简单实现接口自动化测试(基于python+unittest)
简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自 ...
- python+requests+unittest+excel_接口自动化测试 unittest+request+excel(踩‘坑’)
通过运行主函数,返回的参数,报json解析错误 正常的返回参数,应该如图 造成这个原因的是: python从excel中解析出来的数据类型不是字典,是字符串,所以无法传递给requests当做请求参数 ...
- python+robotframework_python+robot framework接口自动化测试
转载:http://www.cnblogs.com/nzg-noway/p/6651957.html python+requests实现接口的请求前篇已经介绍,还有不懂或者疑问的可以访问 目前我们需要 ...
- 一整套的软件测试学习视频、包括web自动化、APP自动化、接口自动化,以及python语言,基础知识讲解和项目实践,学习后可收获python、web/APP/接口自动化测试。
买的自动化测试学习视频,学完后对自动化测试能力提升了不少,觉得老师讲的很不错,分享给有需要学习的人学习 一.web自动化 百度网盘链接:https://pan.baidu.com/s/1e2fctYu ...
- Python 实现 dubbo 协议接口自动化测试
前言 python 语言也可以实现对 dubbo协议的接口进行调用与测试,可以使用 python+hessian 结合的方式,也可以使用 python+telnet 结合的方式模拟命令行的模式来实现对 ...
- python web api 自动化测试_基于Python + requests 的web接口自动化测试框架
之前采用JMeter进行接口测试,每次给带新人进行培训比较麻烦,干脆用python实现,将代码和用例分离,易于维护. 项目背景 公司的软件采用B/S架构,进行数据存储.分析.管理 工具选择 pytho ...
- python接口测试demo_python http接口自动化测试简单demo
import xlrd from xlutils.copy import copy import requests import json import xlwt # 结果比较 def compare ...
- python接口测试_Python接口自动化测试(一)
本节开始,开始介绍python的接口自动化测试,首先需要搭建python开发环境,到https://www.python.org/下载python版本直接安装就以了,建议下载python2.7.11版 ...
最新文章
- 如何在Evolution中加密(六)
- Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
- mysql 36条军规_mysql开发36条军规(转)
- 英语口语 week14 Friday
- 相册权限_手机相册太乱?1分钟教你快速管理自己的照片,非常好用!
- C#:设置CefSharp的一些参数,比如忽略安全证书
- mysql删除重复记录只保留一条
- (HDU)1089 --A+B for Input-Output Practice (I)(输入输出练习(I))
- python程序设计基础与应用 机械工业出版社_Python程序设计——从编程基础到专业应用...
- Unity插件——Odin 学习笔记(三)
- 面试公司Offer——我的Python求职之路
- Cesium火灾动画(模型动画,粒子特效)
- MacBook怎样装Win10 双系统玩转Win10
- Android.mk编译java动态库
- 【Matlab】用程序制作简单音乐
- 码农微信公众账号推荐
- 2022.12.3 英语背诵
- 整合nacos配置中心启动报c.a.c.n.c.NacosPropertySourceBuilder: 101 - get data from Nacos error,dataId:xxx.yml
- 先验算法(Apriori Algorithm)原理及python代码实现
- 巴塔机器人_《超级机器人大战V》全SR流程攻略
热门文章
- Android 仿淘宝京东商品详情页阻力翻页效果
- SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用
- 安装 Hana Studio
- 测试人生 | 低学历无未来?从小公司到拿下年薪45W+ ,这个90后小哥哥好励志~
- 云服务器打不开,为什么打不开云服务器失败怎么回事
- 四个小方块组成一个方块的标志_四个“口”字组成一个方块的是什么牌子的标志?...
- duilib创建自定义控件
- 道一时间转换工具发布
- Understanding the Bias-Variance Tradeoff(深入理解偏差和方差)
- 一个企业有没有未来,无非取决于这八点