使用Python做接口测试
写接口的时候需要对接口进行测试,一般会选用postman这种工具,但是需要一个一个的用鼠标去点他,尤其有些返回值需要手动去更新就更麻烦了,使用脚本自动去测试可以减轻一定的工作量.反正闲着也是闲着,在代码开发的同时脚本也能基本写完了.
我在写接口的时候的基本任务是:登陆获取登陆后的token通过json返回,使用token进行后续的操作
问题1传递数据进行登陆
我们是使用json进行传递的数据,最开始只传递一个类似
jsonStr:{'mobile':'13312345678','pwd':'password'}
这样我需要自己编写head头,并提交获得response
def getResponse(url, val):json = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\n " \#数据的分界线,一个数据一个"Content-Disposition: form-data; name=\"jsonStr\"" \#jsonStr就是key的键值,和Java代码中的那个是对应的,使用getJsonStr获得"\r\n\r\n%s\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--" % val#结束符号多了2个'--'head = {#头记录数据类型,分割线标记'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",'cache-control': "no-cache"}
#使用urllib2提交并获得request,调用URLopen获得response,我们的返回值就在里面request = urllib2.Request(url=url, headers=head, data=json)return urllib2.urlopen(request)response = getResponse(url, val)
jsObj = response.read()#获得返回的数据,我返回的是json类型的字符串
ret = json.loads(jsObj)#json转换成Python数据
#也许我下次测试的需要的数据就在这个ret中,这个ret是个Python的字典,辣么...我在写下次jsonStr的时候有
#假设ret={'token':'....etc.....','etc':'...'}
data = "jsonStr:{'token':'%(token)s'}" % ret #->>"jsonStr:{'token':'....etc.....'}"
#这样我就可以直接往下写了,不用关心其他的了
后来需求改成,key1:val1,key2:val1这种形式的,之前的那种形式不能使用了,把原来数据改成字典形式太累.
只用修改分割的形式变成
分割线+内容+name1+val1+分割线+内容+name2+val2.....分割线--这个样子就可以了
稍微修改下上面的修改字符串的方式就行,没啥好说的.
原来的val需要稍微多修改点,其实无非就是2次分割,第一次将原来的字符串以','(逗号)进行分割,第二次用':'(冒号)分割,
我是形成类型[[k1,v1],[k2,v2],[k3,v3]]
def split_val(self, val):sli = val.strip().lstrip('{').rstrip('}').split(',')f = lambda x: x.strip().split(':')ret = [f(x) for x in sli]return ret
#这样就不用修改原来的最讨厌的数据了
#
附上完整代码
import random
import urllib2
import json
import sysclass singleRun:def __init__(self, url, val, con):self.__url__ = urlself.__split__flag__ = "------WebKitFormBoundary7MA4YWxkTrZu0gW"self.__split__end__ = self.__split__flag__ + "--"self.__json__ = ''self.__make__(val)self.__head__ = {'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",'cache-control': "no-cache",'postman-token': "df471615-292b-a328-0c06-f3f3e2e795c8"}self.__convertInfo__ = conself.ret = {}def __str__(self):return self.__json__def __one_json__(self, k, v):
return self.__split__flag__ + "\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s\r\n" % (k, v)
#再换JSON传递的格式只用把这个函数修改了就好
def __split_val__(self, val):
sli = val.strip().lstrip('{').rstrip('}').split(',')
f = lambda x: x.strip().split(':')
ret = [f(x) for x in sli]
return ret
def __component__(sli):
for i in sli:
if len(i) != 2:
continue
self.__json__ += self.__one_json__(i[0].strip("'").strip('"'), i[1].strip("'").strip('"'))
def __make__(self, val):
sli = self.__split_val__(val)
self.__component__(sli)
self.__json__ += self.__split__end__def __get_response__(self):request = urllib2.Request(url=self.__url__, headers=self.__head__, data=self.__json__)return urllib2.urlopen(request)def run(self):self.name = self.__convertInfo__[self.__url__.split('/')[-1]].decode('utf8')response = self.__get_response__()jsObj = response.read()self.ret = json.loads(jsObj)return ret, jsObjdef err_status(self):return '200' != str(self.ret.get('status'))class test_runer:convertInfo = {'personal': "获取个人信息", 'schedule': "排班"}def __init__(self, host=r"http://127.0.0.1/"):self.__json_data__ = []#用列表来保证插入的顺序self.__host__ = hostdef __setitem__(self, pattern, data):key = self.__host__ + pattern.lstrip('/')self.__json_data__.append((key, data))#需求在变的时候直接改singleRun处理就行def run_tests(self):ret = {}cnt = 0for url, json in self.__json_data__:cnt += 1if "TOKEN" in ret:json % rettry:single = singleRun(url, json, test_runer.convertInfo, cnt)ret,js = single.run()print jsif single.err_status():print jsonexcept Exception, e:print e.messagedef test_run(mobile='13312341001', pwd='pwd123'):host = "http://127.0.0.1:8080/"test_instance = test_runer(host)test_instance['personal'] = "'token':'%(TOKEN)s', 'data':'shuju', 'pwd':'{0}'".format(pwd)test_instance['schedule'] = "'token':'%(TOKEN)s', 'month':'201705'"test_instance.run_tests()if __name__ == "__main__":test_run()
使用Python做接口测试相关推荐
- python做接口测试的优点_python做接口测试的必要性
什么是接口测试 接口测试主要用于检测外部系统与内部系统之间,以及系统内部各 个子系统之间的交互点.其测试的重点是,检查数据的交换.传递和控 制管理过程,以及系统间的逻辑依赖关系等. 为什么要做接口测试 ...
- 【python做接口测试的学习记录day10——pytest自动化测试框架之接口加密】
通常出于安全性考虑,开发会对接口参数进行加密,加密方式有很多种,例如MD5.Base64.RSA双密钥加密方式等,下面我们以MD5加密方式的登录接口为例,此接口对密码进行了加密,如果测试时直接使用未加 ...
- 【python做接口测试的学习记录day9——pytest自动化测试框架之yaml数据驱动封装】
之前我们的框架中,如果有多个测试用例,则需要在yaml文件中写入多个用例,而每个用例可能不同的仅仅只是个别参数值,这就导致很多重复代码,现在我们使用数据驱动就可以解决这个问题了. 我依旧采用之前的登录 ...
- 为什么python 为什么没有接口_python做接口测试的必要性
什么是接口测试 接口测试主要用于检测外部系统与内部系统之间,以及系统内部各 个子系统之间的交互点.其测试的重点是,检查数据的交换.传递和控 制管理过程,以及系统间的逻辑依赖关系等. 为什么要做接口测试 ...
- Python脚本做接口测试,抛弃接口测试工具是否可行?(一)
最近在学习python语言,一直再想,工作中经常性会去调试接口.测试接口,于是就思考一番,怎么能抛弃以前经常依赖使用工具做接口测试的局限性,换做python脚本来做呢?接下来就产生下如下脚本,觉得还行 ...
- 接口测试用python怎么做_请问一下python怎么做接口测试工具?
茅侃侃 之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用.作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗 ...
- Python脚本做接口测试,抛弃接口测试工具是否可行?(二)
学习是为了更好的应用,之前做接口测试一直用的postman.fiddler,感觉用工具还是有些局限性,于是想着把学到的python灵活运用到接口测试中,于是就有了以下案例,思考着想用unittest做 ...
- python实训总结和心得体会_《用Python做HTTP接口测试》学习感悟
机缘巧合之下,报名参加了阿奎老师发布在"好班长"的课程<用Python做HTTP接口测试>,报名费:15rmb,不到一杯咖啡钱,目前为止的状态:坚定不移的跟下去,自学+ ...
- python接口自动化 一个变量 其他接口要用_python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)...
简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...
最新文章
- Windows下RabbitMQ安装及注意事项
- [BZOJ4894]天赋
- mysql语句报错1403_GoldenGate SQL error 1403 mapping 错误解决方案
- 【struts2】action中使用通配符
- vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ
- 俄罗斯、乌克兰程序员薪资大曝光:年薪普遍 15w+,女程序员比男程序员收入高?
- 宽字符与Unicode
- 在vue中使用axios发送post请求,参数方式
- ERP管理软件哪家好?比较好的ERP管理系统软件推荐
- 离职通知邮件主题写什么好_辞职信邮件主题.doc
- 腾讯云服务器无限流量,腾讯云服务器有流量限制吗,您看仔细了
- c语言中的矩阵求逆程序,C语言矩阵求逆
- 小程序云开发点赞案例实现及环境vant插件配置等问题
- 如何隐藏logo 高德地图api_高德地图去掉logo
- HDFS操作及命令介绍
- 面向Java开发者的ChatGPT提示词工程(2)
- 数字地球与计算机技术联系,数字地球与现代测绘科学的发展问题
- 南宁城市建设发展市政工程人才需求暴涨
- 跟着Nature学绘图 水循环图
- 三大运营商(联通、电信、移动)的手机号正则判断
热门文章
- (转)连续信号(八)| 傅里叶变换的性质 | 积分、微分特性 + 时域、频域卷积 + 帕斯瓦尔
- LDK 7.1开发包正式发布
- c语言图片加水印,[求助]C语言 bmp文件加上水印
- android 手电筒 开源,Android 手电筒
- 什么是promise,promise的用法。
- 让癌细胞自己饿死自己,科学家找到肿瘤新方法|Science
- 斯德哥尔摩的照片七:城市漫步(下)
- 安装和配置NFS服务器
- 王兴在这个被互联网遗忘的网站上,留下了一万多条碎碎念。
- visual studio怎么让button一直生效_异地投保怎么做?看完你就知道