使用python进行接口测试(二)

上一篇 / 下一篇  2016-12-05 18:27:16 / 个人分类:接口测试

转自
www.cnblogs.com/hainan-zhang/p/5889341.html

之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用。作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗时只要是真正的无人值守,耗时不是太久的都可以接受。所以,本人又尝试了一个新的包:requests。  

  Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 !推荐一篇文章,上面有该包的详细说明传送门,以下只会写到我用到的部分,所以更多的了解需要自己去搜资料

   好了,我们开始吧!!

  接口测试中重要的部分:

       1.get和post方法

     2.用到的参数

     3.请求头

     4.cookie

     5.日志输出

     6.如何调试你的程序--借助fiddler

  按照以上的顺序,我将一一说明我的搞法,因为编码能力有限,所以可能看着很low

一、get和post

  requests包很好的实现了post和get方法,示例:

1importrequests2response_get =requests.get(url, data, headers, cookies)3response_post = requests.post(url, data, headers, cookies)

  其他的访问方式如put,head等等,用法几乎都是如此,因为没用到,所以省略

  现在一般的接口返回值有页面和json俩种,按照需求,可以分别使用response.text或者response.content获取,text获取的是unicode类型的返回值,而content返回值是str类型,所以我一般使用content来获取返回值,因为这样获取的返回值可以直接使用正则或者in的方式来验证返回值结果是否正确。

     我自己为了实现接口的自动访问,所以又在requests上面加了一层封装,就像下面这样:

复制代码
1defmain_get(list_result, cookies):2"""3用于模拟get请求,返回结果4:param list_result:空列表,用于存储结果5:param cookies: 登陆后的cookie6:return:访问结果7"""8#List_interface_get写在接口文件里,文件是py格式,然而它本身是字典类型9forkeyinList_interface_get:10try:11f1 = requests.get(key, cookies=cookies)12iff1:13printf1.content14printList_interface_get[key]+'接口访问成功'15split_line()16list_result.append(f1.content+'||'+key)17#print f1.read()18exceptAssertionError:19print'One Error in get'20pass21returnlist_result222324defmain_post(result_list, url_list, param_list, payload_list, note_list, cookies):25"""26模拟post请求27:param result_list: 结果字典28:param url_list: 接口字典29:param param_list: 入参字典30:param payload_list: header字典31:param notelist: 描述字典32:param cookies: 登录获取的cookie33:return:填充完成的结果列表34"""3536#post这块写的比较low,最好自己搞一个数据结构把它搞定37forkeyinrange(1, 9):38a = requests.post(url=url_list[key], data=param_list[key], headers=payload_list[key], cookies=cookies)39try:40ifa.content:41printa.content42printnote_list[key]+'接口访问成功'43split_line()44result_list.append(a.content+'||'+url_list[key])45exceptAssertionError:46print'One Error in post'47pass48returnresult_list
复制代码

 

二、用到的参数以及请求头

  我用的方法是把这些都存放于一个py文件中,当然也可以使用excel或者xml文件,甚至于使用DB。项目紧急,凑合了一下,这里的数据结构主要为了符合上面封装的函数,直接上代码看吧

复制代码
1BaseURL ='https://******.com'#测试环境2#使用什么数据结构不重要,关键看实现方法中怎么解析你的测试数据3List_interface_get ={4BaseURL+'/api/****/****/****?****=1&****=375':'描述'5}6#以下是用于post的接口7List_interface_post ={81: BaseURL+'/api/****/****/****/****'9}10#以下是用于post的数据11List_post_param ={121:'new=222222&old=111111'13}14#以下是post接口的描述,它是干嘛的15List_post_note ={161:'修改密码'17}18#以下是post用到的请求头19List_post_header={201: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}21}
复制代码

 

  三、cookie

  一款产品的接口测试中必定会使用登录状态,需要使用cookie实现,之前写过使用cookiejar获取cookie,requests中获取cookie的方法更为简单,不过首先你得知道是哪个接口set了cookie,不过一般是登录啦。登录接口访问之后set了cookie,那好,就去调用登录接口,然后拿到搞回来的cookie:

#只需要这样!!login = requests.post(login_url, data=login_data, headers=login_header)
cookie= login.cookies

这个cookie就是登录状态了,拿着随便用,需要登录的就直接cookies=cookies

     四、日志输出

  这里注意看第二步中接口数据,有接口描述,也有接口是啥,第一步中又把content做成返回值了,具体拼接方式自己想吧,东西全有了,想写啥写啥,还可以加上获取本地时间的api获取接口运行时间,log文件该长啥样是门学问,这里就不献丑了。

   五、借用fiddler调试你的脚本

     requests允许使用代理访问,这有啥用,真有!fiddler是一款截包改包的工具,而且通过扩展可以进行请求间的比对,这样让你的程序访问的请求和真正正确的请求作对比,为啥我的程序访问出错?是不是缺了请求头?参数是不是丢了?cookie是不是少了?很容易看出来。写法如下:

proxies ={"http":"http://127.0.0.1:8888","https":"http://127.0.0.1:8888"}
requests.post(url, proxies=proxies)

这样就可以走代理了,除fiddler以外还有charles和burp suite可以使用,具体看个人喜好吧。

 

 



TAG: Python python

 

评分:0

我来说两句

Open Toolbar