• 非standalone模式,官方代码读配置文件会报空指针。2.1.2.1 非standalone模式下 的代码示例带上去就修复了。👍 👍

  • 一些招聘心得 at March 26, 2020

    老哥,写得好,赞一个,尤其是味道那一块,说到我心里去了

  • 我们公司也遇到过。阿里云那盾,太贵了。看公司发展阶段,别跟钱过不去。我们穷,最后交钱了事。我朋友公司也遇到过,要的是比特币,中招的是db,文件全给你加密锁了。。。

  • consul的服务发现,在配置spring监控时,url无法做到正确解析。理论上缺一个讲spring 对应tag的metrics_path值替换为/actuator/prometheus的,但是配置上去,所有consul服务中的metrics又都换了。所以请教老师这个地方如何区别配置。

    9001就是我的spring-protal

    下面是我使用过的配置:

    global:
    scrape_interval: 60s
    evaluation_interval: 60s

    scrape_configs:
    - job_name: prometheus
    static_configs:
    - targets: ['localhost:9090']
    labels:
    instance: prometheus
    # - job_name: linux
    # static_configs:
    # - targets: ['121.43.164.242:9100']
    # labels:
    # instance: node
    # - job_name: 'spring protal'
    # metrics_path: '/actuator/prometheus'
    # static_configs:
    # - targets: ['121.43.164.242:9001']
    # - job_name: 'mysql'
    # static_configs:
    # - targets: ['121.43.164.242:9004']
    - job_name: 'overwritten-default'
    consul_sd_configs:
    - server: '172.17.0.6:8500'
    services: []
    relabel_configs:
    - source_labels: ['__meta_consul_tags']
    regex: .*mall.*
    action: keep
    #- source_labels: ['__metrics_path__']
    # regex: '/metrics'
    # target_label: __metrics_path__
    # replacement: '/actuator/prometheus'

  • 转需

    #prometheus config
    management:
    endpoints:
    web:
    exposure:
    include: info, health, beans, env, metrics, mappings, scheduledtasks, sessions,threaddump, docs, logfile, jolokia,prometheus
    base-path: /actuator
    cors:
    allowed-origins: http://example.com
    allowed-methods: GET,PUT,POST,DELETE
    prometheus:
    id: springmetrics
    endpoint:
    beans:
    cache:
    time-to-live: 10s #端点缓存响应的时间量
    health:
    show-details: always #详细信息显示给所有用户
    server:
    port: 8001
    metrics:
    export:
    datadog:
    application-key: ${spring.application.name}
    web:
    server:
    auto-time-requests: true

  • Grafana看板里,老师Transactions Response Times是有内容的,我压测完,Transactions Response Times没有内容,也没有按事物分别统计,请老师再演示下,这个是怎么设置的。谢谢了。

  • 3、发起压测,按流量模型设置了各个请求的比例,那么是否有必要去模拟真实的在线用户情况?这个真实情况,理解为独立的用户的行为,浏览要停顿、下单也要停顿。而我们的在建立线上流量模型的时候是基于统计,是整个系统的用户行为的均值。就我写下这个问题,我觉得还是要使用整个系统的统计来做建模。所以有两个子问题:一、压测流量模型不用过多考虑用户个体行为,按整体统计指标来设计,这种看法合理吧?二、个体行为(设置线程思考时间)并不是很科学,那么思考时间这种场景在哪些情况下可以使用呢?目前能想到一种支持多少人在线的测试类别。

  • 请教老师几个问题:
    1、HTTP Header Manager 的作用范围。我的一个jmx树类似下面结构

    Thread Group
    - HTTP Header Manager
    - Http Sample A
    - Http Sample B
    -- HTTP Header Manager

    请求过程中,提示乙的没有生效,然后我就将乙中的配置移到的甲中,就对了。
    所以, HTTP Header Manager在工程的树结构中,跟sample的关系是怎么样的?

    2、老师在编写脚本过程中,使用了很多jmeter支持的内置函数。我上网查了下,还挺多,要都研究一遍还是费神。想请教老师,哪些是您个人日常工作中经常用到的,或者常见的,我们好针对性的优先学习下。

  • docker 实战-2020215 at February 15, 2020

    有几个问题请老师看看:
    1、Dockerfile使用ADD命令,如果源文件路径是绝对路径,就提示找不到文件。我把文件拷贝过来用相对路径也可以解决。这里面的原理老师可以说一下么?

    2、我容器跑起来了,但是mvn构建需要下载很多依赖包,这下载过程就很漫长了,这种漫长自然是影响效率的。在实际工作中有什么办法可以减少这种下载依赖包的做法?我能想到的,挂载本机(最好是挂载NFS共享目录.m2目录)到容器,所有构建的容器都用一个公共本地仓库。想听下老师的看法或者具体实践的做法。

    3、docker内的文件用root,挂载本地非root账户后的账户也是root。所以,以后会讲这方面的内容么?

  • docker 实战-2020215 at February 15, 2020

    Dockerfile

    FROM centos:7
    RUN curl http://mirrors.aliyun.com/repo/Centos-7.repo -o /etc/yum.repos.d/CentOS-Base.repo
    && yum makecache && yum -y update && yum install -y git
    ADD apache-maven-3.6.3-bin.tar.gz /usr/share/
    ADD jdk1.8.0_71.tar.gz /usr/share/
    ADD start.sh /root
    ENV JAVA_HOME=/usr/share/jdk1.8.0_71/
    ENV MAVEN_HOME=/usr/share/apache-maven-3.6.3
    ENV PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin:$PATH
    ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    WORKDIR /root
    ENTRYPOINT [ "bash", "/root/start.sh" ]

    挂载脚本start.sh

    #/bin/bash
    #代码下载或更新
    if [[ -e /root/techUI ]];then
    cd /root/techUI
    git pull
    else
    git clone https://github.com/ycwdaaaa/techUI
    fi
    #Run Test
    cd /root/techUI
    mvn -DtestSuite=testng-parallel.xml test

  • 作业一

    作业二

    public class WeworkDemo {
    public static final String getTokenURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken";
    public static String token=given().param("corpid","ww5cbd44b381f7ec39").
    param("corpsecret","FDZznCFjLRmxUfw7mXO0i0OQI5_frl3wkPDZIUlwOhg")
    .when().get(getTokenURL).then().extract().path("access_token");
    //创建部门
    String department_create="https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token="+token;
    //查询部门列表
    String department_list="https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token="+token;
    //删除部门
    String department_delete="https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token="+token;

    //通讯录管理
    @Test
    public void testCreateDepartment(){
    System.out.println(department_list);
    HashMap<String,String> data=new HashMap<>();
    data.put("name","A接口创建部门");
    data.put("parentid","2");
    data.put("name_en","TestCreatDepartment");
    given().contentType(ContentType.JSON).body(data).when().post(department_create).
    then().log().all().statusCode(200)
    .body("errcode", equalTo(0));
    }

    @Test
    public void testDeleteDepartment(){
    // 练习取得id,不是必要的
    Integer id;
    id = given().get(department_list).path("department.find {it.name=='A接口创建部门'}.id");
    //验证删除,不严谨
    if(null != id){
    given().param("id",id).get(department_delete).then().body("errcode",equalTo(0));
    }
    }

    @Test
    public void testGetDepartment(){

    given().get(department_list).prettyPeek();
    }

    }

    作业三

    https://github.com/windanchaos/Java_Basic/tree/master/src/hogwarts/interface/src/main/java/tag

  • 2019年,一字足矣:穷

  • 作业:
    https://github.com/windanchaos/Java_Basic/tree/master/src/hogwarts/webAuto/POM

    单纯的想写个自动遍历,然后写了很久,踩了很多坑,研究了很多定位手段(学会了用xpath的语法,在webelement中找webelement)。
    写了个自动点开所有层级的代码,不用提前知道部门结构和层级关系,全部点开。思路很简单,HashSet记录点击过的元素,在页面更新后,重新遍历所有部门的展开按钮,点击过的不再点击。虽然还不够优美。。嗯分享下了。其他增删改查的……嗯,小菜了就

    package hogwarts.webAuto.POM.page;

    import org.openqa.selenium.By;
    import org.openqa.selenium.ElementNotInteractableException;
    import org.openqa.selenium.StaleElementReferenceException;
    import org.openqa.selenium.WebElement;

    import java.util.HashSet;
    import java.util.List;

    public class ContactsPage extends BasePage {
    HashSet<String> clickHistory = new HashSet<>();
    /*
    自动遍历点开所有层级的数据的函数入口
    */

    public ContactsPage showAllGroup() {
    //初始化,会默认展开2级部门,从这里开始遍历
    List<WebElement> tree = driver.findElements(By.xpath("//ul[@class='jstree-children' and @role='group']"));
    for (int i = 0; i < tree.size(); i++) {
    showGroup(tree.get(i), clickHistory);
    }
    return this;
    }

    public ContactsPage showGroup(WebElement element, HashSet<String> clickHistory) {
    List<WebElement> groups = getGroups(element);
    int history = clickHistory.size();
    if (null != groups) {
    for (int i = 0; i < groups.size(); i++) {

    //等待展开按钮
    waitClickable(groups.get(i).findElement(By.xpath("child::i")), 5);
    //展开按钮同级的a标签文本(部门名称)
    if (!clickHistory.contains(groups.get(i).findElement(By.xpath("child::a")).getText())) {
    //放入点击历史
    clickHistory.add(groups.get(i).findElement(By.xpath("child::a")).getText());
    System.out.println("点击:" + groups.get(i).findElement(By.xpath("child::a")).getText());
    //展开按钮可见则点击
    if (groups.get(i).findElement(By.xpath("child::i")).isDisplayed())
    groups.get(i).findElement(By.xpath("child::i")).click();
    System.out.println("记录历史大小:" + clickHistory.size());
    }

    }
    //当点击历史不再增加,则表明点击完成,循环不在进行
    if (history != clickHistory.size()) {
    //因为结构变化,需重新调用主函数
    showAllGroup();
    }
    }
    return this;
    }

    private List<WebElement> getGroups(WebElement element) {
    List<WebElement> group = null;
    //查找所有部门
    waitVisibable(By.cssSelector("[aria-level]"));
    try {
    group = element.findElements(By.cssSelector("[aria-level]"));
    } catch (StaleElementReferenceException e) {
    }
    return group;
    }

    }

  • 我离测开有多远? at December 10, 2019
    Author only
  • 我离测开有多远? at December 10, 2019

    这段时间出去面了几次,大致知道自身问题所在。我来对前一阵的焦虑和疑惑做个简单阶段思考,虽然留言中大部分人没有回答我的提问,而聚焦于其他方面:
    1、关于学习偏计算机基础的问题,我认为是必要的,但是不能过于纠结在计算机基础方向。考虑的是就业和自身能力匹配度,市场需求是什么就聚焦什么,计算机基础学个七七八八就可以了。所以,我的学习方式虽然很夯实,但是和市场脱轨,经不起市场的考验。
    2、学习研发的开发框架这个问题。我觉得也没有必要像研发一样弄懂每一个细节,定位不是研发,也不并深究,但是要懂一点。
    3、公司内部的持续集成方向。我目前觉得真没有必要去为了技术而技术,环境倒逼内部的技术革新是资源最优的方式,否则会出现过渡浪费资源的问题,而且就算弄出来,也真的不是实际上用的那样子。
    4、学习研发的技术栈体系确实是缘木求鱼。
    5、java和python都有自己的生态,java要为主语言,python打辅助。

    测试是个干杂活的岗位,懂得要多,干的精自然就有难度,有机会做研发就别做测试或者测试开发,直接研发是最好的方式。实在没有办法退而求其次,就聚焦一些,聚焦一些。不要到处撒精力,人生苦短,真心的浪费。不一定对,但可以参考。对了,我双12报名学院了。

  • 我离测开有多远? at December 10, 2019

    我没有去参加付费的培训,不过我看过一些他们发布的公开课,公开课有些内容还行。看个人的想法了。

  • 支持一交

  • 知足吧,问你还有补充的面试官很给面子了

  • 我离测开有多远? at October 14, 2019

    呃,我认同你的说法。其实我核心的想法是提高用代码解决问题的能力。鉴于目前岗位,写代码的机会不是很多,想找专职写代码的岗位,比如测开、运开啥的,天天写,提升可能会更快。像前几年还在测试岗的时候,时间精力完全淹没在业务测试里,各种加班。目前的想法比较明确,基于对公司业务理解,学以致用,多写代码吧。

  • 我离测开有多远? at October 14, 2019

    考过了中级软件设计师。。。高级证书啥的现阶段就算了,耗神费力,对找工作帮助也不大

  • 你的问题已经不是(python manage.py runserver localhost:8023) & 这个了,而是你用这个以后为什么起不来。
    (python manage.py runserver localhost:8023 > log.log) & 看看会不会在目录下生成日志,日志内容是什么。

  • 我离测开有多远? at October 11, 2019

    你说的四个步骤中,一二步我已经走了。现在真的有刀需磨。其实还内心浮躁了一点,现在公司的监控还有发力的地方,可能是带了偏见以及前几年高强度被压榨过,内心没有去审视代码能力进阶需要结合公司实际。谢谢建议,我觉得对大多我这种情况的都适用。

  • source /etc/profile
    cd /root/testdj
    (python manage.py runserver 10.188.56.15:8000)&

  • 那我再给你一个命令
    (python manage.py runserver localhost:8023) &
    包括第一个命令,逻辑是让jenkins执行命令的进程假装结束(第一种是后台执行,把标准输出到空;第二个是fork一个子进程,就不管了)。还是搞不出来的话,你就再想办法咯。。写service也可以