接口测试入门
1 接口测试的类型
主要包含三种测试:
Web接口测试,
应用程序接口(API, application programming interface)测试,
数据库测试。
实际上意义就是UI界面到数据库之间,数据流经过的所有过程。
LAMP(Linux Apache MySQL PHP)/LNMP(Linux Nginx MySQL PHP):只有 Web 服务器,没有应用服务器。
Web 浏览器 到 Web 服务器: Web 接口测试,测试 请求和响应。
Web 服务器 到 数据库服务器:应用接口测试,测试 PHP。
Linux / Windows + Java / Asp.net(C#) + Apache/Nginx + Tomcat/IIS + MySQL/Oracle/SQL server
Web 浏览器 到 Web 服务器: Web 接口测试,测试 请求和响应。
Web 服务器 到 应用服务器:契约服务,WebService,JavaAPI,WebAPI,WCF,.net Remoting:测试 Java 或者 C# 处理业务逻辑(JavaEE/ ASP.NET MVC),通俗讲测试 Service。
应用服务器 到 数据库服务器:数据处理服务,测试 Java 或者 C# 处理数据,把数据读取到数据库。
我们需要关注的是 Web 接口测试。
Web 接口测试的方法:
Python 或者 Java,C# 编程,触发请求,读取响应,分析得到的响应数据进行与源数据的对比。
用工具:Postman 或者 SoapUI(不推荐)
Postman 原本是一个 Chrome 浏览器的插件,现在已经提供了 Windows、MacOS 和Linux 的独立安装版本。接下来用Windows的版本来进行安装和使用。
2. Postman 的安装
下载 Postman 的安装包,分为 32位 和 64位。https://www.getpostman.com
安装 Postman
注册用户(Sign Up) 并登录 (Sign In)
Snap23.png
可以在多台电脑登录,做过的测试会自动同步。
Snap24.png
安装完并且登录以后可以开始测试。
Snap25.png
3. Web 接口的测试点
Web 接口通过 HTTP(S)请求,是一个URL,URL请求结果,会得到数据,数据的格式主要有两种,一种JSON,一种 XML。主要用JSON演示。
JSON,是JavaScript Object Notation,JavaScript 对象表示法。是用来表示JavaScript的对象,或者JavaScript数据等。因为JavaScript广泛的应用在 Web的前端页面,所以 JSON 主要应用在 Web 接口中。主要的应用场景:
APP移动端和服务器的通信。用应用层 HTTP 协议,通过 Web接口读取数据和处理(提交)数据。
Web前端与服务器的通信,往往服务器是第三方的,主要的场景就是 支付和第三方登录。
京东 web端 调用 微信支付、财付通支付、支付宝支付、银联支付、网银支付。。。
京东 web端 支持 微信登录、QQ登录、微博登录
京东 web端 显示 第三方的的物流信息(顺丰、申通、圆通。。。)
公共数据,在web端/APP端的天气预报 是由第三方接口提供。
XML,Extensible Markup Language,可扩展的标记语言,HTML就是XML的一种形式,通过 标签的成对出现,以及标签的层次,来决定数据的内容。XML 主要用在后端的 应用程序接口的数据传递,比如 Java,C#等。XML 比较旧的格式。
接下来用一个例子,来分别JSON和XML表示以下的表格数据。
employee_idfirst_namelast_nameemailphone_numberhire_datejob_idsalary
100StevenKingSKING515.123.45676/17/1987AD_PRES24000
101NeenaKochharNKOCHHAR515.123.45689/21/1989AD_VP17000
首先用 JSON的形式,JSON是“键值对”(Key Value)的形式
{"employees": [{"employee_id":100,"first_name":"Steven","last_name":"King","email":"SKING","phone_number":"515.123.4567","hire_date":"6/17/1987","job_id":"AD_PRES","salary":24000}, {"employee_id":101,"first_name":"Neena","last_name":"Kochhar","email":"NKOCHHAR","phone_number":"515.123.4568","hire_date":"9/21/1989","job_id":"AD_VP","salary":17000}]}
对应的 XML 格式:
<?xml version="1.0"encoding="UTF-8"?>100StevenKingSKING515.123.45676/17/1987AD_PRES24000101NeenaKochharNKOCHHAR515.123.45689/21/1989AD_VP17000
Web 接口的定义来决定测试内容
Method:GET POST PUT DELETE
URL: 接口的地址
请求参数:每个参数名字,参数的类型,参数的范围,参数是否可选,参数是否有默认值
等价类:有效等价的参数,无效等价的参数
边界值:离点,上点,内点
正交试验法:×因子 ×状态
有的时候,参数之间关联:省,市,县(区),尤其注意非法(无效)的关联
断言:检查响应的内容
正文:正文是否包含某些字符
正文:JSON 或者 XML 的键值对检查,数量检查 xx.length
响应的状态码:200, 403
响应的时间: 100ms, 200ms
*5. 认证:你是否有权限访问接口
接口的实质对象:数据
数据的格式
数据的内容
4. Postman 的使用
测试 心知天气 API:https://www.seniverse.com/
登录 心知天气 (先注册)
读 接口的 API 文档
API的定义: API 的URL的组成 和请求方法
API的参数
请求参数
响应参数
以 获取实时天气作为示例:
API的方法和URL:GET,https://api.seniverse.com/v3/weather/now.json
API的参数:
请求参数:
参数名参数类型参数意义是否必选
keystring你的API密钥true
locationstring查询的地理位置true
languagestring结果表示的语言false,默认简体中文
unitstring结果表示的单位(华氏度,摄氏度)false,默认摄氏度
响应参数:
参数名参数类型参数意义
location对象:包括id, name, country, time_zone, time_zone_offset
now对象:包括 text,code, temperature, feel_like...
last_update日期
用Postman开始测试
new tab 中输入 方式,和URL
点击 Params 设置参数
点击 send 开始发送请求
查看请求结果是否有输出,格式是否和上述的响应参数对应
{"results": [ {"location": {"id":"WS10730EM8EV","name":"Shenzhen","country":"CN","path":"Shenzhen,Shenzhen,Guangdong,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now": {"text":"Cloudy","code":"4","temperature":"25"},"last_update":"2017-05-09T10:05:00+08:00"} ]}
编辑 Tests 页面,添加断言。
varjsonData =JSON.parse(responseBody);tests["检查城市名称"] = jsonData.results[0].location.name ==="Shenzhen";
使用Postman 登录然之系统,测试登录接口
使用然之 4.2 或者以上版本
修改然之系统 配置文件C:\xampp5\htdocs\ranzhi\config\my.php,在最后添加一行配置,如下图:
修改 然之 配置文件
$config->notEncryptedPwd =true;
重启 Apache
打开 Chrome,输入然之的网址,打开登录页面
Chrome 打开登录页面
打开 Fiddler,并设置 Chrome 进行抓包
在 Chrome 中进行登录,提交用户名和密码
在 Fiddler 中捕获刚刚的登录 POST 请求
Fiddler 抓包登录 POST
打开 Postman,新建 URL,POST方法。
需要设置 Postman,点击 File | Settings,进行设置
settings
Setting 2
在 Postman 输入刚刚 Fiddler 请求的 POST 的 URL
Fiddler 抓包分析
输入上述 URL
URL
在 Fiddler 中复制请求的第二行到空行之间的 消息报头(Head),Postman 输入 Head
Head 1
Head2.png
在 Fiddler 中复制请求的正文,在 Postman 中 body 选择 raw,并输入
输入 Body
在 Postman 的test 中输入以下测试内容:
输入断言
varjsonData =JSON.parse(responseBody);tests["检查locate"] = jsonData.locate ==="\/sys\/index.html";tests["检查result"] = jsonData.result ==="success";tests["Status code is 200"] = responseCode.code ===200;
在 Chrome 中退出登录,注意此步骤很重要,退出以后才能够进行 Postman 登录
退出 然之
在 Postman 中点击 Send,进行测试
测试结果
查看 Postman 的运行结果。
result.png
5. Web 接口的认证
Web 接口测试的准备
HTTP协议的请求和响应
请求:GET/POST
响应:html/JSON/XML/CSS/JavaScript/png..
测试的概念
断言:检查返回的响应里面的内容。
测试设计:根据请求的参数来设计用例
读懂接口的文档
请求的方式和URL
请求的参数和响应的参数
在请求接口时使用认证
basic authorization 基础认证,输入用户名和密码
在上面四个的基础上,注意Web 接口需要认证,尤其是支付业务,这里用一个例子,并且是POST请求 + Basic Auth 认证,来阐述此部分。
示例的步骤:
打开https://www.pingxx.com/Ping++ 在线支付网站,注册一个账号,并登录,会自动创建一个应用。
Snap27.png
进入自动创建的应用,进入应用的控制面板界面。
获取APP[id],按如图的方式获取到,并等下使用
Snap28.png
获取Test Secret Key,按照如图的方式获取到,并依旧等下使用
Snap29.png
Snap30.png
按照下操作,查阅 API 文档,并开始测试。
Snap31.png
Snap32.png
Snap33.png
选择 Charge,创建一个 支付订单,查阅 API 文档的请求参数,响应参数,依旧 方法和URL
Snap34.png
在Postman 中创建新的测试,输入 POST 和 URL
Snap35.png
设置参数,其中需要用到 APP[id],为之前步骤获取到的。
Snap36.png
在 请求中使用 认证,Basic Auth,输入 之前步骤获取到的 Test Secret Key,作为用户名。
Snap37.png
Snap38.png
添加测试断言。
用 JavaScript脚本,查询 JSON 对象的值,并做检查。点击右侧的现成菜单,会自动生成检查 JSON 的框架。
varjsonData =JSON.parse(responseBody);tests["检查object值"] = jsonData.object ==="charge";tests["检查order_no值"] = jsonData.order_no ==="99887766554433221100";tests["检查amount值"] = jsonData.amount ===9900;
Snap39.png
点击 Send 开始测试。
Snap40.png
示例2:创建红包的Web 接口测试
微信红包支付接口测试的接口描述
创建红包的Web接口描述
在 Postman 中输入 POST 方法和 URL
Paste_Image.png
在 Postman 中 使用 Http Basic Auth 认证。输入之前获取的 Secret_test_key。根据 API文档进行的操作
Paste_Image.png
在 Postman 中操作
Paste_Image.png
Paste_Image.png
输入 请求的参数,注意POST 请求的请求参数,输入到 Body 中
输入正文
在 Test 设置断言,刚才说要设置 Object 的验证。
输入以下内容:
断言
varjsonData =JSON.parse(responseBody);tests["检查 Object 属性"] = jsonData.object ==="red_envelope";tests["检查 金额 属性"] = jsonData.amount ===6000;
点击Send,检查。
结果
到管理平台查看订单结果。
Paste_Image.png
6. Postman 的其他功能
Postman 支持导出用例以及账户的同步功能。
Snap41.png
接口实例:
天气预报接口:
接口URL:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
网络服务描述语言:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
该接口有5个方法:
- getSupportCity()
- getSupportDataSet()
- getSupportProvince()
- getWeatherbyCityName()
- getWeatherbyCityNamePro()
通过输入参数,可以调用这些接口,并得到请求的数据。
查询本天气预报Web Services支持的国内外城市或地区信息:
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=广东
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=北京
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=上海
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=湖北
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=河南
查询获得本天气预报Web Services支持的洲、国内外省份和城市信息
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportDataSet
查询获得本天气预报Web Services支持的洲、国内外省份和城市信息
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince
查询获得根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=深圳
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=59493
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=北京
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=54511
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=上海
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=58367
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=香港
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=45005
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=Chicago
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=72530
链接:https://www.jianshu.com/p/4a386d57dd72
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。