java testng框架的windows自动化-自动运行testng程序下篇
本文旨在让读者简单了解testng的自动运行
接上文https://www.cnblogs.com/xuezhezlr/p/9213456.html,文章大致把testng中比较特殊的两个xml形式说了一下,读者可以这样认为,ant的那个xml中的代码,因为只是控制了打包和指定testng的xml路径,然后获取执行结果想方法展示,而testng的xml直接控制了运行代码的顺序,包类等参数,直接控制了运行的过程,所以,如果工程主体变动不大,只需要对testng的xml进行改造,从而控制执行的方法,达到不同的测试目的
故本文也是,上文中的ant的那个xml不会有变化,主要说一下testng中的xml和对应的class类和执行结果,一一解决一下上文说到的问题
1,如果系统中要求只执行一部分代码,比如执行查询接口,或者只执行插入接口,如何去做
2,如何让每个class,甚至每个方法,按照一定的方式优先级来执行
3,方法的依赖问题,又该如何处理
4,如果需要一个或者多个变量(如cookie),如何在代码中传输,使得今天和明天使得都是能用的不同的参数
上述问题在junit中也可以解决,testng中的解决方式更加的优雅和高雅一点罢了~,下面准备两个文件还是原先的工程,一个是zlr.java
package zlr;
import org.testng.annotations.Test;
@Test(groups = {"group-class"})
public class zlr {
@Test(groups = { "group-a","group-b" },priority = 2)
public void cccMethod() {
System.out.println("Method---ccc");
}
@Test(groups = { "group-b"} ,priority = 3)
public void bbbMethod() {
System.out.println("Method---bbb");
}
@Test(groups = { "group-b"},priority = 2 )
public void dddMethod() {
System.out.println("Method---ddd");
}
@Test(groups = {"zlr"} )
public void zlrMethod() {
System.out.println("Method---ddd");
}
@Test(groups = { "group-a" },priority = 3)
public void aaaMethod() {
System.out.println("Method---aaa");
}
@Test(dependsOnMethods = {"aaaMethod" })
public void method1() {
System.out.println("zlr");
}
@Test(groups = { "init" },priority = 3)
public void xMethod() {
System.out.println("Method---aaa");
}
@Test(groups = { "group-c" },priority = 3)
public void cMethod() {
System.out.println("Method---c");
}
@Test(groups = { "init" },priority = 3)
public void yMethod() {
System.out.println("Method---aaa");
}
@Test(groups = { "ss" },dependsOnGroups = { "group-b","group-a" },alwaysRun=true)
public void method3() {
System.out.println("zlr");
}
@Test(dependsOnGroups = { "init" })
public void method2() {
System.out.println("zlr");
}
}
一个是zlr2.java
package zlr; import org.testng.annotations.Parameters;
import org.testng.annotations.Test; /**
* Created by zouleiran on 2018/6/22.
*/
public class zlr2 {
@Test(groups = { "functest", "checkintest" })
public void testMethod1() {
System.err.println("groups = { functest, checkintest }");
} @Test(groups = { "functest", "checkintest" })
public void testMethod2() {
System.err.println("groups = { functest, checkintest }");
} @Test(groups = { "functest" })
public void testMethod3() {
System.err.println("groups = { functest }");
}
@Parameters({"URL","PORT"})
@Test(groups = { "checkintest" })
public void testMethod4(String URL,String PORT) {
System.err.println("groups = { checkintest }"+URL+PORT);
}
}
首先说一下,如果要执行整个class的话,可以把xml写成上一篇博客那样的就可以正常使用了,那是以class为维度来执行,而testng也支持以group和method为维度来执行方法和代码
一、针对第一个问题,testng声明了一个叫做group的东西,我们可以认为是一个组,这个组可以是查询组,可以使插入组,也可以是其他分组,下面使用zlr2那个java文件演示,在zlr2中我们看到有4个test类,每一个的后面都标记了 (groups = { "checkintest" })和(groups = { "functest" })可以认为,把所有test分为两个大组,一组是checkintest另一组是functest,一个test可以属于一个组或者多个group,比如上文中的testMethod4就是checkintest小组的方法,然后可以写下xml如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" verbose="1" >
<test name="Regression1"> <groups>
<run>
<include name = "functest" />
<exclude name="checkintest" />
</run>
</groups>
<classes>
<class name = "zlr.zlr2"/>
</classes>
</test>
</suite>
执行结果是

