python接口测试之新手篇
嗨,大家好,我是小白,好久没写博客了,最近公司搞什么python的接口测试,心里一阵狂喜,在公司上百个接口里拿出一个主要接口一顿乱搞,好在搞通了
但是在这过程中也碰到了好多的问题,决定将问题分享出来能够对你们提供一丝丝的帮助!
工具:pycharm+requests+python3+fiddler
我暂时将我使用的接口称为A接口
第一步:
首先我们手工发起一笔成功的A接口,
返回的json字符串:{"requestId":"20190220095236495","result":"00000","signature":"******","sum":"0.03"}
从字符串中的result我们知道返回成功了,signature为对返回结果进行了签名,使用到的是MD5签名
第二步:
查看fiddler,在Inspectors-Raw下边提炼出我们想要的一些信息
从图中我们知道这个请求为POST请求,content-Type:application/x-www-form-urlencoded,encoding:GBK 保存这些信息
第三步:
打开pycharm,在里边通过字典设置A接口的各个参数,由于输入参数signature是对所有参数进行MD5签名,所以我们设置为空值,
对字典的value值进行for循环拼接,并调用MD5签名方法进行签名,方法如下:
然后我们再将返回的enc_res回传到字典的键signature所对应的值
1) 设置A接口发起请求的url
2) 设置字典headers(直接从fiddler抓包的raw数据里copy过来),如下:
3) 从抓包我们知道content-Type:application/x-www-form-urlencoded,所以发起post请求的参数为data而不是json
requests.post(url=url,data=payload,headers=headers)
通过返回结果的status为200我们知道请求成功了,但是返回的result是一个错误码,通过日志我们找到了原因如下:
可以看出accountName参数传到后台为乱码,因为pycharm里边传过去的中文,编码都是UTF-8的,而后台编码从抓包我们可以看到是GBK的形式,
所以我们需要改变一下这个参数编码格式如图:
因为A接口输入参数有一个MD5的签名参数,所以中文参数的这段编码要放在输入参数签名之后,然后回传进行覆盖,进行post请求
再试一遍,我们发现返回结果成功了,并且我们对返回的参数再次进行调用MD5签名校验
没有看懂的小伙伴可以留言,我们可以一起交流讨论,哈哈,我是小白,欢迎阅读!
源码分享一下,写的没什么层次,还请多多批评:
# -*- coding:utf-8 -*-#autor :xiaobaiimport requestsfrom requests.cookies import RequestsCookieJarimport jsonimport hmacimport hashlibimport timeimport random####################设置Key值############## def hashstring(to_enc,ekey): enc_res = hmac.new(ekey.encode(), to_enc.encode(), hashlib.md5).hexdigest() # print(enc_res) return enc_res if __name__=='__main__': print("开始进行**测试: ") url='http://**********' #设置随机值作为入参id id = [] id = ''.join(str(i) for i in random.sample(range(0, 9), 2)) # sample(seq, n) 从序列seq中选择n个随机且独立的元素; CurrentTime = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) requestid=CurrentTime+id #请求参数 payload={'requestId':'', 'merchantCode':'', 'transferType':'', 'transToMerCode':'', 'transToMerName':'', 'unionBankNum':'', 'openBankName':'', 'openBankProvince':'', 'openBankCity':'', 'sum':'0.03', 'accountType':'1', 'accountName':'***', 'bankCode':'***', 'bankAccount':'*******', 'reason':'1555', 'noticeUrl':'**********', 'refundNoticeUrl':'*************', 'transferPayType':'*', 'signature':'' } payload['requestId']=requestid #初始化字符串并进行加密拼接 to_enc='' ekey='CSSH_KEY' for i in payload: to_enc=to_enc+payload[i] # print(to_enc) payload['signature'] = hashstring(to_enc, ekey) '''将中文进行GBK转化''' str='***' #这个字符串与字典里accountName对应value一致
strGBK=str.encode('GBK') '''转化完的中文回传到字典中''' payload['accountName']=strGBK headers={ 'Connection':'keep-alive', 'Content-Length':'543', 'Cache-Control':'max-age=0', 'Origin':'http://**********', 'Upgrade-Insecure-Requests':'1', 'Content-Type':'application/x-www-form-urlencoded', 'User-Agent':'**************************************************', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Referer':'******************', 'Accept-Encoding':'gzip, deflate, br', 'Accept-Language':'zh-CN,zh;q=0.9', } s=requests.post(url=url,data=payload,headers=headers) print(s.text) print("status:",s.status_code) print("****************************************************") print("开始进行返回结果验证签名: ") '''返回结果进行验签''' ResultDict=s.json() synchronizationStr=ResultDict['requestId'] + ResultDict['result'] + ResultDict['sum'] signature11=hashstring(synchronizationStr, ekey) try: if(ResultDict['result']=='00000' and signature11==ResultDict['signature']): print(" 恭喜你,同步返回验签成功") else: print(" result错误码:", ResultDict['result']) except BaseException as msg: print(msg) finally: print(" **处理完毕") print("****************************************************")
转载于:https://www.cnblogs.com/unnameable/p/10405565.html
python接口测试之新手篇相关推荐
- Python 接口测试之处理转义字符的参数和编码问题
目录 引言 处理入参有转义字符的接口 编码处理 接口请求方式 提取报文中参数 附录 引言 笔者,在非常繁忙的工作之余,决定抽时间记录一下在测试接口时所遇到的问题,以便日后参考,也可以提供给那些正在学习 ...
- Python接口测试之requests
1.简介 requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时 经常会用到,Requests是Python语言的第三方的库,专门用于发送HTTP请求 2.前提 ...
- Python接口测试之moco
在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证 在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况 ...
- 〖Python接口自动化测试实战篇⑩〗- 测试框架 unittest 的小实战案例
说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量4300+,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:除了通过订阅"白宝书系列专栏"加入社区获取 ...
- python接口测试之路get、post、json请求处理
基于http协议,最常用的是GET和POST两种方法. 接口文档需要包含哪些信息: 接口名称 接口功能 接口地址 支持格式 json/xml 请求方式 请求示例 请求参数(是否必填.数据类型.传递参数 ...
- python接口测试之requests详解_Python接口测试-requests库
一.requests库 Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量 ...
- 接口测试之基础篇--http协议
概念:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种 ...
- 〖Python接口自动化测试实战篇②〗- 摒弃 ‘捉虫师’ 称号 - 你需要重新认识软件测试
万叶集
- 〖Python接口自动化测试实战篇①〗- 自动化测试基础扫盲及项目的生命周期详述
万叶集
最新文章
- mybatis可以用oracle,使用MyBatis调用oracle函数(基于注释)
- php高级技术考试题,PHP高级技术考试题.doc
- linux grep命令总结
- java遍历两个日期_java 已知两个日期,遍历出两个日期之间所有的日期,重点是::包括第一个日期!!...
- 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接
- 刚接触git,提交文件时,遇到no changes added to commit
- apache正向代理配置
- 玩 vmx ( by vision.ai ) 的过程记录
- thinkphp上传
- 10.企业安全建设指南(金融行业安全架构与技术实践) --- 安全预算、总结与汇报
- 成功解决:Could not initialize SDL - No available video device (Did you set the DISPLAY variable?)
- 组态软件(Configure)
- Ffmpeg常用转码命令
- 自学FPGA第一期:初学FPGA
- android苹果模拟器哪个好,mac安卓模拟器哪个好用?为你推荐网易mumu模拟器
- VUE微信开放平台实现网站微信登陆
- element-ul基本使用
- WOLFLAB CCNP交换-园区网安全PVLAN配置过程
- jdk配置环境变量(win10)
- 1.3.3 什么是好莱坞法则
热门文章
- (二)GKE上MLOps的Jenkins作业和部署
- 将$type添加到System.Text.Json序列化中,就像Newtonsoft那样用于动态对象属性
- Abp vnext Web应用程序开发教程 9 —— 作者:用户界面
- Kong 1.0 GA 版本正式发布,微服务 API 网关
- 决策树缺失值python_【机器学习笔记之二】决策树的python实现
- ionic滚动条返回顶部
- linux sed保存,linux sed
- 错误率_全新的支付方式来了 错误率可控制在百万分之一
- c++中判断某个值在字典的value中_Python元组、字典、集合的简单介绍
- vb6.0 生成exe被简称是木马_使用MSF渗透框架生成PHP木马并实现控制远程服务器