画布 1
接口测试/接口自动化测试
  接口测试
    常见的接口协议
      HTTP 协议
        请求
          请求行
            请求方法 method
              GET
              POST
              PUT
              DELETE
            url
              请求参数 query
              协议://主机名/域名/IP:端口/路径?请求参数（key=value&key2=value2）
            协议版本 protocol
          请求头
            客户端自我介绍
          请求体 request body
            JSON
            Form 表单格式
            文件
        响应
          响应行
            协议 protocol
            响应状态码 status code
              1xx
              2xx
                200
              3xx
                重定向
              4xx
                客户端有错误
              5xx
                服务端有错误
          响应头
            服务端自我介绍
          响应体
            客户端发出请求想要得到的数据
      RESTful 架构
        一个规范，一个资源的访问使用的是同一个 url，但是对于资源的不同操作，使用的是不同的请求方法
          GET：获取资源（查询）
          POST：新增或者更新资源
          PUT：更新资源
          DELETE：删除资源
    接口测试设计思路
      基本功能流程测试
        冒烟测试
        正常流程覆盖测试
      基于输入域的测试
        边界值测试
        特殊字符校验
        参数类型校验
        必选参数校验
        组合参数校验
        有效性验证
        默认值校验
        排重逻辑
    postman 接口测试
      发请求
        新建请求页面
          选择不同的请求方法
            GET
            POST
            PUT
            DELETE
          使用不同的请求参数
            拼接在 url 中的请求参数
              params
            请求体
              body
                Form 表单
                  设置发送文件
                Raw
                  JSON 格式
      查看响应
        查看不同格式的响应体
        响应头信息
        响应状态
          响应状态码
          响应时间
          断言结果
      设置请求头信息
        在 Headers 中设置
          添加头信息
          修改头信息
          删除头信息
      断言
        Tests 中设置
          验证响应状态码
          验证响应体中是否包含某个字符串
          验证 JSON 中的某个 key 的值是否符合预期
          验证响应体是否与某个字符串完全相等
          验证响应头信息中某个 key 是否存在
          验证响应时间是否小于某个值
          概要
      测试前脚本
        Pre srcipt 中设置
          设置变量
      鉴权
        常见鉴权方式
      变量设置与引用
        种类
          环境变量
          测试集变量
          全局变量
          普通变量
        引用
          {{变量名}}
      测试集
        创建
          分类管理
          构造接口业务场景
        设置
          鉴权
          测试集变量
          断言
        运行
          批量运行接口用例
          数据驱动
            csv
            json
        导出
          生成 json 文件，可以分享给他人使用
        导入
      导出代码
  接口自动化测试
    L1
      接口请求构造
        r = requests.get(url)
        r = requests.post(url)
        r = requests.request(method, url)
        携带不同格式的请求参数
          拼接在 url 中的请求参数
            使用插值的方式，直接拼接在 url 中即可
              url = f"http://host/path?key=value&key2=value2"
            使用 params 传递
              r = requests.get(url, params=param)
              param 需要定义为字典格式
                {
"key": "value",
"key2": "value2"
}
          json 格式的请求数据
            使用 json 传递
              r = requests.get(url, json=param)
              param 需要定义为字典格式
                {
"key": "value",
"key2": "value2"
}
      接口测试断言
        状态断言
          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={})
      复杂断言处理
        jsonpath
          使用 jsonpath 第三方库
          jsonpath(r.json(), "jsonpath 表达式")
          jsonpath 表达式
            $ 根结点
            . 下一层级
            .. 任意层级
      配置代理
        requests.get(url, proxies={"http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}, verify=False)
      cookie 处理
        请求头设置
          requests.get(url, headers={"Cookie": "key=value"})
      超时处理
        requests.get(url, timeout=0.01)
    L3
      接口测试框架封装
        目的
          可维护性、可复用性、易用性
        思路
          分层
          公共的方法进行封装
          接口实现和测试用例以及断言进行拆分
        ApiObject
          BaseApi
            底层框架
          ServiceApi
            业务接口描述
          Testcase
            接口测试用例以及断言
      接口鉴权
        cookie
          request.Session()
        token
          携带身份信息请求认证接口
            返回 token
          携带 token 请求其他业务接口
        auth
          每次请求携带用户信息
            request.get(url, auth=HTTPBasicAuth("usename", "password"))
      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()
    L4
      接口加密解密
        知道使用的是什么加密算法
          自行使用对应的工具解密
        开发知道，让开发提供对应的加密工具库
        第三方加密，让加密方提供远程解析服务
      多套被测环境
        使用文件管理多套测试环境
          yaml
          ini
          定义常量类
        切换环境
          通过环境变量
          通过命令行参数
      多协议封装设计
        把获取到的响应统一转化为 python 对象进行处理