可以看到与之前的差别是xml中多了
<groups>
<run>
<include name = "functest" />
<exclude name="checkintest" />
</run>
</groups>
这两行的意思是,执行group为functest而不是checkintest的小组代码那么会执行,只属于functest的代码,即便是一个class同时属于两者也不会执行
二、testng中存在可以设置优先度,使得代码按照优先度来执行,也可以使用xml的方式来控制执行顺序
xml中可以说明执行的method,如果我们在xml中写出以下代码
<suite name="Suite1" verbose="1" >
<test name="Regression1"> <classes>
<class name="zlr.zlr">
<methods>
<include name="aaaMethod" />
<include name="bbbMethod" />
</methods>
</class>
</classes>
</test>
</suite>
代码会先执行aaaMethod在执行bbbMethod,反过来如果写作这样
<include name="bbbMethod" />
<include name="bbbMethod" />
代码会先执行bbbMethod在执行aaaMethod,用以实现对代码的控制
另一方面,在代码中也可以以@Test(priority = 3)的方式来说明优先度,比如一个方法priority = 2,另一个priority = 3,那么如果在xml中都需要执行,也会先执行priority = 2的高优先度的方法(如果没有声名优先度,视为优先度最低,即先执行有优先度的方法),比如在xml中写上如下代码
<suite name="Suite1" verbose="1" >
<test name="Regression1"> <classes>
<class name="zlr.zlr">
<methods>
<include name="aaaMethod" />
<include name="dddMethod" />
</methods>
</class>
</classes>
</test>
</suite>代码会先执行dddMethod
三、testng存在一个依赖函数的方式来让代码执行,方式就是
@Test(groups = { "ss" },dependsOnGroups = { "group-b","group-a" })这样在test中加上参数,这是说本方法会依赖于另外的Groups a和b来执行,在实际执行中会先执行a再执行b,然后都成功了之后在执行本方法
依赖还可以依赖于method为维度的,那样的话dependsOnGroups需要写作dependsOnMethods
说实话在实际运用中这个使用率并不高,由于有before和更前面的beforeclass,甚至说可以把某一个方法写到代码里面,所以依赖的事情并不长用到,下面是实例的xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" verbose="1" >
<test name="Regression1"> <groups>
<run>
<include name = "ss" />
</run>
</groups>
<classes>
<class name = "zlr.zlr"/>
</classes>
</test>
</suite>
四、这一点是我觉得testng非常赞的一点~~~真心棒,testng存在一种方式,使得用户可以在testng的xml文件中声名变量并直接传入代码中,不过也有弊端,如果忘记传了,,,代码会直接忽略这个方法
具体的是这样
@Parameters({"URL","PORT"})
@Test(groups = { "checkintest" })
public void testMethod4(String URL,String PORT) {
System.err.println("groups = { checkintest }"+URL+PORT);
}
在test方法前声名多个变量,在方法中可以作为参数传进来并使用它们,然后在xml中传进来,xml如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="suite1">
<test name="test1">
<!--parameter标签中写要传入的参数 -->
<parameter name="URL" value="https://www.baidu.com"></parameter>
<parameter name="PORT" value="443"></parameter>
<groups>
<run>
<include name = "checkintest" />
</run>
</groups>
<classes>
<class name="zlr.zlr2" />
</classes>
</test>
</suite>
运行结果如图

