画布 1
接口自动化测试
  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 对象进行处理