zoukankan      html  css  js  c++  java
  • Groovy参数默认值在接口测试中应用

    最近在工作中频繁的使用到Groovy编程语言的一个特性:就是可以设置参数默认值。在编写方法或者函数的代码的时候,可以选择对参数进行一个默认值的设定。这样做就相当于对方法进行了重载。我们没写一个方法,其实就是有很多个方法重载,对于已经设置过默认值的参数。会多一个重载方法是忽略这个参数的(使用默认值)。

    下面我详细介绍一下这个特性。

    Groovy特性

    这个特性在接口测试中用到的地方很多。在一开始我使用这个特性去标记一些参数的格式。相当于写一个参数的demo。再后来,我发现在设置默认值的时候,可以去使用一些脚本或者直接调用方法。在文章分段随机实践—模拟线上流量中,我就用到了这个特性。

    Groovy语言是编写有参方法的代码的时候,可以选择设置方法的默认值,即调用者不传该参数时,该参数的值。说起来有点拗口。下面我举一个简单的例子,假设需求是求两个int类型值的和。传统的Java代码如下。

        /**
         * int 求和
         *
         * @param a
         * @param b
         * @return
         */
        public static int add(int a, int b) {
            return a + b;
        }
    

    那么如果我想对a参数默认值设置成10,用户如果不传这个参数,只传一个参数b,那么返回a的默认值和b的和。

        /**
         * int 求和
         * @param a
         * @param b
         * @return
         */
        public static int add(int a = 10, int b) {
            return a + b
        }
    
    

    这样写就实现了刚刚的需求。

    脚本支持

    因为Groovy语言的特性,还有一个就是在字符串中增加脚本的支持。所以我们在设置参数默认值的时候,也可以使用这一特性。例如我们写一个打招呼的方法,实现如果用户不传名字过来,默认随机一个用户名。

        /**
         * 打招呼
         * @param user
         */
        public static void sayHi(String user = "默认用户${StringUtil.getEmojis(2)}") {
            output("你好,FunTester用户: " + user)
        }
    

    看到这里,你也许就会发现。这个默认值的设定并不局限于具体的值,而是可以使用脚本,甚至调用其他方法。下面再分享一下。之前文章中举到的例子就是随机参数的问题。

    随机参数

    当我们在做接口测试的过程中,对于有些接口的参数,我们完全可以枚举出来。然后再测试的。过程里随机的选择一个参数发起请求。下面我就来实现这个需求。

        /**
         * 获取组用户列表
         * @param group
         */
        public static void getUser(int group = random(1,2,3,4,5)) {
            output("获取到$group 小组的用户")
        }
    

    在这个实现案例中,我将小组的id范围从1~5随机请求。这种请求方式,目前我在性能测试中经常会遇到。在接口功能测试或者说接口的自动化测试中。我们可以用这种方式对接口的某个参数进行随机,或者说是某种程度上的遍历。那么回到性能测试中,这种方式结合对用户数据的分析结果。即可以达到请求方法+用户模型=实际流量的好处,而且我们可以传入多个用户模型就可以模拟不同场景下的实际流量。

    性能实践

    在之前的文章中,我已经测试过随机这种方式,性能消耗啦。这里,我就不再测试random方法的性能了,我对比一下使用默认值和非默认值。两种方式性能的差异。测试脚本如下:

    
        public static void main(String[] args) {
            def start = Time.getTimeStamp()
            1000000.times {
                //            def i = random(1, 2, 3, 4, 5,6,7,8)
                //            add(i)
                add()
            }
            def end = Time.getTimeStamp()
            output(end - start)
        }
    
        /**
         * 测试方法
         * @param a
         * @param b
         * @return
         */
        public static int add(int a = random(1, 2, 3, 4, 5, 6, 7, 8)) {
            return a * a
        }
    

    测试结果如下:

    • 直接使用默认值的时间消耗3500ms
    • 使用非默认值方式小时700ms

    时间消耗上来说,默认值会增加更多额外消耗,但是如果在一百万次数上的消耗,我觉得还是可以接受的。在编写性能测试脚本的过程中,数据的维护和复用所消耗的时间和精力会更多,而代码执行上的这点消耗,完全可以通过万能优化方案解决。

    万能优化方案,俗称人民币优化方案,哈哈!!!

    Have Fun ~ Tester !

  • 相关阅读:
    git常用命令
    thinkjs框架发布上线PM2管理,静态资源访问配置
    登陆服务器提示“You need to run "nvm install N/A" to install it before using it.”
    CentOS 7.x 用shell增加、删除端口
    CentOS 7.X 安全手记
    Centos 7.x nginx隐藏版本号
    centos7磁盘挂载及取消
    CentOS 7.4上网速度慢,修改DNS!
    Centos7.4 安装Docker
    Nodejs 使用log4js日志
  • 原文地址:https://www.cnblogs.com/FunTester/p/15322908.html
Copyright © 2011-2022 走看看