设为首页 收藏本站
查看: 1275|回复: 0

[经验分享] 通过TestNG+Jenkins实现Case参数化

[复制链接]

尚未签到

发表于 2018-1-9 10:27:02 | 显示全部楼层 |阅读模式
  在做自动化测试中,参数化非常常见。例如你希望你的自动化脚本能在不同的环境中执行。 当然参数化的方式非常多,例如可以把环境变量存放在文本中,excel文件中或者配置文件中等等,然后去写段代码去读取,往往需要编写一定的代码量,那有没有几乎没代码从而又可以实现参数化的方式呢?
  这里简单介绍如何通过Testng + Jenkins 做参数化。
  使用前稍作说明,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 version="1.0" encoding="UTF-8"?>
  <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  <suite name="Custom suite">
  <!-- name 必须Parameters注解接收名一致,value就是为参数的值-->
  <parameter name="env"  value="qa"/>
  <parameter name="name"  value="meyoung"/>
  <parameter name="pwd"  value="123456"/>
  <test verbose="1" name="Selenium_Demo" annotations="JDK">
  <classes>
  <!-- 设置需要执行的class路径名-->
  <class name="com.meyoung.demo.ParametersTest"/>
  </classes>
  </test>
  </suite>
  上面的xml中跟以往执行的xml相比,我们只是在上面加入parameter 标签,并设置对应的name和value值。需要注意的是name的值必须跟测试方法中@Parameters设置的接收参数的参数名一致,但参数个数可以xml中parameter标签的个数>=@Parameters接收的参数个数。value则是要传入的数据。
  最后我们执行运行这个xml,看下执行结果:  

  按期望值输出,准确无误。
  @Parameters 注解除了跟@Test一起用外,还可以跟BeforeXXX和AfterXXX注解一起用,但是不能跟@DataProvider一起使用。
  到这里我们其实已经讲完了通过Testng做参数化,但肯定有疑问呀,这跟代码里面写死的有啥区别,如果需要换个环境换个用户不还得去修改xml文件。
  咦。。。
  这时我们想起了构建脚本我们都用Jenkins,而且Jenkins构建时可以参数化构建,那我们是不是可以把这些参数的值通过Jenkins构件时传入呢? 答案肯定的。怎么做?
  我们新建个Jenkins job,勾选参数化构建过程,并添加4个构建参数如下,除了测试方法用到的参数外,我们还添加了RunTest参数,来指定我们需要执行的xml文件: 


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

  再接着我们需要修改下我们的工程代码
  1). 修改pom.xml文件加入执行和编译插件,并添加${RunTest}用于获取Jenkins的构建参数。
  <build>
  <plugins>
  <plugin>
  <!-- 编译插件-->
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.3</version>
  <inherited>true</inherited>
  <configuration>
  <source>1.8</source>
  <target>1.8</target>
  <encoding>UTF-8</encoding>
  </configuration>
  </plugin>
  <!-- Testng 执行插件-->
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.17</version>
  <configuration>
  <suiteXmlFiles>
  <!-- 通过 ${RunTest} 来获取Jenkins的构建参数-->
  <suiteXmlFile>${RunTest}</suiteXmlFile>
  </suiteXmlFiles>
  </configuration>
  </plugin>
  </plugins>
  </build>
  2).修改刚创建的Testng 执行xml,把原来的value的值改成获取Jenkins构建参数的方式,修改后的xml如下:
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  <suite name="Custom suite">
  <!-- name 必须Parameters注解接收名一致,${XXX}获取Jenkins的构建参数名-->
  <parameter name="env"  value="${env}"/>
  <parameter name="name"  value="${UserName}"/>
  <parameter name="pwd"  value="${password}"/>
  <test verbose="1" name="Selenium_Demo" annotations="JDK">
  <classes>
  <!-- 设置需要执行的class路径名-->
  <class name="com.meyoung.demo.ParametersTest"/>
  </classes>
  </test>
  </suite>
  注意:通过${}获取Jenkins构建参数的值,{}中的值必须跟Jenkins设置的构建参数名一致
  最后保存配置,我们试着构建下Job看看结果,例如我构建如下:

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

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-433175-1-1.html 上篇帖子: Jenkins+Ant+Jmeter接口自动化集成测试 下篇帖子: 儿童节篇章
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表