嗨,大家好,我是小白,好久没写博客了,最近公司搞什么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. SpringBoot项目实现配置实时刷新功能

    需求描述:在SpringBoot项目中,一般业务配置都是写死在配置文件中的,如果某个业务配置想修改,就得重启项目.这在生产环境是不被允许的,这就需要通过技术手段做到配置变更后即使生效.下面就来看一下怎 ...

  2. MSYS2 常见操作

    博客转自:http://www.cnblogs.com/vincenzo/archive/2010/05/13/1734230.html 和 https://blog.csdn.net/langres ...

  3. Freemarker语法收集

    1. 取数组第一项 <#if subModelList?? && (subModelList?size > 0)> <#assign subFirst = su ...

  4. clipboard 在 vue 项目中,on 事件监听回调多次执行

    clipboard 定义一个全局变量 import ClipboardJS from "clipboard"; if(clipboard){ clipboard.destroy() ...

  5. teamviewer破解版

    简介 TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制的应用程序,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamView ...

  6. 如何杀死处于进程状态D的进程

    D状态的就是 uninterruptible sleep ,此时进程不能被信号唤醒,GDB等调试工具也不能对它调试,因为GDB也是用到了信号,也杀不死它 D状态的形成 如何分析D状态 cat /pro ...

  7. 并行编程架构(指令流水、进程、线程、多核,Pipe and Filter)

    最近在进行DSP软件优化时,查阅文献,看到了几种并行机制,下面予以总结: 关键词一:指令流水 关键词二:多进程 关键词三:多线程 关键词四:多核(多处理器.超线程结构.多核结构.多核超线程架构) 在体 ...

  8. ddl语法

    创建表: create table 表名 ( 字段1 varchar2(32) not null primary key, 字段2 date not null ) tablespace 表空间名 事务 ...

  9. 深度解析qml引擎---(1)Qml文件加载

                                                                        "美的事物是永恒的喜悦" --- 济慈    ...

  10. LeetCode 1051. 高度检查器(Height Checker) 28

    1051. 高度检查器 1051. Height Checker 题目描述 学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列. 请你返回至少有多少个学生没有站在正确位置数量.该人数指的是 ...