• mynote-api-powder
  • mynote api 防火墙端口转发
  • mynote-api-powder-sync
  • 冲突解决
  • mynote powder
  • todo
  • initTestData 集中初始化
  • 重新初始化:注意有无有意义的数据
  • 重新初始化 18912341234:注意有无有意义的数据
  • concurrentTest 并发测试
  • note 注意
  • 排错
  • --------------参考
  • 'scene': 'rename-first',
  • geneCommon
  • await createOne
  • pass commits
  • testSuites
  • ctx 数据缓存 __
  • mynote powder 2021-7-4 todo
  • mynote powder proxy
  • lv1= lv2= type=
    mynote-api-powder
    api doc 规范 
    lv1=mynote lv2= type=todo
    curl 调用优化、错误处理
    http://uninote.com.cn:85/tests/api_tests.html

    mynote api 防火墙端口转发

    docker端口 转发 防火墙 
    firewall-cmd --add-forward-port=port=20027:proto=tcp:toaddr=172.17.0.4:toport=85 --permanent
    firewall-cmd --reload
    firewall-cmd --list-forward-ports
    nginx 转发?
    lv1= lv2= type=

    mynote-api-powder-sync

    git@git.uninote.com.cn:cyb/mynote-api-powder-sync.git
    E:\uninote\mynote-api-powder-sync
    通过分支管理差异,自动复制、合并、同步到 powder
    配合 generate -w 实现完全的 编辑-编译-测试 loop

    冲突解决

    # 1 检测到冲突
    TortoiseGitProc.exe /command:commit /path:"E:\uninote\mynote-api-powder-sync"
    2 手动解决冲突并提交
    3 re loop
    ps: 如果没有解决冲突,会中断
    lv1= lv2= type=

    mynote powder

    qs 
    mynote-api-powder-sync 
    SHA-1: df086ea38b34ecd9ea8ffc1caf1b6a5eeffa0ed9
    * mynote 接口支持

    todo

    uploadImg 二进制
    不传的支持
    mask 用户信息验证
    change-tel2 powder 缺失
    lv1= lv2= type=

    initTestData 集中初始化

    1. mysql init:
    INSERT INTO `mynote`.`artag` (`id`, `tag`, `time`, `status`) VALUES ('1', 'js', '2021-03-14 10:55:05', '1');
    2. es 重置
    3. gogs 如果没有重新初始化,将 user 的自增 id 改为上次的值,避免创建 gogs user 失败 
    查看、修改当前自增id auto_increment <[--
    alter table mynote.`user` AUTO_INCREMENT=4000;
    --]>
    4. 全局初始化 initTestData
    update article set recommend=1 limit 10;
    5. local_params.php:
    'debug.check' => true,
    'debug.tel_code' => true, // 忽略手机验证码,随便输入即可
    'debug.powder' => true,

    重新初始化:注意有无有意义的数据

    DELETE from `user` 
    DELETE from article;
    alter table mynote.`user` AUTO_INCREMENT=5500;
    INSERT INTO `mynote`.`artag` (`id`, `tag`, `time`, `status`) VALUES ('1', 'js', '2021-03-14 10:55:05', '1');
    --> powder 全局初始化
    update article set recommend=1 limit 10;

    重新初始化 18912341234:注意有无有意义的数据

    DELETE from `user` where mobile =  18912341234 or mobile = 18922222222;
    DELETE from article where uid in (select id from user where mobile = 18912341234 or mobile = 18922222222);
    alter table mynote.`user` AUTO_INCREMENT=5600;
    --> powder 全局初始化
    update article set recommend=1 limit 10;
    lv1= lv2= type=

    concurrentTest 并发测试

            'type': NO_BATCH,
            'func': async (ctx) => {
              let all = [];
              const count = 10;
              for (let i = 0; i < count; i++) {
                  all.push(infos.createArticle2.make('random-path'));
                  all.push(infos.updateArticle2.make('rename-first'));
                  all.push(infos.updateArticle2.make('merge'));
                  all.push(infos.renameArticle.make('create-first'));
                  all.push(infos.deleteArticle.make());
              }
              let data = await all;
              console.log(data);
    --- 并发测试问题
    logout 注意不要覆盖 promise
    cookie 不同,session_start 并发
    login promise 避免雪崩
    lastResult 不行,用于 testSuites 中可以,因其不会用于并发测试

    note 注意

    批量测试时不要手动操作,因为有时依赖 version

    排错

    搜索失败, key=748857  queue 没有开启

    --------------参考

    'scene': 'rename-first',

          {
            'scene': 'rename-first',
            'desc': '先 rename,再用相同的 version update',
            'type': NORMAL,
            'func': async (ctx) => {
              await ctx.geneCommon(ctx);
              await infos.renameArticle.make();
            },
          }

    geneCommon

    见上

    await createOne

          let data = await createOne();
          ctx.generated = {
            aid: data.data.aid,
            path: data.data.path,
            version: await version(),
            content,
          };

    pass commits

    git log -1 --pretty=%h
    2021-3-9 16:36:36
    --------------------E:\uninote\mynote-----
    38a01b39
    --------------------E:\uninote\mynote-front-----
    c5354e1
    --------------------e:\dajx\powder-----
    7759931

    testSuites

            'testSuites': [
              {
                'name': 'suc',
                validate: assertOK,
                'tests': [
                  (ctx) => {
                    ctx.generated = {
                      start: 0,
                    };
                  },
                  (ctx) => {
                    ctx.generated.start = 100000;
                    return (ctx, info) => {
                      utils.assert(info.data.data.length === 0, "返回应为空数组");
                    }
                  },
                ]
              },
              {
                'name': 'fail',
                'validate': assertParamEmpty,
                'tests': [
                  (ctx) => {
                    ctx.generated.start = 'a';
                  },
                  (ctx) => {
                    ctx.generated.start = '';
                  },
                  (ctx) => {
                    ctx.generated.sort = '';
                  },
                  (ctx) => {
                    ctx.generated.sort = '1';
                  },
                ]
              }
            ]
    'testSuites': [
      {
        'name': 'fail',
        'validate': assertParamEmpty,
        'tests': ['aid', 'path', 'version'],
      },

    ctx 数据缓存 __

    ctx.__args = {
      path: '000 \ud83e\uddda' + utils.randomPath(),
      content: 'emoji test: \ud83e\uddda',
    };

    mynote powder 2021-7-4 todo

    __front_host -> front server? 这些没有 powder 覆盖到
    import 测试要 logout?

    mynote powder proxy

    vm43:
    server{
        listen 8088;
        #server_name powderproxy.dajxyl.com;
        more_set_headers 'Access-Control-Allow-Origin: *';
        more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS';
        more_set_headers 'Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Powder-ReqIndex,Powder-TrackID,token';
        more_set_headers 'Access-Control-Allow-Credentials: true';
        if ($request_method = 'OPTIONS') {
            return 204;
        }
        location /api {
            rewrite /mynote/(.*)$ /$1 break;
            proxy_pass http://192.168.0.19;
            proxy_set_header Host      $proxy_host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }		
    base: http://192.168.0.43:8088