• 接口测试入门总结


    一、如何理解接口?

    看下图中“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()  # 用例执行主入口

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

  • 相关阅读:
    浅谈SQLite——查询处理及优化
    .NET 并行(多核)编程系列之七 共享数据问题和解决概述
    sql 存储过程学习一
    SQL中获得EXEC后面的sql语句或者存储过程的返回值的方法 【收藏】
    script刷新页面,刷新代码
    C#编程中关于数据缓存的经验总结
    SQL存储过程的概念,优点及语法
    SQLite数据库安装、试用及编程测试手记
    c# sqlite 数据库加密
    进销存管理系统的设计与实现
  • 原文地址:https://www.cnblogs.com/xiaogongjin/p/12914903.html
Copyright © 2020-2023  润新知