• 等你遇到了一个想提拔你为测试经理的领导就行了,其他的都不重要。

  • 请问买了票但因为疫情的原因没有去会场,后续大会的视频是自己找相关工作人员提供吗?

  • 我觉得还是得根据线上 Bug 来反推问题的根源,到底存在哪些问题,从整体角度去看应该解决哪些问题,优先解决哪些问题。线上 Bug 多必定是多个环节都有问题导致的,譬如楼上有人提到的测试左右,缺乏接口自动化在所有问题当中的占比可能很小,这就意味着即使搭建起了接口自动化,也仅仅是解决了一小部分问题,最终还是会有大量 Bug 上线。

  • 来自老板的死亡拷问! at 2020年06月30日

    提到回归测试,有些公司要是不出点回归覆盖率不够甚至没有回归导致的问题,管理层是不会意识到这是一个问题的,更多的会跟你说,你说自动化测试很重要,但我们现在没有也没出什么问题啊。。。
    遇到这类情况,想要在不出问题的情况下改变一个人的思想观念,很难

  • 1.提升回归测试效率
    2.节省人力
    3.降低手工回归测试带来的人为出错风险
    4.提升个人开发能力 = 提升个人价值、行业竞争力

  • 经费有限的话就用第三方兼容性测试平台吧,没办法的办法。假如是为了兼容性测试而自购那成本太大了,不光要覆盖机型,还要覆盖系统版本。同样的机型不同的系统版本,也会有不同的问题。
    或者像我说的,老板的机型和优先级更高用户的机型先保证,其他的随缘😂

  • 个人觉得不同的业务特性判断的规则也不一定。比如交易类 APP,涉及到入金的,那么申请的机型就不能单单只参考使用率,要是我的话优先级应该是:老板的手机型号 > 入金占比最高的那批用户机型 > 使用占比较高的机型

  • 业务性强的接口,肯定是要手工写的。举个例子,一个文章列表接口,测试点会有很多,1.随机抽几篇文章核对内容 2.核对总数 3.检查排序方式。。。等等 类似这样的用例我是想不出通过自动化生成的可能性。
    能通过技术等手段提升效率最好,假如不能等话还得老老实实手动写,毕竟接口自动化的目的是发现问题,覆盖率达不到那原始目的就很难达到,这样的话还不如什么都不做,我是这么认为的。

  • 楼主可以考虑一下阿里的 PTS,付费的,但自己折腾环境同样费钱还费时,可以根据性价比权衡一下。
    另外我觉得 10 万用户,一台电脑 2000=》需要 50 台,不能这么算。
    10 万用户并发具体指 1s 内 10 万用户集合在一个时间点同时访问呢,还是总共有 10 万用户只需要在特定时间内(比如 30 秒内)完成 10 万用户的登录行为就行了?
    我想你说的 2000 指的线程数;假设 1 次登录耗时 0.2s(响应时间),1 个线程在 1s 内(无限迭代)可以完成 5 次登录,那么即使在 1s 内完成 10 万用户的登录也只需要 10w/5 = 2w 个线程数,每台压力机能支撑 2000 线程的情况下大约需要 10 台来完成。

  • 确实,假如按 5s 作为标准的话确实很不合理,受教了。刚接触性能测试不久,还处于消化基础概念的阶段😂

  • 😀 感谢赐教😀

  • 感谢回复这么细致的分析。确实你提到的许多细节先前都没有考虑到,对业务准确的解读是为了得到更准确的指标值,单单用公式硬套出来的指标与实际情况肯定会有比较大的偏差,受教了😀

  • 感谢。活动场景有些变化😀 人数变为 20 万,时间持续 5 分钟。
    我自己的计算公式是参考另一篇文章的,计算公式中的分子乘了下完成事务所需的接口数,但我觉得你的才是正确的,假如乘以接口数我的理解是计算出来的是 QPS 而不是 TPS。
    应该是:TPS=(200000*80%)/(5*60*20%) = 2666
    不知道我理解的有没有问题

  • https://www.cnblogs.com/NaCl/p/10172142.html 《Appium 的三种启动方式》
    刚开始用 Appium 自带的方法来启动,发现死活找不到设置 bp 端口的方法,所以后来改为第二种方法来实现了。

    public class AppiumDriver {
        /**
         * 启动Appium服务
         * @param port
         * @param bp
         */
        public static void startAppiumServer(String port,String bp){
            CommandLine cmd = new CommandLine("/usr/local/bin/node");
            cmd.addArgument("/usr/local/bin/appium");
            cmd.addArgument("-a");
            cmd.addArgument("127.0.0.1");
            cmd.addArgument("-p");
            cmd.addArgument(port);
            cmd.addArgument("-bp");
            cmd.addArgument(bp);
    
            DefaultExecuteResultHandler handler = new DefaultExecuteResultHandler();
            DefaultExecutor executor = new DefaultExecutor();
            executor.setExitValue(1);
    
            try {
                executor.execute(cmd, handler);
                Thread.sleep(10000);
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 关闭Appium服务
         */
        public static void stopAppiumServer() {
            Runtime runtime = Runtime.getRuntime();
            try {
                runtime.exec("killall node");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  • 说明小程序进程就是 com.tencent.mm:appbrandxx。
    建议清理下手机环境然后再试试,因为这问题我遇到过,小程序自动化一直用"com.tencent.mm:appbrand0"来切换 webview,突然有一天报错切换不了,并且发现 chrome://inspect/#devices 无法调试小程序的 webview(之前都好好的),最后清了下环境就可以了。

  • 想问下你是怎么确定进程一定是 com.tencent.mm:tools 的?
    我的方法:
    1.打开微信后执行 adb shell ps | grep tencent,打印出进程列表
    2.打开小程序后再执行一遍 adb shell ps | grep tencent,然后看看多了哪些进程
    3.最后执行 adb shell dumpsys activity top | grep ACTIVITY 看下当前进程,记录下 pid,然后和第二步多出来的进程做比较,存在交集的那个就是小程序的进程

  • 照你这么描述,我和 1 楼一样也怀疑 androidProcess 不对,不然 page_source 怎么会包含发现页面的内容,建议还是检查一下被测小程序的进程是不是你写的那个,比如我这边小程序的进程就是 com.tencent.mm:appbrand0。

  • 假如切换 webview 没报错的话,需要切换至包含期望元素的 handel 才能找到对应元素,LZ 看看是不是这个原因。
    下面是我自己切换 handel 的方法:

    /**
         * 【WebView】切换至包含指定元素的WindowHandle
         * @param element
         */
        public static Boolean jumpToWindowHandel(WebElement element){
            Boolean isHave = false;
            for(String handle : BaseCase.ThreadDriver.get().getDriverWX().getWindowHandles()){
                BaseCase.ThreadDriver.get().getDriverWX().switchTo().window(handle);  //遍历handel直到找到相应元素
                waitElement(10,element);
                try{
                    if (element.isDisplayed()){
                        System.out.println("找到对应元素;当前WindowHandle:" + handle);
                        isHave = true;
                        break;
                    }
                }catch (NoSuchElementException | StaleElementReferenceException n){
                    System.out.println("未找到对应元素;当前WindowHandle:" + handle);
                    isHave = false;
                }
            }
            return isHave;
        }
    }
    
  • 每次启动太浪费效率了,我是这么弄的,LZ 可以参考下,有不足之处也可以一起讨论。以 TestNG 为例:
    1.每一个测试类(class)对应一个页面的测试点(methods)
    2.BeforeTest:一般都是启动程序进入首页
    3.BeforeClass:从首页进入被测页面(每个测试类需要单独写;进入前检测是否在首页,假如不是则重启 APP 进入首页)
    4.BeforeMethod:检测是否停留在被测页面(防止部分功能页面跳转但由于 Bug 或者不稳定导致无法返回,比如分享微信),失败 3 次则重启并重新进入被测页面
    5.每一个 Method 执行完后都必须返回被测页面,返回的方法单独在 Method 里写
    5.AfterClass:返回首页(因为页面路径不同返回的方法每个测试类需要单独写)

  • 有条件的话找开发帮忙或者自己动手加 id,通过唯一的 id 来定位元素是最靠谱的。

  • 多谢提供思路。决定把返回首页的步骤放在@AfterClass里,每个 class 中的 case 执行完后返回首页,然后继续执行下一个 class 中的 case,假如返回失败就重启 APP。😀

  • BeforeTest 相当于每个用例(@Test下的方法)执行前都会执行一次,而我目前只会在切换页面(class)的时候才会重新启动。

  • 没用 python 写过就不瞎说了,但建议你可以参考下 https://github.com/richshaw2015/wxapp-appium

  • 我也遇到过同样的问题,我是将 cap.setCapability("androidProcess", "com.tencent.mm:appbrand0"); 替换为 chromeOptions.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");之后问题就解决了。

  • 请问解决了吗?我也遇到同样的问题,Chrome 和 Chromedriver 版本是匹配的