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