写接口的时候需要对接口进行测试,一般会选用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做接口测试相关推荐

  1. python做接口测试的优点_python做接口测试的必要性

    什么是接口测试 接口测试主要用于检测外部系统与内部系统之间,以及系统内部各 个子系统之间的交互点.其测试的重点是,检查数据的交换.传递和控 制管理过程,以及系统间的逻辑依赖关系等. 为什么要做接口测试 ...

  2. 【python做接口测试的学习记录day10——pytest自动化测试框架之接口加密】

    通常出于安全性考虑,开发会对接口参数进行加密,加密方式有很多种,例如MD5.Base64.RSA双密钥加密方式等,下面我们以MD5加密方式的登录接口为例,此接口对密码进行了加密,如果测试时直接使用未加 ...

  3. 【python做接口测试的学习记录day9——pytest自动化测试框架之yaml数据驱动封装】

    之前我们的框架中,如果有多个测试用例,则需要在yaml文件中写入多个用例,而每个用例可能不同的仅仅只是个别参数值,这就导致很多重复代码,现在我们使用数据驱动就可以解决这个问题了. 我依旧采用之前的登录 ...

  4. 为什么python 为什么没有接口_python做接口测试的必要性

    什么是接口测试 接口测试主要用于检测外部系统与内部系统之间,以及系统内部各 个子系统之间的交互点.其测试的重点是,检查数据的交换.传递和控 制管理过程,以及系统间的逻辑依赖关系等. 为什么要做接口测试 ...

  5. Python脚本做接口测试,抛弃接口测试工具是否可行?(一)

    最近在学习python语言,一直再想,工作中经常性会去调试接口.测试接口,于是就思考一番,怎么能抛弃以前经常依赖使用工具做接口测试的局限性,换做python脚本来做呢?接下来就产生下如下脚本,觉得还行 ...

  6. 接口测试用python怎么做_请问一下python怎么做接口测试工具?

    茅侃侃 之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用.作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗 ...

  7. Python脚本做接口测试,抛弃接口测试工具是否可行?(二)

    学习是为了更好的应用,之前做接口测试一直用的postman.fiddler,感觉用工具还是有些局限性,于是想着把学到的python灵活运用到接口测试中,于是就有了以下案例,思考着想用unittest做 ...

  8. python实训总结和心得体会_《用Python做HTTP接口测试》学习感悟

    机缘巧合之下,报名参加了阿奎老师发布在"好班长"的课程<用Python做HTTP接口测试>,报名费:15rmb,不到一杯咖啡钱,目前为止的状态:坚定不移的跟下去,自学+ ...

  9. python接口自动化 一个变量 其他接口要用_python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)...

    简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...

最新文章

  1. Windows下RabbitMQ安装及注意事项
  2. [BZOJ4894]天赋
  3. mysql语句报错1403_GoldenGate SQL error 1403 mapping 错误解决方案
  4. 【struts2】action中使用通配符
  5. vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ
  6. 俄罗斯、乌克兰程序员薪资大曝光:年薪普遍 15w+,女程序员比男程序员收入高?
  7. 宽字符与Unicode
  8. 在vue中使用axios发送post请求,参数方式
  9. ERP管理软件哪家好?比较好的ERP管理系统软件推荐
  10. 离职通知邮件主题写什么好_辞职信邮件主题.doc
  11. 腾讯云服务器无限流量,腾讯云服务器有流量限制吗,您看仔细了
  12. c语言中的矩阵求逆程序,C语言矩阵求逆
  13. 小程序云开发点赞案例实现及环境vant插件配置等问题
  14. 如何隐藏logo 高德地图api_高德地图去掉logo
  15. HDFS操作及命令介绍
  16. 面向Java开发者的ChatGPT提示词工程(2)
  17. 数字地球与计算机技术联系,数字地球与现代测绘科学的发展问题
  18. 南宁城市建设发展市政工程人才需求暴涨
  19. 跟着Nature学绘图 水循环图
  20. 三大运营商(联通、电信、移动)的手机号正则判断

热门文章

  1. (转)连续信号(八)| 傅里叶变换的性质 | 积分、微分特性 + 时域、频域卷积 + 帕斯瓦尔
  2. LDK 7.1开发包正式发布
  3. c语言图片加水印,[求助]C语言 bmp文件加上水印
  4. android 手电筒 开源,Android 手电筒
  5. 什么是promise,promise的用法。
  6. 让癌细胞自己饿死自己,科学家找到肿瘤新方法|Science
  7. 斯德哥尔摩的照片七:城市漫步(下)
  8. 安装和配置NFS服务器
  9. 王兴在这个被互联网遗忘的网站上,留下了一万多条碎碎念。
  10. visual studio怎么让button一直生效_异地投保怎么做?看完你就知道