可以看到代码中的url和port确实已经传进来了,如果在xml中不传的话代码会说因为没有传这两个参数,导致这个方法不运行,以忽略来处理
java testng框架的windows自动化-自动运行testng程序下篇的更多相关文章
- java testng框架的windows自动化-自动运行testng程序上篇
本文旨在让读者简单了解testng的自动运行 怎么说呢,在网上已经有了各个前辈进行代码演示以及分享,我力争说到点子上 接上文,之前讲的大部分是juint的自动化代码运行,从未涉及到testng,但是在 ...
- java juint框架的windows自动化-自动运行juint程序简述
在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是juint框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一 ...
- java的windows自动化-自动运行java程序
那么在一些工具齐全并且已经有了一定的写好的java程序的情况下(环境变量和软件见上一章http://www.cnblogs.com/xuezhezlr/p/7718273.html),如何自动化运行j ...
- Atitit.Java exe bat 作为windows系统服务程序运行
Atitit.Java exe bat 作为windows系统服务程序运行 1. 使用SC命令+srvany.exe (不错,推荐)+net start1 1.1. First 创建一个java的运 ...
- webstorm git 怎么断开版本控制 webstorm git for windows 禁止 自动运行
也是无语啊,今天装了下最新版本的webstorm , 发现特别卡,老动不动就卡死, 看了下进程, 牛X 啊, git for windows 一直蹭蹭蹭的疯狂增长,一开始的一点到后来的庞然大物. ...
- NanoPC-T4/RK3399开发板Ubuntu FriendlyCore系统开机自动运行客户程序
RK3399开机自动运行客户程序 比如hellohello.c 交叉编译:aarch64-linux-gcc hello.c -o hello使用SecureCRT软件通过串口下载到开发板rz修改文件 ...
- java的mac自动化-自动运行java程序
本文旨在帮助读者介绍,如果一个测试工程师拿到了mac本,该如何在本地自动运行java代码 首先如图所示写下如下一段代码 package zlr;import org.junit.Test;public ...
- mpush 服务端配置 for windows 服务自动运行
mpush 服务端配置 以下安装部分是参照官方的步骤, 一.安装jdk1.8并配置环境变量 示例: http://www.cnblogs.com/endv/p/6439860.html 二.Wind ...
- TestNG官方文档中文版(4)-运行TestNG
4 - 运行TestNG TestNG可以以不同的方式调用: * Command line * ant * Eclipse * IntelliJ's IDEA 1) 命令行 假 ...
随机推荐
- Python——使用高德API获取指定城指定类别POI并实现XLSX文件合并
# 以下内容为原创,转载请注明出处 1 import xlrd # 读xlsx import xlsxwriter # 写xlsx import urllib.request # url请求,Pyth ...
- 题解 P3871 【[TJOI2010]中位数】
orz各位大佬,题解太强了,主席树,堆,线段树,splay,还有暴力,太巨了.所以我用的是fhq treap(好像更高级).算了. 反正都是平衡树,这道题就是动态求中位数,不会做的同学可以先做弱化版P ...
- IDEA中debug启动tomcat报错。Error running t8:Unable to open debugger port(127.0.0.1:49225):java.net.BindException"Address alread in use:JVM_Bind"
解决办法: 1,如下图打开项目配置的tomcat的“Edit Configurations...” 2,打开“Startup/Connection”--------"Debug"- ...
- linux下安装svn1.7
转自 https://blog.csdn.net/u011752559/article/details/11559573?locationNum=11&fps=1 1.下载svn安装包 wge ...
- ie浏览器部分图片不显示
前言 前几天做项目时,发现一个奇怪的现象,从后台获取的图片,在IE浏览器端,有一部分不会显示,仔细研究发现是图片本来是.jpg格式,后台传过来的图片后缀已经被改成了.png格式或者其它格式导致IE浏览 ...
- HTML基础之JS中的字符转义--转义中文或特殊字符
1.在标准的url的规范中是不允许出现中文字符或某些特殊字符的,所以要进行转义 2.& 代表参数的链接,如果就是想传& 给后端那么必须转义 decodeURI(url) URl中未转义 ...
- CentOS下TensorFlow安装命令
安装扩展源:sudo yum -y install epel-release 安装python-pip模块:sudo yum install python-pip 直接把whl文件download下来 ...
- JAVA实例
JAVA实例1 1 package Demo3; import java.io.File; import java.io.FileReader; import java.io.IOExceptio ...
- 基于Python的Webservice开发(二)-如何用Spyne开发Webservice
一.功能需求 本次案例是开发一个Item的新建的WebService.IN&OUT的类型JsonDocument. 通过传入相关的参数创建Item,且相关的参数可以被缺省. 二.实现代码 引入 ...
- 面向对象原生JavaScript案例炫彩小球
面向对象其实对于初学者来说还是比较难以理解的,以前看到一个面试题目 面向对象是什么? 面向对象是一种思想,千万别入坑了: 这次给大家带来的是一个鼠标移动产生小球的案例,不是我不想给大家分享如何去认识面 ...