画布 1
接口测试内容梳理
  接口测试
    L1
      常见的接口协议
        HTTP 协议
          请求
            请求行
              请求方法 method
                GET
                POST
                PUT
                DELETE
              url
              协议版本 protocol
            请求头
              客户端自报家门
            请求参数
              query 拼接在 url 中
              协议://主机名/IP:端口/路径?请求参数（key=value）
            请求体
              request body
                json
                form 表单格式
                文件格式
          响应
            响应状态行
              协议
              响应状态码 status code
            响应头
              服务端自报家门
            响应体
              客户端发出请求所需要得到的数据
        RESTFul 架构
          GET 获取资源
          POST 新增或者更新资源
          PUT 更新资源
          DELETE 删除资源
      接口测试用例编写
      postman 测试接口
        发请求
          GET
            请求参数拼接在 url 中
              params 中设置
          POST
            body 中设置，支持不同格式的请求体
              form 表单
              json 格式
              文件
        查看响应
          响应体
            展示格式化好的响应体
          响应头信息
          响应状态、时间
        操作请求头信息
          请求 headers
            添加
            修改
            删除
          postman 会自动化添加一部分请求头
        编写断言
          tests
            使用 postman 提供的代码片段
              状态断言
                验证响应状态码
              业务断言
                验证响应体中是否包含某个字符串
                验证 json 格式响应体中某个 key 的 value 是否符合预期
                验证响应体是否与某个字符串完全相同
              头信息断言
                验证响应头信息中是否存在某个 key
              响应时间断言
                验证响应时间是否小于某个值
        测试前脚本
          设置变量
          准备测试数据
          准备测试状态
        鉴权
          常见鉴权方式都支持
        变量设置与引用
          种类
            环境变量
            测试集变量
            全局变量
            普通变量
          引用
            {{变量名}}
        测试集
          创建
            分类管理
            构造接口业务场景
          设置
            鉴权
            测试集变量
            断言
          运行
            批量运行接口用例
            数据驱动
              csv
              json
          导出
          导入
        导出自动化接口测试代码
          python requests
    L2
      抓包工具
    L3
      结合mock进行测试
      弱网测试
    L4
      Mock工具定制化
  接口自动化测试
    L1.基本的请求响应和断言
      接口请求构造
        r = requests.post(url)
        r = requests.request(method, url)
      接口测试断言
        状态断言
          assert r.status_code == 200
        业务断言
          assert r.json().get("key") == expect
          r.json()["key"]
    L2.复杂请求和响应的解决能力
      复杂请求构造
        POST 请求传递不同格式的请求体
          form 格式
            requests.post(url, data={})
          json 格式
            requests.post(url, json={})
          文件格式
            requests.post(url, files={})
          xml格式
            requests.post(url, data={})
      cookie 处理
        请求头设置
          requests.get(url, cookie={}）
      超时处理
        requests.get(url, timeout=0.01)
      配置代理
        requests.get(url, proxies={"http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}, verify=False)
      多层嵌套响应断言
        jsonpath
          使用 jsonpath 第三方库
          jsonpath(r.json(), "jsonpath 表达式")
          jsonpath 表达式
            $ 根结点
            . 下一层级
            .. 任意层级
    L3.接口自动化测试通用场景
      整体结构的响应断言
        jsonschema
          校验 json 格式是否符合预期
          使用 jsonschema 第三方库
          validate(instance=obj, schema=schema)
      数据库操作与断言
        使用 pymysql 第三方库
          连接数据库
            connect = pymysql.connect(host, port, user, password. database, charset)
          创建游标
            cursor = connect.cursor()
          执行 SQL 语句
            cursor.execute(SQL)
          获取执行结果
            cursor.fetchone()
      接口鉴权
        cookie
          request.Session()
        token
          携带身份信息请求认证接口
            返回 token
          携带 token 请求其他业务接口
        auth
          每次请求携带用户信息
            request.get(url, auth=HTTPBasicAuth("usename", "password"))
    L4.接口自动化测试框架能力
      多套被测环境
        使用文件管理多套测试环境
          yaml
          ini
          定义常量类
        切换环境
          通过环境变量
          通过命令行参数
      多协议封装设计
      接口加密解密
        知道使用的是什么加密算法
          自行使用对应的工具解密
        开发知道，让开发提供对应的加密工具库
        第三方加密，让加密方提供远程解析服务
      接口测试框架封装
        目的
          框架更加稳定
        思路
          分层
          公共的方法进行封装
          接口实现和测试用例以及断言进行拆分
        ApiObject
          BaseApi
            底层框架
          ServiceApi
            业务接口描述
          Testcase
            接口测试用例以及断言
    L5.接口自动化测试专家
      接口管理体系
      其他协议的接口测试
        dubbo
        thrift
        等等其他协议
      流量回放
      diff工具
      数据驱动测试框架