接口自动化测试(一)
---恢复内容开始---
一、接口和接口测试
1、接口是什么?====传递数据的通道
接口测试:是测试系统组件的一种测试
接口测试主要包括:同一个系统中模块间的接口,另一个是系统平台与平台的对接。(内部接口、外部接口)
接口类型:
http接口:通过GET或POST来获取数据,在数据的处理上效率比较高
WebservIce接口:通过soap协议来获取数据,比起http来说能处理更复杂的数据类型
二. MVC模式
测试系统结构:MVC模式(Model模型、View视图、Control控制器)
前台页面—后台服务数据交互
M:Model,指的是数据库
V:View,指用户看到的视图(呈现页面)
C:Control,逻辑层面,用于M和V之间的交互,接口就是在Control层

三、客户端与服务器如何建立通讯
http通讯过程:

四、浏览器中查看接口信息
1. 接口包含的信息:接口地址、请求方法、请求数据、返回数据
2. chrome浏览器,在操作页面的时候,查看与后台的数据交互
F12—Network—Preserve log—XHR
3. 接口通信数据类型:
JSON、XML
定义通信协议
五. http通信
请求行:
请求的协议类型、协议版本、请求方法、资源地址
例:get XXXXXX.html http/1.0
消息头(header):
【空行】:
消息体(body):
响应数据(response):
状态行、消息头(header)、【空行】、消息体(body)

以快递盒为例:快递单—消息头 快递盒里的东西—消息体
六. http通信—状态码
状态码由三位数字组成,第一个数字定义了响应的类别,共分为五种类别:
1xx:指示信息—表示请求已接收,继续处理
2xx:成功—表示请求已被成功接收、理解、接受
3xx:重定向—要完成请求必须进行更进一步的操作
4xx:客户端错误—请求有语法错误或请求无法实现
5xx:服务器端错误—服务器未能实现合法的请求
常见状态码:
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在,eg:输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
七. 接口测试要点
-
检查接口返回的数据是否和预期结果一致
-
检查接口的容错性,假如传递数据的类型错误时是否可以处理。例如上面的例子是支持整数,传递的是小数或字符串呢?
-
接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否可以正常处理
-
接口的性能,接口处理数据的时间也是测试的一个方法。牵扯到内部就是算法和代码的优化 ------响应时间多与少10s,易用性
-
接口的安全性,如果是外部接口的话,这点尤为重要
测试思维相同
八.实例
以课堂派课堂详情页面为例
import requests
from requests import request
url="https://www.ketangpai.com/AssistantApi/getTeacherTeam?courseid=MDAwMDAwMDAwMLOGy9yHz7ev"
method="get"
param="courseid: MDAwMDAwMDAwMLOGy9yHz7ev"
re=request("get",url,params=param)
print(re.status_code)
print(re.text)
得到的结果,可以看到并没有获取到数据(缺少cookies)
C:\Python34\python.exe C:/Pycharm-Workspace/python6_进阶/request_study/request_cookies.py
200
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>跳转提示</title>
<style type="text/css">
*{ padding: 0; margin: 0; }
body{ background: #fff; font-family: '微软雅黑'; color: #333; font-size: 16px; }
.system-message{ padding: 24px 48px; }
.system-message h1{ font-size: 100px; font-weight: normal; line-height: 120px; margin-bottom: 12px; }
.system-message .jump{ padding-top: 10px}
.system-message .jump a{ color: #333;}
.system-message .success,.system-message .error{ line-height: 1.8em; font-size: 36px }
.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display:none}
</style>
</head>
<body>
<div class="system-message">
<h1>:(</h1>
<p class="error">你还没有登录系统</p><p class="detail"></p>
<p class="jump">
页面自动 <a id="href" href="/User/login.html">跳转</a> 等待时间: <b id="wait">3</b>
</p>
</div>
<script type="text/javascript">
(function(){
var wait = document.getElementById('wait'),href = document.getElementById('href').href;
var interval = setInterval(function(){
var time = --wait.innerHTML;
if(time <= 0) {
location.href = href;
clearInterval(interval);
};
}, 1000);
})();
</script>
</body>
</html>
Process finished with exit code 0
需要注意的是,request方法的动态参数要以key=value的形式传入,get请求的key是params,post请求是data,value必须写成字典的形式


浙公网安备 33010602011771号