赞
踩
前言
其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人)什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求。
我为啥说接口测试比功能测试简单呢,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。
正好最近在做接口测试,之前公司的方案是使用postman进行接口测试。但是伟大的墙导致我们只能用离线版postman。。然后一个很长很长的接口列表,一个接一个的访问。我的天哪。。所以萌生了一个想法,使用python编写一套接口测试脚本,设置接口列表,然后逐条访问,输出日志。
POST 和 GET----GET一般用于获取/查询资源信息,而POST一般用于更新资源信息|Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。
做过接口测试或者做过前端的人都知道,接口的访问方式是不一致的,所以才会使用postman来进行接口测试,因为它可以设置post和get方式。使用python模拟这俩种访问方式是重中之重。先说GET方式。GET方式就比较简单了,把接口放进浏览器地址栏,点下回车就完成了一次GET。所以就需要使用python访问URL就可以模拟一次GET 测试。
1 import urllib2
2 url_save = 'http://www.baidu.com/'
3 try:
4 s_save = urllib2.urlopen(url_save).read()
5 print s_save
6 except urllib2.HTTPError, e:
7 print e.code
8 except urllib2.URLError, e:
9 print str(e)
如上所示就完成了一次GET请求,调用urllib2库,然后将一个字符串形式的URL传给urllib2.urlopen函数,最后使用read()方法将GET回来的数据存储起来。
然后说说POST。其实在python的urllib2库中,我们刚刚所使用的urlopen函数还有其他几样不是必选的入参,因为这些入参给定了初始化的值:
1 def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
2 cafile=None, capath=None, cadefault=False, context=None):
如上代码,urllib库有一个很智能的毛病。data不给值,访问方式就是GET,data给了值,方式就会变成POST;所以模拟POST 方式的代码如下:
import urllib
import urllib2
url = 'http://www.example.com'
# values的形式:name:value
values = {'**' : '***',
'**' : '***',
'**' : '***' }
#使用urllib.urlencode函数对values字典进行处理,最终形式为:**=***&**=***
data = urllib.urlencode(values)
#如果对data顺序有要求,建议自己拼接data
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
就像如上代码,把POST方式所需要的数据写到data参数中去,POST方式就模拟成功了。
使用python获取cookie所需要的库叫做cookielib。获取cookie的例子:
1 # 这里有四种CookieJar,CookieJar是最原始的
2 cookie_use = cookielib.CookieJar()
3 handler = urllib2.HTTPCookieProcessor(cookie_use)
4 # 使用绑定好CookieJar的handler创建一个opener
5 opener = urllib2.build_opener(handler)
6 # 将opener安装到urllib2中
7 urllib2.install_opener(opener)
8 # 使用安装好的urllib2访问某一网站获取cookie
9 urllib2.urlopen('https://....../login')
10 #这个时候cookie已经被CookieJar获取到了
11 print cookie_use
在下一步,将获取到的cookie绑定到opener头中:
1 '''
2 将获取到的cookie绑定到opener,上一步获取的cookie并不满足如下格式,
3 需要自己进行字符串的切片和拼接
4 '''
5 opener.addheaders.append(('Cookie', 'name=***&888=888'))
现在的opener就可以用来访问任意需要登录的网站了!
功能:功能实现,实现与设计一致, 接口通过性测试
健壮性: 边界值,容错性
性能: 并发及压测
稳定性: 长期运行的稳定性
安全性: SQL注入, session依赖, 数字签名, http接口的安全性
Http/Https接口: 通过http/https协议传送接口数据(通常按字符串/二进制传输), 如常见的网页表单, https安全性更好
RESTful Api: REST表述性状态传递. 一种设计风格,基于http/https协议, 把一切接口视为资源, 接口要分版本,在统一的域名下管理, 不同的方法(get/post…)做不同的事,通常请求及响应使用json格式
Web Service: SOAP简单面向对象协议, 基于http实现的一种RPC方案.接口返回一些对象,可以直接通过操作对象,实现我们需要的业务处理.使用xml格式传输数据
RPC接口: RPC为远程方法调用, 有不同的实现方案,基于TCP/Http协议的都有. RPC可以想我们本地导入和调用对象一样使用. Dubbo接口也是一种RPC接口.
请求数据类型(Content-Type):application/x-www-form-urlencoded: 常规只有文本的网页表单application/json: RESTful Api常用格式, 结构清晰, 含有多层嵌套multipart/form-data: 既有文本,又有上传文件或富文本框的混合数据表单text/xml: xml格式, RPC接口常用格式
响应数据类型string/html: 返回字符串或网页源码json: RESTful Api常用响应格式, 结构清晰xml: RPC接口常用格式
Auth_1.0/Auth_2.0: 通用接口授权方式
Session依赖: 需要登录之后才能进行接口操作
Token验证: 先要使用自己的appid/appsecret通过获取token接口验证身份获取一个token(令牌,有一定有效期), 然后带着token访问接口
数字签名: 将原本的参数按一定规则进行组合,配合时间戳或appsecret, 通过加密算法生成一个签名sign, 携带签名进行接口请求
GET: 获取资源
POST: 修改资源
PUT: 上传资源
DELETE: 删除资源
HEAD: 只请求页面首部
PATCH: 补丁
OPTIONS: 运行客户端查看服务器性能
…
Wiki
Word文档
Postman导出
抽象接口定义
接口管理平台
Excel/TestLink/禅道
TestCase | Url | Method | DataType | a | b | Excepted | Actual | Status |
test_add_normal | /api/add/ | GET | Url | 3 | 5 | 8 | ||
test_add_zero | /api/add/ | POST | FORM | 0 | 0 | 0 | ||
test_add_negetive | /api/add/ | POST | FORM | -3 | 5 | 2 | ||
test_add_float | /api/add/ | POST | FORM | 3.2 | 5.2 | 8.4 | ||
test_add_null | /api/add/ | POST | FORM | 0 |
补充:
如果有需要Python自动化测试跟教学视频的小伙伴,记得点此链接领取**【资料】**哦
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/620379
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。