接口测试入门

2019-04-07  本文已影响0人  微笑的AK47

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

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

上一篇下一篇

猜你喜欢

热点阅读