19 Web自动化测试 -- 参数化

在做自动化测试中,参数化非常常见。例如你希望你的自动化脚本能在不同的环境中执行。 当然参数化的方式非常多,例如可以把环境变量存放在文本中,excel文件中或者配置文件中等等,然后去写段代码去读取,往往需要编写一定的代码量,那有没有几乎没代码从而又可以实现参数化的方式呢?

这里简单介绍如何通过Testng + Jenkins 做参数化。

我们想通过Testng 做参数化除了可使用@DataProvider注解(详细例子参考:http://www.jianshu.com/p/895e4c118db9)这里不多说明,还可以用Testng提供的另一个注解@Parameters ,我们这里讲讲入如何通过这个注解测试方法传递任意个数的参数。

使用前稍作说明,DataProvider和Parameters使用场景的区别。DataProvider适合做比较复杂的参数化,测试值较多的情况,也就是我们常用来做数据驱动。而Parameters则适合参数值较为简单的场景,例如刚提到的代码需要在不同的测试环境执行,这个环境就是需要从代码抽取出来的参数。

@Parameters的用法,我们直接看个例子:
  首先我们新建个测试,代码如下:

    @Parameters({"env", "name", "pwd"})
    @Test
    public void parameterTest(String env, String userName, String pwd) {
        System.out.println("测试环境:" + env + "_登录名: " + userName + "_密码: " + pwd);
    }

上面测试方法parameterTest()中有3个参数(env,userName,pwd),而这三个参数值我们通过@Parameters注解来获取,需要注意的是这里的测试方法的参数跟@Parameters设置的获取参数的参数名可以不一致,但参数个数需要一致,否则会报错。这样我们已经写好了获取数据源,这时我们就得编写数据源。

我们都知道Testng的测试方法可以通过xml文件来运行,那么这时可以新建个xml文件,并在该xml文件设置数据源,xml如下:





  
  
  
  

  
    
      
      
    
  

上面的xml中跟以往执行的xml相比,我们只是在上面加入parameter 标签,并设置对应的name和value值。需要注意的是name的值必须跟测试方法中@Parameters设置的接收参数的参数名一致,但参数个数可以xml中parameter标签的个数>=@Parameters接收的参数个数。value则是要传入的数据。

最后我们执行运行这个xml,看下执行结果:

19 Web自动化测试 -- 参数化_第1张图片
Paste_Image.png

按期望值输出,准确无误。

@Parameters 注解除了跟@Test一起用外,还可以跟BeforeXXX和AfterXXX注解一起用,但是不能跟@DataProvider一起使用。

到这里我们其实已经讲完了通过Testng做参数化,但肯定有疑问呀,这跟代码里面写死的有啥区别,如果需要换个环境换个用户不还得去修改xml文件。

咦。。。

这时我们想起了构建脚本我们都用Jenkins,而且Jenkins构建时可以参数化构建,那我们是不是可以把这些参数的值通过Jenkins构件时传入呢? 答案肯定的。怎么做?

我们新建个Jenkins job,勾选参数化构建过程,并添加4个构建参数如下,除了测试方法用到的参数外,我们还添加了RunTest参数,来指定我们需要执行的xml文件(图中Choices 是刚好Jenkins在本地,所以用了绝对路径,这个是不建议的,最好是用相对于job工作空间的路径):

19 Web自动化测试 -- 参数化_第2张图片
19 Web自动化测试 -- 参数化_第3张图片
Paste_Image.png

接着我们添加构建方式,推荐用maven工程,然后我们直接用maven命令执行,这里我直接指向本地的pom文件:

19 Web自动化测试 -- 参数化_第4张图片
Paste_Image.png

再接着我们需要修改下我们的工程代码

1). 修改pom.xml文件加入执行和编译插件,并添加${RunTest}用于获取Jenkins的构建参数。

    
        
            
                
                org.apache.maven.plugins
                maven-compiler-plugin
                3.3
                true
                
                    1.8
                    1.8
                    UTF-8
                
            

            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.17
                
                    
                        
                        ${RunTest}
                    
                
            
        
    

2).修改刚创建的Testng 执行xml,把原来的value的值改成获取Jenkins构建参数的方式,修改后的xml如下:





  
  
  
  


  
    
      
      
    
  

注意:通过${}获取Jenkins构建参数的值,{}中的值必须跟Jenkins设置的构建参数名一致

最后保存配置,我们试着构建下Job看看结果,例如我构建如下:

19 Web自动化测试 -- 参数化_第5张图片
Paste_Image.png

那么从控制台输出可以看到输出数据达到预期,则构建成功:

19 Web自动化测试 -- 参数化_第6张图片
Paste_Image.png

这样以后我们构件时就可以通过Jenkins上填写不同的参数,以达到构建参数化的效果。

你可能感兴趣的:(19 Web自动化测试 -- 参数化)