2019 年我会有猫的,结果就有了陈大猫
这种公司比比皆是,不要太单纯了骚年
好契机,有技术总监盯着这个事,开发没理由不去配合
要求没集成 swagger 的必须集成,接口文档/定义信息不完善的必须立刻搞好
前提是,你得说服你们总监,自动化测试不是测试工程师自己的事,开发必须配合,看看他是否还依然那么坚决,如果依然坚决,那么如上所说,你会做得很顺畅;如果不是,那么估计就是找个由头整你们,赶紧闪人啊~
回答一下第一个问题:
总之,可以各部分各司其职,互不依赖的独立工作,也可以全部协同,不用纠结测试平台是否一定要和 CI/CD 强相关。当然你可能看到了一些只能帮助基础薄弱的同事管理自动化测试用例的平台,没有提供与 CI/CD 集成的能力,你可以自己二次开发解决。
《万里十五年》
不是《万历十五年》吧?
想问一下大兄弟,副业是啥,给奔 4 的老哥们指条路呗
都做到部门负责人了,问题还问得这么开放啊,大约思寒的学院有系统的课程,报个班学几个月吧
第三条第四条估计需要花一周时间去搞一下,其他的基本已有
看到了核心关键字:“豪宅税”
仰慕~
No space left on device……百度一下啥意思吧,google 就算了,看不懂
跑路!
早些时候看到这这个的时候就想定制一下集成到自己的平台里面的,加一些导入导出之类的功能来对接
添加了几张基本的逻辑控制说明思维导图
……
那你自己不会写一句么:
mv target/sepp*.jar /opt/seppb/sepp.jar
什么 KPI?
@ 米阳 MeYoung 看声明
去看另外一个帖子的 readme
1、估计是你动了什么文件了,恢复回去吧,报错看起来是 build/webpack.prod.conf.js:
new UglifyJsPlugin({
uglifyOptions: {
show_copyright: false,
comments: false,
compress: {
warnings: false,
drop_debugger: true,
drop_console: false
}
},
2、打开 config/index.js 里面 build.productionSourceMap 为 true,再构建看看到底错哪里了
房间内不停地传出一阵阵思索的声音
卧槽,这个厉害了,感觉自己要彻底挂掉了,70 位脑子厉害到这种程度的人都干不过所谓的 AI
资源、人、技术不到位?
还是说上面根本就不看重这块工作?
未提交代码的组件权限控制设计:
目前权限系统的权限控制粒度能控制到按钮级别,按钮和接口权限同步,同时保证前端实现权限控制的同时,保证后端服务的安全(接口权限)
权限配置->资源配置
a.组件名:该值是按钮所属页面组件的名称()
b.组件id:该值是开发自己赋予的值(该值要确保在当前页面是唯一的)
c.接口:该按钮功能下对应的接口权限(按钮可能存在一对多的情况,目前支持单一接口的权限)
d.接口类型:略
e.角色:按钮和接口对应的角色
f.是否生效:略
目前前端提供了两个权限组件用于权限控制(auth.js、has.js)
使用该指令后,就可以通过页面配置权限的方式动态的给使用该指令的按钮分配权限
例如资源配置里的删除按钮
<el-button v-auth="{id:'deleteResource',component:'ResourceConfig'}" icon="el-icon-delete" @user1="deleteResourceConfig(scope.row)" type="text"
class="oper-button"
style="color:#EE6F6F"></el-button>
v-auth指令中两个必须参数;id该页面中该按钮的唯一标识;component为当前组件的name;
注意:在确认使用 v-has 的时候必须在该组件测 created 方法中加入 this.$auth();
如图:
v-has指令属于前端控制指令、仅对前端的按钮做权限控制,适合资源配置页面,虽然资源配置页面也使用v-auth指令,但是对于资源配置页面的按钮权限来说,使用v-has更加合适
<el-button v-has="['admin']" style="float: right; padding: 3px 0" type="text" @user2="addResource">添加</el-button>
v-has 指令的参数为数组形式,可以加入多个角色,在这里个人不推荐使用 id 作为参数,而是采用 code
1.auth.js
function install(Vue, options = {}) {
Vue.directive(options.name || "auth", {
inserted(el, binding) {
if (!check(binding.value)) {
el.parentNode && el.parentNode.removeChild(el);
}
}
});
}
function getCurrentAuthority() {
return JSON.parse(localStorage.getItem("roleIds"));
}
function check(authInfo) {
const currentAuthority = getCurrentAuthority();
alert(this.$options.name);
let auth = localStorage.getItem(authInfo.component);
let authJson = JSON.parse(auth);
for (let authData of authJson) {
if (authData.authId == authInfo.id) {
return currentAuthority.some(item => authData.roleIds.includes(item));
}
}
return false;
}
export default {install};
2.has.js
function install(Vue, options = {}) {
Vue.directive(options.name || "has", {
inserted(el, binding) {
if (!check(binding.value)) {
el.parentNode && el.parentNode.removeChild(el);
}
}
});
}
function getCurrentAuthority() {
return JSON.parse(localStorage.getItem("roleCodes"));
}
function check(roles) {
return getCurrentAuthority().some(item => roles.includes(item));;
}
export default {install};
对于在资源配置页面配置过的接口需要在后端接口加上相应的权限标识,以让配置生效
例如在上面配置的删除资源配置的权限接口可以加上@ApiPermission注解以让该接口的权限生效
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiPermission {
Role[] roles() default ALL;
boolean dynamic() default true;
RoleGroup[] groups() default RoleGroup.ALL;
enum RoleGroup {
ALL
}
}
目前该注解有三个参数:roles、dynamic、groups
groups 可以忽略
roles和dynamic是成对出现的,如果我们不想动态配置接口的权限,可以将dynamic设置为false,然后设置roles,否则单独设置roles并不会生效,因为默认情况dynamic为true会从数据库读取相关角色信息
当你看到 100 份简历,90 份内容相似的时候……
起初在大公司,这种问题给供应商和 HR 施压就少很多,但是后来就感觉有点恼火了,终于发现思寒老板搞高端培训是多么的有眼光了
这句就理解不了:
扫描出的 bug 按照 red、safe、block、serious、risk、warning、style、suggestion、normal 顺序排列展示
赶脚照着这个分类,还应该有 green、dangerous、joke 啥的
提交的时候不知道怎么漏掉了,已经好了
@0x88 你要的东西来了