之前使用过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方法,示例:

 import requests
response_get = requests.get(url, data, headers, cookies)
response_post = requests.post(url, data, headers, cookies)

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

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

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

 def main_get(list_result, cookies):
"""
用于模拟get请求,返回结果
:param list_result:空列表,用于存储结果
:param cookies: 登陆后的cookie
:return:访问结果
"""
# List_interface_get写在接口文件里,文件是py格式,然而它本身是字典类型
for key in List_interface_get:
try:
f1 = requests.get(key, cookies=cookies)
if f1:
print f1.content
print List_interface_get[key]+'接口访问成功'
split_line()
list_result.append(f1.content+'||'+key)
# print f1.read()
except AssertionError:
print 'One Error in get'
pass
return list_result def main_post(result_list, url_list, param_list, payload_list, note_list, cookies):
"""
模拟post请求
:param result_list: 结果字典
:param url_list: 接口字典
:param param_list: 入参字典
:param payload_list: header字典
:param notelist: 描述字典
:param cookies: 登录获取的cookie
:return:填充完成的结果列表
""" # post这块写的比较low,最好自己搞一个数据结构把它搞定
for key in range(1, 9):
a = requests.post(url=url_list[key], data=param_list[key], headers=payload_list[key], cookies=cookies)
try:
if a.content:
print a.content
print note_list[key]+'接口访问成功'
split_line()
result_list.append(a.content+'||'+url_list[key])
except AssertionError:
print 'One Error in post'
pass
return result_list

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

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

 BaseURL = 'https://******.com'  # 测试环境
# 使用什么数据结构不重要,关键看实现方法中怎么解析你的测试数据
List_interface_get = {
BaseURL+'/api/****/****/****?****=1&****=375': '描述'
}
# 以下是用于post的接口
List_interface_post = {
1: BaseURL+'/api/****/****/****/****'
}
# 以下是用于post的数据
List_post_param = {
1: 'new=222222&old=111111'
}
# 以下是post接口的描述,它是干嘛的
List_post_note = {
1: '修改密码'
}
# 以下是post用到的请求头
List_post_header= {
1: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
}

  三、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可以使用,具体看个人喜好吧。

                                                           好了,就这样,菜鸟一枚,欢迎指正

-------首席小学生

使用python进行接口测试(二)的更多相关文章

  1. 基于python的接口测试框架设计(二)配置一些参数及文件

    基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里  毕竟导入的时候方便了一些 首先是url 图略 建 ...

  2. Python之接口测试(一)

    前言 之前我们已经学会了利用JMeter工具进行接口测试,今天我们学习一下如何利用python进行接口测试. 一:发送get请求 import requests,json url = 'http:// ...

  3. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  4. Python 基础语法(二)

    Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...

  5. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  6. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  7. python/MySQL练习题(二)

    python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...

  8. Python/MySQL(二、表操作以及连接)

    Python/MySQL(二.表操作以及连接) mysql表操作: 主键:一个表只能有一个主键.主键可以由多列组成. 外键 :可以进行联合外键,操作. mysql> create table y ...

  9. python下实现二叉堆以及堆排序

    python下实现二叉堆以及堆排序 堆是一种特殊的树形结构, 堆中的数据存储满足一定的堆序.堆排序是一种选择排序, 其算法复杂度, 时间复杂度相对于其他的排序算法都有很大的优势. 堆分为大头堆和小头堆 ...

  10. python函数(二)

    python函数(二) 变量的作用域 1.局部变量与全局变量 在函数内创建的变量被称为局部变量,这类变量的生命周期与函数相同,当函数执行完毕时,变量也就随之消失. 此类变量只能在函数内部调用,函数外不 ...

随机推荐

  1. SVN经常使用命令说明

    SVN版本号:1.5 及更新版本号 名词说明: WC:Working Copy 你的工作区 Versioned:受控的:受版本号控制的 SVN是什么? SVN是开源的版本号控制系统. 比CVS很多其它 ...

  2. WIN32读写INI文件方法

      在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...

  3. php中运用GD库实现简单验证码

    昨天学习了运用php的GD库进行验证码的实现. 首先可以用phpinfo()函数看一下GD库有没有安装,我用的wampserver是自动给安装的. 主要的步骤是: 1.生成验证码图片 2.随机生成字符 ...

  4. Android四大组件——Activity

    Activity作为Android四大组件之一,也是其中最重要的一个组件.作为一个与用户交互的组件,我们可以把Activity比较成为windows系统上的一个文件夹窗口,是一个与用户交互的界面.再进 ...

  5. Android TagFlowLayout完全解析 一款针对Tag的布局(转)

    一.概述 本文之前,先提一下关于上篇博文的100多万访问量请无视,博文被刷,我也很郁闷,本来想把那个文章放到草稿箱,结果放不进去,还把日期弄更新了,实属无奈. ok,开始今天的博文,今天要说的是Tag ...

  6. MyEclipse保存文件时 自动格式化代码! 不包括文档注释

    设置不格式化 文档注释

  7. git变基、冲突解决

    参考git rebase 版本..变基 git冲突解决先fetch,pull,如果文件冲突,手动处理冲突文件,然后再fetch,pull,发现拉不下来,这时需要将文件改为已合并,然后提交文件 具体操作 ...

  8. (转)asp.net 使用cookie完成记住密码自动登录

     代码如下 复制代码 string username = this.txtUserName.Text;//用户名        string password = this.txtPassword.T ...

  9. 查询oracle表和sql数据量大小

    select t.TABLE_NAME,t.NUM_ROWS from user_tables t order by t.TABLE_NAME:--oracle  SELECT object_name ...

  10. ods_yx给用户分配表空间、权限用户等工作内容。

    1.登陆运维审计 huang_cb.bl hac12345 2.找到81.35   root-admin  nwsj*2013 3.打开oracle EMC工具,使用ods_yx用户登陆进EMC里面的 ...