接口测试入门总结

一、如何理解接口?

看下图中“A”线,可以理解为接口就是一个电灯的开关,它在接口里面给你提供了一个参数,参数的值一个是“开”,一个是“关”。

说起来,怎么才能让灯亮?一个灯头接两根线,一根线接火线,一根线接零线这时灯就亮了。反之,不接零线、火线灯就灭了。

其实接口呢,就把这些复杂的操作简化了,让你看到的就只有一个开关,而你来操作这个开关就好了。我们做接口测试也只需要测试这个开关就完成任务了,接口测试就是这么简单。

  1. 当你访问“http://127.0.0.1:8080/light?opt=open”,让零线、火线连通,此时灯亮。
  2. 当你访问“http://127.0.0.1:8080/light?opt=close”,让零线、火线断开,此时灯灭。

结论:开关对应的就是一个接口(api),开灯(按下开的键)对应接口opt的参数为open,关灯(按下关的键)对应接口opt的参数就为close!

二、请求结构

看到这里我们大致就明白了接口测试是怎么一回事了。接下来需要理解一下HTTP的URL是怎么组成为一个接口的。如图:

1.一个URL就是一个接口,接口大致会分为一下几个部分:

  1. 请求协议:

    • http — 普通的http请求
    • https — 加密的http请求,传输数据更加安全
    • ftp — 文件传输协议,主要用来传输文件
  2. 请求IP:就是指提供接口的系统所部署的服务器地址,也可以是域名

  3. 请求端口:如果不填端口,默认是80,否则需要填写端口号

  4. 接口路径:指系统提供的接口在什么位置

  5. 接口参数:参数在接口路径后,用“?”来表示路径地址,剩下的都是参数,用“&”来区分参数个数

    如下示例:

    http://127.0.0.1:8080/light?opt=open&use=yy&pwd=123456

  6. 接口HTTP参数

  • http请求方式
    • GET --- 通过请求URI得到资源
    • POST --- 用于添加新的内容
    • PUT --- 用于修改某个内容
    • DELETE --- 删除某个内容
    • CONNECT --- 用于代理进行传输,如使用SSL
    • OPTIONS --- 询问可以执行哪些方法
    • PATCH --- 部分文档更改
    • PROPFIND (wedav) --- 查看属性
    • PROPPATCH (wedav) --- 设置属性
    • MKCOL (wedav) --- 创建集合(文件夹)
    • COPY (wedav) --- 拷贝
    • MOVE (wedav) --- 移动
    • LOCK (wedav) --- 加锁
    • UNLOCK (wedav) --- 解锁
    • TRACE --- 用于远程诊断服务器
    • HEAD --- 类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
  • http请求头

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度。示例:

Accept:image/gif.image/jpeg./

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate

  • http请求体

请求体就是请求等正文,可以有很多种请求体:

    • json格式
    • xml格式
    • html格式
    • 二进制格式( 多数用于图片 )
    • 字符串格式

看到上面的请求结构,就能进行接口测试,只需要修改接口的参数,就可以像功能测试一样测,可以使用各种测试用具辅助测试,测试之前先上被测试代码,大家练习的时候可以copy代码,运行代码后就可以开始测试了。

import flask
from flask import jsonify
server = flask.Flask(__name__)


@server.route('/light', methods=['get'])
def light():
    opt = flask.request.values.get("opt")
    if opt == 'open':
        return jsonify({"code": 0, "success": "灯亮啦!"})
    elif opt == 'close':
        return jsonify({"code": 0, "success": "关灯啦!"})
    else:
        return jsonify({"code": 1, "error": "怕是开关被你弄坏了!"})


if __name__ == '__main__':
    server.run(port=80, debug=True)

三、接口测试

1.工具测试

接口测试工具目前有很多工具,比如postman、Jmeter、soapUI、fildder等等,这里使用postman进行简单的测试

2.代码测试

这里使用Python语言来进行接口测试,使用”requests”库来编写代码比较简答易懂,如果没有安装”requests”库,可以打开cmd,输入”pip install requests”来安装,这里直接上代码

import requests

# 接口url
url = 'http://127.0.0.1:80/light'

# 接口参数(开灯)
params_open = {"opt": "open"}

# 接口参数(关灯)
params_close = {"opt": "close"}

# 接口参数(异常)
params_error = {"opt": "broken"}

# 发送开灯接口
res_open = requests.request(method='get', url=url, params=params_open)
# 获取开灯响应结果
print("开灯响应结果:", res_open.json())


# 发送关灯接口
res_close = requests.request(method='get', url=url, params=params_close)
# 获取关灯响应结果
print("关灯响应结果:", res_close.json())


# 发送异常操作接口
res_error = requests.request(method='get', url=url, params=params_error)
# 获取异常操作响应结果
print("异常操作响应结果:", res_error.json())

执行代码后得到以下结果:

 

3.unittest框架测试

unittest是python语言中的自带的一款单元测试框架,无需安装

unittest的测试大致分为以下步骤:

  1. 引入unittest模块
  2. 创建测试类,类名以Test开头,遵循大驼峰命名规则,并且继承TestCase类
  3. 创建前置(setup/setupclass)和后置(teardown/teardownclass)
  4. 创建测试用例
  5. 创建main方法
  6. 执行测试

代码参考如下:

import requests
import unittest  # 引入unittest模块


class TestLight(unittest.TestCase):  # 继承TestCase类

    def setUp(self):  # 前置
        print("开始执行测试")

    def tearDown(self):  # 后置
        print("测试执行结束")

    def test_01_open(self):  # 测试用例1
        '''
        开灯测试
        '''
        url = 'http://127.0.0.1:80/light'  # url
        method = 'get'  # 请求方法
        data = {"opt": "open"}  # 请求参数
        res = requests.request(method=method, url=url, params=data)  # 发送请求
        actual = res.json()  # 实际响应结果
        expect = {'code': 0, 'success': '灯亮啦!'}  # 期望结果
        try:
            self.assertEqual(expect, actual)  # 断言
            print("测试通过")
        except AssertionError as e:
            print("测试失败")
            raise e

    def test_02_close(self):  # 测试用例2
        '''
        关灯测试
        '''
        url = 'http://127.0.0.1:80/light'
        method = 'get'
        data = {"opt": "close"}
        res = requests.request(method=method, url=url, params=data)
        actual = res.json()
        expect = {'code': 0, 'success': '关灯啦!'}
        try:
            self.assertEqual(expect, actual)
            print("测试通过")
        except AssertionError as e:
            print("测试失败")
            raise e

    def test_03_error(self):  # 测试用例3
        '''
        异常操作测试
        '''
        url = 'http://127.0.0.1:80/light'
        method = 'get'
        data = {"opt": "broken"}
        res = requests.request(method=method, url=url, params=data)
        actual = res.json()
        expect = {'code': 1, 'error': '怕是开关被你弄坏了!'}
        try:
            self.assertEqual(expect, actual)
            print("测试通过")
        except AssertionError as e:
            print("测试失败")
            raise e


if __name__ == '__main__':
    unittest.main()  # 用例执行主入口

执行测试代码得到以下结果:

posted @ 2020-05-19 09:09  小公瑾  阅读(580)  评论(0编辑  收藏  举报