使用robotframework做接口测试4——搞定接口签名及密码加密
接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了。于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍。大致的心路历程就是这样了,签名其实没什么好讲的,每个公司实现都不一样,java代码转成python代码也要点时间,传参类型和格式一定要对,调试的时候有人帮忙会快很多。
写这篇文章的目的之一,是粗略介绍一下自定义关键字的写法。另一目的是给有接口签名的小伙伴提供一些思路,不至于被一个老是变的字段吓到不敢前行。
有些小伙伴可能对签名什么的没有概念,那稍微解释一下。签名主要的作用是保证接口传值的完整性,一致性和安全性,一般会将时间戳及重要字段做成一个签名,作为一个参数传入,服务端收到请求后,首先对签名字段做校验,校验通过才做请求处理。在安全要求比较高一些的公司,比如金融行业,就会使用接口数字签名。
由于我们不是设计签名的,而只是翻译开发代码,就不考虑诸多细节了。假设签名签的字段为时间戳timestamp,重点字段:data1,data2,设备id:imei,签名的key为一个客户端和服务端约定的一个常量,如’abcd’。
算法过程如下:
- 对约定key值进行md5处理
- 将规定字段拼接成一个长字符串,拼接时用&符号做为连接,拼接前把字符格式都转成了字符串
- 将第二步得到的字符串进行md5处理
以下是胡七八诌的python代码,可运行:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import hashlib
import json class md5Enc(object):
def get_sign(self,data1,data2,imei="",t=""):
'''
Examples:
${sign} | Get Sign | api.name | ${userinfo} | 357070058113616 | ${t_now}
'''
#key string
key="abcd"
#第一步,key md5
keyMd5 = hashlib.md5()
keyMd5.update(key)
keyMd5= keyMd5.hexdigest()
data2Str = json.dumps(data2)
#第二步拼接签名
signBefore = data1 + "&" + data2Str + "&" + imei + "&" +\
t + "&" + keyMd5
#第三步sign md5
sign = hashlib.md5()
sign.update(signBefore)
sign = sign.hexdigest() return sign def get_pw_encrpt(self,pwBefore):
'''write your encrpt code here'''
print 'your encrpt code'
我的具体做法是把这个py文件命名为md5Enc.py(与类名一致)。py文件放在rf的项目文件里,如果和suite同级,以library的形式导入:

调用如下:

实际实践中,除了签名算法,还有密码加解密算法等,套路都差不多,有一些很简单的,只单纯一个md5的加密,应该用不到自定义关键字,稍微复杂一点的多层加密,什么AES啊,SHA256啊,base64啊,就考虑自己写写代码吧。
使用robotframework做接口测试4——搞定接口签名及密码加密的更多相关文章
- 使用robotframework做接口测试5——一个用例中调多个接口
凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...
- 使用robotframework做接口测试之一——准备工作
最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...
- 使用robotframework做接口测试二——处理响应数据
初使用RequestsLibrary做接口测试时,你会不会感到困惑,为什么会有${resp.content}, ${resp.status_code}这样的写法,这个status_code什么鬼,f5 ...
- fiddler抓包,搞定接口
上篇介绍的世纪佳缘登录是由已有cookie保持登录状态的.世纪佳缘登陆不需要填入验证码,可以很方便直接请求登录接口来达到登录状态的目的. 这篇介绍直接从登录接口进行登录,那么这就要求要找到登录接口ur ...
- 使用robotframework做接口测试三——保持登录状态
调用登录接口登录了,其他的接口怎么保持登录状态呢? 首先来看一看,web端或者说客户端是怎么样用cookie/token等保持登录状态的.一般来说,cookie都会在登录接口由服务端返回,而且会是在 ...
- 解放双手,自动生成“x.set(y.get)”,搞定vo2dto转换
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 给你机会,你也不中用啊 这些年从事编程开发以来,我好像发现了大部分研发那些不愿意干的 ...
- Mongoose轻松搞定MongoDB,不要回调!
MEAN开发栈中使用MongoDB的时候,与之配对的ORM最好的选择就是Mongoose了.本文就和大家一起探讨一下如何使用Mongoose来实现MongoDB的增删改查. 为了能使文中的例子更加生动 ...
- 一个注解搞定SpringBoot接口定制属性加解密
前言 上个月公司另一个团队做的新项目上线后大体上运行稳定,但包括研发负责人在内的两个人在项目上线后立马就跳槽了,然后又交接给了我这个「垃圾回收人员」. 本周甲方另一个厂家的监控平台扫描到我们这个项目某 ...
- python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...
随机推荐
- MyBatis: Invalid bound statement (not found)错误的可能原因
MyBatis: Invalid bound statement (not found)错误的可能原因 其他原因导致此问题解决参考: 1.检查 xml 文件所在 package 名称是否和 Mappe ...
- go变量和数据类型
go语言的基本数据类型 布尔类型:bool 整型:int8.byte.int16.int.uint.uintptr等 浮点类型:float32.float64 复数类型:comple ...
- 异步IO框架:asyncio 中篇
上一节我们首先介绍了,如何创建一个协程对象.主要有两种方法 通过async关键字, 通过@asyncio.coroutine 装饰函数. 然后有了协程对象,就需要一个事件循环容器来运行我们的协程.其主 ...
- u-boot下的DM驱动模型 阶梯状 (转)
U-boot 下DM驱动模型的相关笔记要注意的关键两点: DM驱动模型的一般流程bind->ofdata_to_platdata(可选)->probe 启动,bind操作时单独完成的 ...
- 使用Quartus进行功能仿真时出现“testbench_vector_input_file option does not exist”的解决方法
环境:本人使用的Quartus 18 Prime Standard Edition 1.新建一个vmf文件 添加Node或者Bus 2.点击Processing->Start->S ...
- JAVA 日期操作
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); Sys ...
- lombok使用及常用注解
简介 大部分项目中都必不可少的包含数据库实体(Entity).数据载体(dto,dataObject),而这两部分都包含着大量的没有业务逻辑的setter.getter.空参构造,同时我们一般要复写类 ...
- Android浮窗权限研究(转载)
这篇博客主要介绍的是 Android 主流各种机型和各种版本的悬浮窗权限适配,但是由于碎片化的问题,所以在适配方面也无法做到完全的主流机型适配,这个需要大家的一起努力,这个博客的名字永远都是一个将来时 ...
- [Python自学] day-16 (JS、作用域、DOM、事件)
一.JS中的三种函数 1.普通函数 function func(){ console.log("Hello World"); } func() 2.匿名函数 setInterval ...
- 【Python之路】异步IO
线程:CPU基本执行单元,可以与同属一个进程的其他线程共享资源,线程是属于进程的. 进程:资源单元,进程一般由程序.数据集.进程控制块三部分组成.一个进程默认有一个主线程, GIL:用于在进程中对所有 ...