嗨,大家好,我是小白,好久没写博客了,最近公司搞什么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 :xiaobai
import requests
from requests.cookies import RequestsCookieJar
import json
import hmac
import hashlib
import time
import 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("****************************************************")

python接口测试之新手篇的更多相关文章

  1. python接口测试之mock(二)

    上一篇对mock-server已经做了初步的介绍,今天这里继续接着之前的介绍进行,我们先看之前的mock-server部分,之前编写了一个登录的mock,具体json文件见如下的内容: 小王子1110 ...

  2. API Test Postman接口测试之高级篇2

    API Test  Postman接口测试之高级篇2 一.继承父类的设置: 二.导出及导入: 三.分享文档: 四.发布接口文档: 五.常用脚本: 右边框选的是一些常用的脚本,postman提供的,可以 ...

  3. API Test Postman接口测试之高级篇1

    API Test  Postman接口测试之高级篇1 一.postman中的请求参数简介: 1.请求参数简介: 点击params下面会出现key,value等信息,这里填写的会自动追加在url地址后面 ...

  4. Python接口测试之moco

    在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证 在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况 ...

  5. python接口测试之日志功能

    之前在简书中看了一篇关于日志功能的文档,供大家参考:https://www.jianshu.com/p/62f7b49b41e7 Python通过logging模块提供日志功能,所以直接导入即可 im ...

  6. Python接口测试之对MySQL/unittest框架/Requests 的操作

    单元测试支持测试自动化. 共享的安装程序和关闭代码测试. 聚合成集合,测试和报告框架从测试的独立性.单元测试模块提供可以很容易地支持这些素质的一组测试的类.关于unittest 测试框架建议可以到官方 ...

  7. 接口测试之基础篇--http协议

     概念:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种 ...

  8. Python接口测试之报告(十五)

    在本文章中,主要使用jenkins和编写的自动化测试代码,来生成漂亮的测试报告,关于什么是CI这些 我就不详细的介绍了,这里我们主要是实战为主. 首先搭建java的环境,这个这里不做介绍.搭建好jav ...

  9. Python接口测试之对MySQL的操作(六)

    本文章主要来说python对mysql数据库的基本操作,当然,前提是已经搭建了python环境和搭建了Mysql 数据库的环境,python操作mysql数据库提供了MySQLdb库,下载的地址为: ...

随机推荐

  1. typescript - 2.数据类型

    typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验,在typescript中主要给我们提供了以下数据类型 布尔类型(boolean) 数字类型(number) 字符串类型(st ...

  2. 001-脚手架发展,基础代码结构+mybatis代码生成

    一.概述 脚手架是为了保证各施工过程顺利进行而搭设的工作平台. 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具. java变成中,架构师搭建的代码结构你到处拷 ...

  3. Mac删除自带的abc输入法

    1. 安装软件:https://pan.baidu.com/s/15oIzTDojpignoR5MiZ-Q1A 安装并注册 2. 进入到目录,并打开: 1. /Users/toov5/Library/ ...

  4. 泡泡一分钟:Learning Motion Planning Policies in Uncertain Environments through Repeated Task Executions

    张宁  Learning Motion Planning Policies in Uncertain Environments through Repeated Task Executions 通过重 ...

  5. git用法汇总

    使用了一年多的git命令了,昨晚竟然又出现了问题.虽然解决了,不过还是被罚了... 总结下自己常用的git命令和遇到的一些坑. 1)常用的命令 1. 从git远程分支clone代码: git clon ...

  6. vue-cli3 中console.log报错

    Module Warning (from ./node_modules/eslint-loader/index.js):error: Unexpected console statement (no- ...

  7. 在MAX10上使用DDR3 IP的一个关于DQS/DQSn pin的错误解决办法

    MAX10 是Intel FPGA的CPLD中的一个特殊的芯片,因为它内部有CPLD的Flash结构,也有FPGA的Ram结构.具体的可以参考MAX10 Handbook文档. Max10 在外部存储 ...

  8. A+B 和 C

    给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行,顺序给出  ...

  9. 什么是渐进式Web App(PWA)?为什么值得关注?

    转载自:https://blog.csdn.net/mogoweb/article/details/79029651 在开始PWA这个话题之前,我们先来看看Internet现状. 截至2017年1月, ...

  10. Java基础之(四)HashMap(jdk10)

    JDK1.7以前的HashMap jdk1.7中,当冲突时,在冲突的地址上生成一个链表,将冲突的元素的key,通过equals进行比较,相同即覆盖,不同则添加到链表上,此时如果链表过长,效率就会大大降 ...