• 在使用 javassist 时,调用 cc.toClass() 方法就拿到类实例了,你再好好看看吧,去敲了试试

    Class executor = cc.toClass();
    
    1. 是基于 testNG 运行的,不过不是 testNG 管理用例,用例在一个 json 文件中
    2. 只有一个 java 文件,作为执行器存在,所有的用例都在 json 文件中
    3. 没有使用 testNG 的配置文件,运行方法:
    TestNG testNG = new TestNG(false);
    testNG.setSuiteThreadPoolSize(1);
    testNG.setThreadCount(1);
    testNG.setTestClasses(new Class[]{TestExecutor.class});
    testNG.run();
    
  • 可以的,使用 cglib 动态生成的,可以通过 Class.forName 进行加载,也可以借助 javassist 进行动态生成类,参看我的另一篇文章:https://testerhome.com/topics/18811

  • 你是说这个吗?

    testNG.setThreadCount(Runtime.getRuntime().availableProcessors() + 1);
    

    没达到效果噢

    public class Demo1 {
    
        @DataProvider
        public Object[][] getData() {
            Object[][] objects = new Object[3][3];
            for (int i=0; i<objects.length; i++) {
                for (int j=0; j<objects[i].length; j++) {
                    objects[i][j] = i + "-" + j;
                }
            }
    
            return objects;
        }
    
        @Test(dataProvider = "getData", threadPoolSize = 4)
        public void runData(Object... objects) {
            System.out.println(System.currentTimeMillis());
            System.out.println(Thread.currentThread().getName());
            for (int i=0; i<objects.length; i++) {
                System.out.println(objects[i]);
                ThreadUtils.sleep(100);
            }
            System.out.println();
        }
    
        public static void main(String[] args) {
            TestNG testNG = new TestNG(false);
            testNG.setThreadCount(Runtime.getRuntime().availableProcessors() + 1);
            testNG.setPreserveOrder(true);
            testNG.setTestClasses(new Class[]{Demo1.class});
            testNG.run();
        }
    }
    
  • 嗯,需要再结合业务深入思考一下,
    另外从接口请求类型角度考虑,
    比如,有 AB 两个接口,当这两个都是 GET 接口时,视为同一种场景,
    总的来说,需要把总的量给控制在一定范围内来跑

  • 治本方法:

    1. 相对坐标法,就是获取这个框,再根据手机分辨率,算出各个数字的百分比位置
    2. 图片识别,在识别时增加一个模糊参数,即匹配度达到 70% 以上就可以了,可以提高匹配的精度

    治标方法:

    1. 不用键盘输入,尝试其他的输入方法,比如 adb shell input text ,adb shell input keyevent 等
  • 我试了一下,未达到并行执行的效果,它是串行的,我的测试代码如下:

    @DataProvider
    public Object[][] getData() {
        Object[][] objects = new Object[3][3];
        for (int i=0; i<objects.length; i++) {
            for (int j=0; j<objects[i].length; j++) {
                objects[i][j] = i + "-" + j;
            }
        }
        return objects;
    }
    
    @Test(dataProvider = "getData", threadPoolSize = 4)
    public void runData(Object... objects) {
        System.out.println(System.currentTimeMillis());
        System.out.println(Thread.currentThread().getName());
        for (int i=0; i<objects.length; i++) {
            System.out.println(objects[i]);
            ThreadUtils.sleep(100);
        }
        System.out.println();
    }
    
  • 嗯,之前有想过,忘记为啥没去试这条路了😅

  • 嗯,你说的对,在本例中,并没有使用到动态代理的特性,去增加前置、后置、或环绕什么的方法,准确来说是动态生成了一个子类。
    多线程来实现是指下面这个参数吗?从注解来看,是跑这个方法多次

    public @interface Test {
      /**
       * The size of the thread pool for this method.  The method will be invoked
       * from multiple threads as specified by invocationCount.
       * Note:  this attribute is ignored if invocationCount is not specified
       */
      public int threadPoolSize() default 0;
    }
    
  • 噢?说说看,怎么用的?我学习下

  • 这位大神,你在讲什么?

  • 跟青云有关系,现在都用的云服务,然而云服务商相关的配置功能并没有到位

  • espresso 是支持 webview 的啊

  • 嗯,我问问开发去

  • 嗯,看请求头是有这个参数的,可能要问下后端同学了,可能服务端未配置

  • HeroTestly 框架设计 at 2019年04月08日

    是啊,上面提到的场景,不是有先后关系吗?也不存在并发执行,所以根本不需要用 ThreadLocal,给我的感觉,就是为了用而用啊。至于支付业务中的应用,得看具体场景,再具体一点,嘿嘿

  • HeroTestly 框架设计 at 2019年04月08日

    这个感觉用一个全局 Map 就可以了啊,还是没领会到用 ThreadLocal 的好处。☺
    据我理解,ThreadLocal 是多个线程一起跑的时候,对同一个变量,每个线程希望有自己的一份数据时,才用到。

  • HeroTestly 框架设计 at 2019年04月08日

    举例说明一下,使用 ThreadLocal 存储多接口公用数据的场景来

  • 对数据进行统计分析啊

  • 感谢推荐👍
    之前下过 anyproxy,感觉不是太友好,可能我还没摸熟😜
    browsermob 就先踩个坑,暂时还没有那么多精力搞脚本,主要还在搞业务的功能测试

  • 这里面还有 jquery 的写法啊,有意思

  • 嗯,看过你的帖子了,论坛中唯一的一篇,想要了解一下,为什么换 AnyProxy 的?
    目前来看,拿到 Har 数据,是比较方便解析的,其中还有一些性能数据后续可以用起来

  • 看上面的问题分析应该能清楚啊,通过 appium 获取的坐标在屏幕外面,获取 webview 控件的宽高,进行等比例缩放,这是当时的方法,现的的话,可以通过 espresso 点击

  • 我理解的话这个 web 和移动端应该差不多

  • 嗯嗯,可以搞的,我也是基于 okhttp 封装的请求😁