• 看了眼 git,if else 嵌套感觉多了点。。

  • 问一下楼主,我现在用的应该还是 jenkins1.0,也可以通过在一个 job 配置里添加” 构建后操作”,来触发下一个 job 的执行,同时可以创建 pipeline 视图来查看多个 job 的组织拓扑。请问使用效果上跟 2.0 的 pipeline as code 有什么区别?

  • 最近刚好在学习 docker,楼主,貌似 bridge 模式下是可以给容器分配固定 ip 的,只要自己创建私有网络,不要用默认的 docker0。另外楼主说的 none 模式,让跨宿主机的网络互联,这个后续要好好实践下,我们现在都是把服务全部部在一台宿主机上。

  • def screenshot_error(param,*args,**kwargs):
        def decorate(func):
            def _screenshot_error(self,*args,**kwargs):
                try:
                    func(self,*args,**kwargs)
                except Exception as e:
                    self.driver.get_screenshot_as_file("error.png")
                    raise e
            return _screenshot_error
        return decorate
    

    你这段代码第一行的 def screenshot_error(param,args,kwargs) 里面的 args 跟 kwargs 根本不会起作用的。try 里面的语句 func(self,*args,kwargs) 用到的 args 和 kwargs 使用的是最内层的 def _screenshot_error(self,*args,*kwargs) 里定义的参数。

    我知道装饰器是可以带自身参数,你可以把你的代码改成:

    def screenshot_error(param, *ag, **kw):
        def decorate(func):
            @functools.wraps(func)
            def wrapper(self,*args,**kwargs):
                try:
                    func(self,*args,**kwargs)
                except Exception as e:
                    self.driver.get_screenshot_as_file("error.png")
                    raise e
            return wrapper
        return decorate
    

    然而楼主的问题不在于要多加一层

  • bridge? not briage

  • 你首先要想一下为什么要使用代理模式,它的使用场景是什么。通过这种代理,你可以在 invoke 方法中除了调用原方法外,可以再插入其它的操作,比如记录时间、日志,在方法调用前后检查端口、数据库等等,是一种面向切面的思想,类似 python 中的装饰器。当很多个方法有这些共有的操作的时候,你可以将方法抽象出来,然后将这些操作都放入 invoke 方法中,通过代理可以让多个被代理的方法都有同样的操作。

  • 没有授权过,我就在 TesterHome 发过此文。

  • 主要是配置 sonar.timemachine.period 这个参数。通过 sonar 面板的 Administration->General Settings->Differential Views 可以查看到有相关参数的介绍

  • windows 节点机用 execute batch command,linux 节点机就用 execute shell,然后就执行 java 命令就好了

    —— 来自 TesterHome 官方 安卓客户端

  • 个人建议哈,测试还是要多拓宽下自己的维度、视野,脱离岗位的束缚,这样才会更有竞争力。而且现在 DevOps 非常盛行,测试要做更多开发、运维的工作。你说的你们公司不能参与其中,这确实可能是一个比较大的限制问题。我们公司还是比较自由的,问开发要产品源码权限都是 ok 的,测试环境的搭建维护都是测试自己来负责。你可以从项目出发,先搞清楚整个项目的架构,各个组件关系之间的依赖,自己尝试动手去搭建一套新的环境。另外,自己可以深入产品源码去分析业务逻辑,测试过程中碰到问题,可以尝试自己通过业务日志、数据库信息、远程调试等方式自己去定位问题。

  • 谢谢指点。确实我对 mybatis 跟 hibernate 的使用不是那么地深,mybatis 只是简单地写过几个 demo。之所以用 hibernate 也是图个方便,它跟以前我使用的 python 的 django 框架里的 ORM 比较接近。不过你说的 mybatis 的缓存等这些功能 hibernate 里也都是支持的。后续有机会接触用 spring boot 或 spring mvc 去开发平台的话,再深入学习一下

  • 当然也不是说非不能用 dependOnMethod 不可,只要自己能合理地组织逻辑便于维护即可。 另外可以尝试另一种组织用例的方式,就是使用 priority。对于单线程执行的类,priority 可以指定用例执行的顺序。对一些清除环境脏数据的测试方法还可以加上 always=true 的注解。

  • 假设 B 接口一定要依赖于 A 接口先实现的话,我在实现 B 接口的测试类里,可以显示调用 A 接口,这样可以做到单独地去调试 B 用例,而不是一定要先执行完 A 用例再去执行 B 用例。关于数据库的操作,推荐一种思路哈,可以通过自定义注解的方式,在每个标记了注解的 test 执行前备份数据库,执行完后恢复数据库,有点像面向切面的 AOP 编程。关于数据准备,我这边的数据准备主要是指往 hdfs 写数据,可能跟你的场景不一定一样,你可以具体描述下你遇到的难点么?

  • 客气了,互相探讨

  • 小敏是最棒的!

  • 是的,是用 sonar。目前其实是全量的,但是我知道 sonar 支持增量的方式。另外说下,为什么静态代码检查没有好好去推,其实我觉得这个实践起来真的比较难。需要花心思去跟开发确定好规则,明白每条检查规则的必要性,确定哪些规则检查出来的问题必须要改。只有确定了这个,然后在项目中严格去执行,才能有成效。对于存在很多无效检查规则的规则集,扫描出来一些不是很准确的问题,然后笼统地推给开发改,开发肯定是不愿意去改的。另外我是建议楼主,将自己的测试代码用 sonar 检查一下,看看自己愿不愿改,体会下开发的心情。

  • 说下我自己的看法哈。场景化的用例,我觉得用例之间一定要解耦,不要相互依赖,每个用例应该是单独可重复执行的。我是非常不建议在用 testng 写用例时使用 groups 和 dependgroups 组织依赖的,万一执行过程中一个用例出错,会导致大片出错,对调试定位很不利。其次,还是那句老话,挖掘共性,将共性封装。其它的暂时也想不到那么多,如果你实践中碰到了问题我们可以再交流。

  • 你这个多加一层写得肯定有错误,两个 args,两个 kw 都混淆了。 内部完全无法识别装饰器函数自身的参数。

  • 我觉得是不是 parameterized 这个装饰器,它本身是没有返回的。把这个装饰器和截图装饰器的顺序换一下,然后截图装饰器里 func()前应该加 return 试试。

    —— 来自 TesterHome 官方 安卓客户端

  • MTSC2017 现场活动介绍 at 2017年07月17日

    感谢。 还有第一届的么。

  • MTSC2017 现场活动介绍 at 2017年07月17日

    思寒,给你 gmail 发邮件有十来天了,求前两届大会 ppt,公众号给的网盘已经过期了,求回应😓

  • 如果整套环境有非常多的后端依赖服务,不仅仅是一个 webserver 那么简单,尤其针对分布式的环境,不太可能在本地就能搭建起一整套环境。并且出现问题的环境的数据库跟本地的数据库也是不一样的。如果能直接在远程进行调试,是一种不错的选择。

  • #3 楼 @Tester_Ella 小敏真棒

    —— 来自 TesterHome 官方 安卓客户端

  • 赶紧看了自己的精华帖子,点赞 18,哈哈

  • 什么是最长情? at 2017年07月04日

    在手机客户端看过之后,跑来 web 端手动点赞,支持 testerhome 社区,希望社区日益壮大,给我们测试从业者营造一个良好的交流环境。由于身在杭州,恨不能去大会现场仰慕各位前辈大神,希望后续社区能开放大会 ppt 供我们学习。😀