• diffy 是个好工具啊,界面也不错。应该可以搞定我的问题,即便搞不定二次开发的工作量也比较小,主要是这测试结果是在线的很赞。

  • 接口返回值可以包含多个表的数据,再说接口可能有缓存的,都不调用 DB 的数据,直接测试数据库是不行的。

  • 不了解这么高端的工具。

  • beyond compare 命令行没用过, 能把 JSON 格式化后再对比吗?

  • 这个地方主要是对比测试,两个环境海量接口返回值的对比测试。
    Json Schema 明显是没做的……你的建议很好,不过很难推行。

  • 不仅仅是测试返回码啊~返回值的格式,甚至大小写匹配,返回值的 key value 都要一致的。

  • 我过后也介绍一些我自己写的在线 Jmeter 用例管理吧,点我头像进 github(帮忙点个星星最好了多谢)。没想到这还能整个公司出来。

  • 学习了。
    不知道你是第几面产生这些感慨的,面试要招的人是最适合这个岗位的人,而不是技术能力最强的人,所以面试题往往点到为止,你符合岗位要求就行了,如果你要的钱比较多,那么会问一些比较深入的看看你是不是把面试官当 SB,不是说你技术最牛钱就最多的,主要还是看是否适合这个岗位(技术只是一个大的方面)。
    再多说几句吧,你写的这几个问题挺对我胃口的。
    首先你这 4 个问题,其实实际运用中意义不大,开发都很少用,更不用说测试了。
    1.3 问题是锁的,多线程的,但是现在服务器都是分布式的,使用的都是分布式锁,单进程内讨论锁和多线程意义不大,脱离实际。
    2.问题是线程池,意义很好,不过单进程内再开线程池,意义也不大,现在都是分布式,一般是队列实现任务分发,仍然是跨进程的。
    4.问题是垃圾回收机制,讨论的是各种垃圾回收机制的优缺点,可是你应该也了解,CMS 一旦出问题就是致命的,而多线程回收是默认的,你讲究这些问题,理论研究很好,实际应用上谁能让你上 CMS 呢。更何况 CMS 提高性能也并不是很明显。
    你能熟悉 JVM 到这个深度自然非常好,但对于测试工作是锦上添花并非雪中送碳,希望能理解。

  • 我才刚买《腾讯 iOS 测试实践》,还没到货呢惭愧。
    我和楼主不一样啊,我是 Java,mysql 这类书一定要精读的,测试书才是当工具书看或者 google 了。

  • 感谢肯定,前端我还有太多东西需要学习,向你学习。

  • 未知的未来,努力前行。 at February 08, 2018

    谢谢。
    AI 不像测试,测试还可以讲是质量保证,是软件所必须的。AI 可不是必须的。

  • 未知的未来,努力前行。 at February 08, 2018

    说技术,AI 和测开,对技术的要求都是无止境的。
    只学 AI 是够呛的,原因很简单:
    1.AI 人才给炒热了,小公司接不起普通的 AI 人了都,年薪好几十万一个普通的,不容易接。
    2.上点规模的非 AI 方向的公司,也不特意搞 AI,AI 更向是噱头,企业生存还是第一位的,AI 能否提高利润是需要评估的,何况 AI 人才那么贵。这样的公司更希望内部大数据人才自我提升到 AI。这样的公司更希望是和专业的 AI 公司做合作。
    3.AI 的基础即大数据高度集中在几个知名公司手里,很多甚至全部的热门数据都在人家手里,其它打算专门搞 AI 的公司,难为无米之炊,前途漫漫,更多的是提供服务。
    4.说到提供服务,由于当前是云时代,云上可以直接提供 AI 服务,楼主可以关注一下腾讯云,已经将 AI 的好几十个算法平台化了,只要你提供数据,腾讯云自动给你训练出 AI 的结果。甚至你都没有数据,只有想法,腾讯云上的大数据也能给你弄出来。我相信阿里云也会马上出现类似功能。
    以上,
    小公司,请不起 AI;非 AI 方向公司,不自己搞 AI 希望寻求合作;AI 方向公司,人才越来越多门槛越来越高;最后,云有希望一统 AI 天下,赢者通吃。
    那么楼主的路越发的艰难了,但是比较清晰:
    1.专心搞 AI,如果让 AI 当饭吃,肯定要小有所成。
    2.从事 AI 相关工作,最好是到大数据和 AI 牛逼的公司去,如 A 如 T 如搜狗如讯飞如 H 等。
    3.一定要学大数据相关知识,自己要有造血的能力。
    4.一定要有能带路的人,能带你学习,内推到你去知名公司的人。
    带来的问题:
    1.楼主从 0 开始,难度是我难以想象的。AI 对数学的要求极高,同时需要实验室级别的环境来联系算法,闭门造车是非常艰难的。
    2.楼主年纪在这,分析到这里可能大家也看到了,去小规模 AI 公司基本是没有希望的,只能去牛逼公司这条路才能行,楼主年纪让这成为不可能的任务,不可能近 40 岁的人和不到 30 岁的人拿一样的钱,领导都比你岁数小,是被刷荣誉去了吗。
    3.靠 AI 进小公司拿较低薪水,然后精进 AI 和大数据然后在小公司混到风声水起。这种是幻想。a.需要多少年才能到这个地步,我预估得个 5 年。b.这条路比你现在的测开的路好吗?我认为不见得。
    一些想法:
    1.不要以为测开没有技术含量,测开和大数据一样要求技术高度和广度,而 AI 和大数据孰优孰劣还说不清呢。
    2.测开都搞不好,去搞 AI,本身就是没有底气的事。
    3.本科 top10 是好事,但是年纪的增长是无法避免的。
    4.如果没有带路人,纯脱产自学,无疑拿头撞墙。

  • 没搞过 nodejs,我先看看源码再说吧。
    这个平台有借鉴意义,需要学习。

  • 多谢指点。
    你在 issue 上提的问题我看了,Locust 的作者解决不了你提的问题。

  • 这篇文章粗略看了一下,说实话,他讲的和没讲一样,他基本没说性能测试的痛点,是每个都夸了一下。
    我怀疑他是否真正做过性能测试。
    如果我分析的话,会接地气一点儿吧。

  • 我会稍微介绍一下的。

  • 你说的有道理。不过我还没写网页版的性能测试平台呢,这里仅是在看 Locust。
    @debugtalk 他阿里同事实现了 GO 语言的 Locust 客户端 boomer,我未来还会继续分析 GO 语言的可行性的。boomer 的源码我也在学习。

  • 我写的是 Locust 的你竟然来问我 Jmeter 的问题……让我一阵心酸啊。
    我开始以为你问的是 Threads(users) 的数量,后来仔细看了一下,是问的 sampler 即用例中的请求数。
    最终能设置多少个 sampler 确实是依赖内存的消耗的,这里解释一下。
    Jmeter 编辑用例增加 sampler 的时候,用例是会保存成 jmx 用例文件的,jmx 用例文件中即包含了每个 sampler 的信息。
    而 Jmeter 性能测试时,会将正常状态(没有灰化隐藏)的 sampler 信息(很多个)加载到本身的内存中,确切说是 JVM 的 Heap 中,用来当做原始测试数据。
    那么这会遇到第一个内存障碍,如果你的有效的 jmx 用例文件就 100MB,Jmeter 的内存 Heap 才设置了 50MB,那这个用例可能是加载不起来的。
    性能测试时,由于不能污染原始的内存中的 jmx 文件,比如做参数化等细节,每一个 jmx 会被复制出去,由于具体 Jmeter 是使用线程来实现压力机制的,所以复制的 jmx 文件会到线程的内存中,这次是在 JVM 的永久代中,而每个线程的内存可以使用-Xss 参数配置。
    那么这回遇到第二个内存障碍,如果 jmx 有效的比较大,而-Xss 设置的比较小,那么性能测试时也是有可能失败的。
    注意:
    1.Jmeter 加载/运行 用例/sampler 时,如果遇到问题,都会抛出 JVM 级别的异常的,肯定是会打到日志上的,这部分定位问题十分简单,而解决也比较简单,增加内存就好了。
    2.真正的用例在内存中不会像 jmx 文件那么大的,Jmeter 会提炼用例数据的,内存占用会比文件占用的空间小得多。(具体提炼多少需要看源码,这里无法尽述)。
    总结:
    sampler 多少确实是内存决定的,内存够大就没事,有问题就看日志,注意调整-Xms -Xmx -Xss 参数。

  • 1.你到底什么理解,我到底什么误解,你说出来,想喷我就勇敢点儿。
    2.“locust 更新的少可能是因为没有太多高并发场景能达到 locust 应用级别,jmeter 就足够了”。这句暴露了你的实力。我可以这么讲,Jmeter3.3 目前的功能,甩开 locust 太远,基本就没有 locust 什么事情了。locust 的作者是有自知自明,不更新很明智。

  • 你直接用 Jmeter 就都有这些功能了。

  • 号前段时间丢了,导致一直挖坟……
    楼主是很有激情的,一直在不断解决问题的路上,看你搞 docker,服务器监控,那就是把运维的活也干了。
    测试开发的工作还是比较杂的,我的观点还是测开做的都是开发没时间搞的事情,比如应该自测阶段完成的用例,比如整个流程的串通,然后测开闲下来的时候还要做各种工具,把开发没时间搞的事情做的更高效。
    那么测试面对的,比开发接触的要广的多很多,同样工龄的开发和测试,接触的肯定不一样,不同的语言,比开发多得多的工具,运维工作,很多开发集合起来的业务,还有你说的 bug 平台,各种用例平台,性能测试平台,云平台等等。
    工作就是这样,楼主也一直在这条路上有激情的奔跑着,很棒。
    如果说技术的 x 轴是广度,y 轴是深度,那么测试偏向于 x 轴,开发偏向于 y 轴。(x,y) 的值是你的技术能力。
    在此我就是希望楼主多关注一些深度的东西吧。
    2 年就到管理层,甚至让手下面试你,各种嘲讽,至少说明,这个团队的能力真的太弱了,你说的,如果每一个人专注不同的业务,不同的技术,那么问住你是分分钟的事情,这说明,或者他们没有你深入,或者他们就没深入,或者你们就没啥值得骄傲的东西。你们团队每个人的特点很弱,也就是说,人员太弱,没有技术深度。
    当然你都跳出来了,希望楼主能感受到更大的挑战。
    从楼主的字里行间也看出来了,想做创业者,也就是要带领一些人,这没啥不好,不是说非得技术如何如何才有资格带人,这是错的,带人也是要一步一步学的,这没什么。
    我只是想说,希望楼主在热心于技术的广度,带人的热情,也不要忘了技术的深度,多看一些底层的东西。
    底层的东西并非多么难,你有代码基础,再看一些比如 CPU,磁盘,计算机原理,各种协议原理,简单算法,linux,数据库原理,缓存原理,数据结构,应该就差不多了。
    楼主的经理也在激励着我,共勉。

  • 我还以为你弃用 Jmeter 是业务不对头呢……对接口测试,现阶段的 Jmeter 比 httprunner 好多了。你还来了一句操作不方便……别误导别人了好不好。说些肯定能遇到的:httprunner 面对循环重复请求要怎么做?断言的正则表达式怎么做?出了问题怎么 debug?怎么搞定时器?不是 http(s) 协议怎么办?遇到需要校验数据库/缓存变动,只需要一个简单的 SQL,并不是 http 请求怎么弄?怎么实时看到访问结果,如果有 1000 个请求前 2 个就失败了而不需要执行后面的 998 个以免脏数据 httprunner 要怎么做?
    这些问题你要打开 IDE,自己造轮子了?
    我都不用说 locust 的测试性能有硬伤,协程 + 脚本语言性能的硬伤,上面这些你都搞不定,要二次开发。
    别简单一句这些更好,你到底做没做过接口测试,我都怀疑。
    如果是你业务不符合,就说业务的问题,别扯工具能力。

  • 呵呵了,我能发现这个 bug 你就庆幸吧,要不然上线出了问题,你更惨,除了加班纠正,如果有错误数据更完(内存 bug 等更是致命伤)。
    我才赚多少钱,我可不陪你加班。
    这种 bug 就是你自己都没验过功能,你要是嫌不好改发邮件,抄送你们项目经理,抄送我老大。

  • 楼主这套框架很值得学习借鉴,好东西。
    测试数据的痛点,docker 的学习,楼主加油。

  • 正好我也有需求要做 Jmeter+ant+Jenkins 的自动化接口测试。
    不同的是我的用例信息保存在数据库里,数据来源不同,搞了一天。

    楼主最主要的细节没写:获取测试数据对应行。
    我的做法是:获取 count 循环数量的同时,获取数据的 ID 主键集合,用逗号分隔保存在一个变量里。
    获取测试数据对应行时,同时保存及设置用户变量 index,index 从 0 开始计数。
    index 是 ID 主键集合的索引,由于已经根据逗号分隔过了,很容易取到。
    再根据得到的 ID 主键来获取数据行,完成用户参数的初始化。

    再说一下,其实报告的模板我没修改得像楼主这么麻烦,我就是把 beanshell samper 的名称改成了空格,自动就过滤掉了。

    还有 if 逻辑控件,注意是 == 号。

    有时间我也出一个 JDBC 的接口测试实践。