java 测试框架 TestNG
Java中print、printf、println的区别
printf主要是继承了C语言的printf的一些特性,可以进行格式化输出
print就是一般的标准输出,但是不换行
println和print基本没什么差别,就是最后会换行
System.out.printf("the number is: d",t);
参照JAVA API的定义如下:
'd' 整数结果被格式化为十进制整数
'o' 整数结果被格式化为八进制整数
'x', 'X' 整数结果被格式化为十六进制整数
'e', 'E' 浮点结果被格式化为用计算机科学记数法表示的十进制数
'f' 浮点结果被格式化为十进制数
'g', 'G' 浮点根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。
'a', 'A' 浮点结果被格式化为带有效位数和指数的十六进制浮点数
println("test")相当于print("test\n")就是一般的输出字符串
print\println\printf的区别
print将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后。
println 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始。
printf是格式化输出的形式。
下在举个例子:
package other;
public class TestPrint {
public static voidmain(String[] args) {
int i = 4;
double j = 5;
System.out.print("用print输出i:"+ i);
System.out.println( "用println输出i:"+ i);
System.out.printf("i的值为%d,j的值为%f", i,j);
}
}
运行结果为
用print输出i:4用println输出i:4
i的值为4,j的值为5.000000
可以看到,用print输出i后,没有换行,用println输出的结果直接在print输出语句后面,而输出println后换行了
printf “i的值为%d,j的值为%f”这个字符串中的"%d"变为i的值了,而"%f"变为了j的值了!
这里,"%d"的意思是一个int值的占位符,"%f"为一个double 或float值的点位符,这个变量的参数在后面提供。注意的是实参名必须按顺序排
。不然就会错了。而且类型也要相符。如果我们把语句改为
System.out.printf("i的值为%d,j的值为%f", j,i);//i和j位置反了
这时就有错了因为"%d"对应的参数变为j,"%f"对应的变为i了,而j是double的,与"%d"是int形的不一致。所以有错了。
还有"%s"是一个字符串值的点位符的意思。"%c"是一个字符值的点位符的意思。
可能读者还会问为什么j输出变成了5.000000?那是因为double是默认有6位小数的(这个可能和系统电脑有关,有的不是6位吧)但是如果你想
只要输出两位小数
System.out.printf("i的值为%d,j的值为%.2f", i,j);
这里的"%.2f"的意思是输出两位小数点。如果想输出三位那就"%.3f"。
再学多点知识吧,将代码改为以下:
public class TestPrint {
public static voidmain(String[] args) {
int i = 4;
double j = 5.000f;
System.out.printf("i的值为],\n", i);
System.out.printf("i的值为=,j的值为%.2f", i,j);
}
}
运行结果为:
i的值为 4,
i的值为 4,j的值为5.00
原来在"%"与"d"之间加个数5的意思是输出5个占位符。默认向右对齐。这样的输出是很有用的,比如你想输出一个表格,因各个数大小不一,有的5位有的4位,这样输出的的表格结果就对不齐了。如果将输出结果全部为同一样的占位符数。
除了"%d"可以这样外,别的也可以,读者不防试试。会有很多收获的。
我们再试着将代码改一下:
public class TestPrint {
public static voidmain(String[] args) {
int i = 4;
double j = 5.000f;
System.out.printf("i的值为d,\n", i);
}
}
运行结果为:
i的值为00004,
,原来"d"的意思是输出5个占位符,如果数字不足5的话就有左边以0相补
一、TestNG的优点
1.1 漂亮的HTML格式测试报告
1.2 支持并发测试
1.3 参数化测试更简单
1.4 支持输出日志
1.5 支持更多功能的注解
二、编写TestNG测试用例的步骤
2.1 使用 Eclipse生成TestNG的测试程序框架
2.2 在生成的程序框架中编写测试代码逻辑
2.3 根据测试代码逻辑,插入TestNG注解标签
2.4 配置Testng.xml文件,设定测试类、测试方法、测试分组的执行信息
2.5 执行TestNG的测试程序
三、如何安装TestNG?
启动Eclipse,选择Help-》Install New Software-》点击add-》name中输入TestNG,location中输入“http://beust.com/eclipse/”,点击ok-》在弹出的install对话框中勾选TestNG复选框-》Next-》Accept-》Finish
四、testNG用例执行后如何查看执行结果?
4.1 在Console标签栏中展示测试用例的执行结果:
在工程下也会生成一个test-output文件夹
五、TestNG常用注解:执行顺序如下
@BeforeSuite > @BeforeTest > @BeforeMethod > @Test > @AfterMethod > @AfterTest > @AfterSuite
|
@BeforeSuite |
表示会在当前测试集合中的任意一个测试用例开始运行前执行 |
|
@AfterSuite |
表示会在当前测试集合中的所有测试程序运行结束之后执行 |
|
@BeforeTest |
表示会在Test中的任意一个测试用例开始运行前执行 |
|
@AfterTest |
表示会在Test中的所有测试用例运行结束后执行 |
|
@BeforeGroups |
分组测试用例的任一测试用例开始运行前执行 |
|
@AfterGroups |
分组测试用例的所有测试用例运行结束后执行 |
|
@BeforeClass |
在当前测试类的任意一个测试用例开始运行前执行 |
|
@AfterClass |
在当前测试类的所有测试用例运行结束后执行 |
|
@BeforeMethod |
在每个测试方法开始运行前执行 |
|
@AfterMethod |
在每个测试方法运行结束后执行 |
|
@Test |
被认为是一个测试方法,既一个测试用例 |
六、如何创建TestNG测试集合?
6.1 测试集合:在自动化测试的执行过程中,通常会产生批量运行多个测试用例的需求,此需求称为运行测试集合(Test Suite)
6.2 TestNG的测试用例可以是相互独立的,也可以按照特定的顺序来执行(配置TestNG.xml)
6.3 如何配置testNG.xml文件?

<suite name = "TestNG Suite"> //自定义的测试集合名称
<test name = "test1"> //自定义的测试名称
<classes> //定义被运行的测试类
<class name = "cn.gloryroad.FirstTestNGDemo" /> //测试类的路径
<class name = "cn.gloryroad.NewTest" />
</classes>
</test>
</suite>

七、测试用例的分组(group)
7.1 只执行一组分组配置如下:

<suite name = "TestNG Suite">
<test name = "Grouping">
<groups>
<run>
<include name = "动物" />
</run>
</groups>
<classes>
<class name = "cn.gloryroad.Grouping"/>
</classes>
</test>
</suite>

7.2 执行多组分组时配置如下(两种形式都可以):

<suite name = "TestNG Suite">
<test name = "Grouping">
<groups>
<run>
<include name = "动物" /> //name分组名称
<include name = "人" />
</run>
</groups>
<classes>
<class name = "cn.gloryroad.Grouping"/>
</classes>
</test>
</suite>


<suite name = "TestNG Suite">
<test name = "Grouping">
<groups>
<define name = "All">
<include name = "动物" />
<include name = "人" />
</define>
<run>
<include name = "All" />
</run>
</groups>
<classes>
<class name = "cn.gloryroad.Grouping"/>
</classes>
</test>
</suite>

八、依赖测试(dependsOnMethod)
@Test(dependsOnMethod = {"方法名称"})
被依赖的方法优先于此方法执行
九、特定顺序执行测试用例(priority)
@Test(priority = 0/1/2/3/4/…)
按照数字大小顺序优先执行,优先执行1,然后是2…
十、如何跳过某个测试方法(enabled = false)
@Test(priority = 0/1… , enabled = false)
执行结束后,在测试报告中显示跳过的测试用例数,例如skip=1
十一、数据注解
11.1 参数化测试(@Parameters-》通过xml文件从外部给测试方法传参):<Parameter name="Type" value="chrome"/> -》参考http://www.yiibai.com/html/testng/2013/0916303.html
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
创建测试案例类 创建一个Java测试类 ParameterizedTest1.java. 测试方法parameterTest()添加到测试类。此方法需要一个字符串作为输入参数。 添加注释 @Parameters("myName") 到此方法。该参数将被传递testng.xml,在下一步我们将看到一个值。创建Java类文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class ParameterizedTest1 { @Test @Parameters("myName") public void parameterTest(String myName) { System.out.println("Parameterized value is : " + myName); } }创建 TESTNG.XML创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <parameter name="myName" value="manisha"/> <classes> <class name="ParameterizedTest1" /> </classes> </test> </suite>我们还可以定义参数在<suite>级别。假设我们已经定义在两个<suite>和<test>级别myName,在这种情况下,常规的作用域规则适用。这意味着,任何类里面<test>标签将查看值参数定义在<test>,而testng.xml文件中的类的其余部分将看到定义在<suite>中值编译使用javac的测试用例类。C:\TestNG_WORKSPACE>javac ParameterizedTest1.java现在,运行testng.xml,其中将运行parameterTest方法。TestNG的将试图找到一个命名myName的第一<test>标签的参数,然后,如果它不能找到它,它会搜索包围在的<suit>标签。C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml验证输出。Parameterized value is : manisha===============================================Suite1Total tests run: 1, Failures: 0, Skips: 0===============================================TestNG 对testng.xml 的参数的类型指定的值会自动尝试转换。下面是支持的类型: String int/Integer boolean/Boolean byte/Byte char/Character double/Double float/Float long/Long short/Short |
11.2 数据驱动(@DataProvider)-》参考http://www.yiibai.com/html/testng/2013/0916303.html
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。让我们看看下面的例子使用数据提供者。第一个例子是@DataProvider的使用Vector,String或Integer 作为参数,第二个例子是关于@DataProvider 的使用对象作为参数。实例 1在这里 @DataProvider 通过整数和布尔参数。创建Java类创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE public class PrimeNumberChecker { public Boolean validate(final Integer primeNumber) { for (int i = 2; i < (primeNumber / 2); i++) { if (primeNumber % i == 0) { return false; } } return true; } }创建测试案例类 创建一个Java测试类 ParamTestWithDataProvider1.java. 定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。 测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。 添加注释 @Test(dataProvider = "test1") 到此方法。dataProvider的属性被映射到"test1".创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class ParamTestWithDataProvider1 { private PrimeNumberChecker primeNumberChecker; @BeforeMethod public void initialize() { primeNumberChecker = new PrimeNumberChecker(); } @DataProvider(name = "test1") public static Object[][] primeNumbers() { return new Object[][] { { 2, true }, { 6, false }, { 19, true }, { 22, false }, { 23, true } }; } // This test will run 4 times since we have 5 parameters defined @Test(dataProvider = "test1") public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) { System.out.println(inputNumber + " " + expectedResult); Assert.assertEquals(expectedResult, primeNumberChecker.validate(inputNumber)); } }创建 TESTNG.XML创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例。 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <classes> <class name="ParamTestWithDataProvider1" /> </classes> </test> </suite>编译使用javac的测试用例类。C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java运行testng.xml.C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml验证输出。2 true6 false19 true22 false23 true===============================================Suite1Total tests run: 5, Failures: 0, Skips: 0===============================================实例 2在这里,@DataProvider 传递对象作为参数。创建Java类创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.public class Bean { private String val; private int i; public Bean(String val, int i){ this.val=val; this.i=i; } public String getVal() { return val; } public void setVal(String val) { this.val = val; } public int getI() { return i; } public void setI(int i) { this.i = i; }}创建测试案例类 创建一个Java测试类 ParamTestWithDataProvider2.java. 定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。 添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。 添加注释 @Test(dataProvider = "test1") 到此方法. dataProvider 属性被映射到 "test1".创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class ParamTestWithDataProvider2 { @DataProvider(name = "test1") public static Object[][] primeNumbers() { return new Object[][] { { new Bean("hi I am the bean", 111) } }; } @Test(dataProvider = "test1") public void testMethod(Bean myBean) { System.out.println(myBean.getVal() + " " + myBean.getI()); } }创建 TESTNG.XML创建一个文件 testng.xml C:\ > TestNG_WORKSPACE 来执行测试用例. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <classes> <class name="ParamTestWithDataProvider2" /> </classes> </test> </suite>编译使用javac的测试用例类。C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java运行 testng.xml.C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml验证输出。hi I am the bean 111===============================================Suite1Total tests run: 1, Failures: 0, Skips: 0=============================================== |
十二、测试报告中自定义日志(Reporter.log(“输入自定义内容”)),例如:
@Test(groups = {"人"})
public void student(){
System.out.println("学生方法被调用");
Reporter.log("学生方法自定义日志");
}
java 测试框架 TestNG的更多相关文章
- java测试框架详细说明-mvn+testng+allure
java测试框架 mvn+testng+allure 1.mvn代码目录结构 2.testng框架 2.1 testng.xml配置 2.2 注解 3.allure插件,方便报告阅览 4.配置文件.p ...
- 白盒测试的学习之路----(四)搭建测试框架TestNG测试
TestNG是一个开源自动化测试框架; TestNG是类似于JUnit,但它不是一个JUnit扩展.它的灵感来源于JUnit.它的目的是优于JUnit的,尤其是当测试集成的类. TestNG消除了大部 ...
- java 测试框架
项目开发过程中使用的单元测试框架有Junit.TestNG以及Mockito,Junit和TestNG使用的比较多,Mockito最近才开始使用. TestNG与JUnit的相同点 1. 使用anno ...
- Java测试框架Mockito源码分析
1.Mockito简介 测试驱动的开发(Test Driven Design, TDD)要求我们先写单元测试,再写实现代码.在写单元测试的过程中,一个很普遍的问题是,要测试的类会有很多依赖,这些依赖的 ...
- java测试框架整理
Test: Junit4+Hamcrest 不多说了,就靠着两个 import static org.hamcrest.Matchers.equalTo; import static org.juni ...
- 基于python3在nose测试框架的基础上添加测试数据驱动工具
[本文出自天外归云的博客园] Python3下一些nose插件经过2to3的转换后失效了 Python的nose测试框架是通过python2编写的,通过pip3install的方式安装的nose和相关 ...
- Java Junit测试框架
Java Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...
- Selenium 4 Java的最佳测试框架
几十年来,Java一直是开发应用程序服务器端的首选编程语言.尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但随着时间的推移和测试行业的发展,特别是伴随着自动化测试的兴起,已经开发了许 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...
随机推荐
- ADF一个EO的事物提交周期
客户端通过传递键对象调用实体定义的findByPrimaryKey(),获得EO.ADF框架首先检查实体缓存, 如果在实体缓存中没有找到实体,就执行SQL SELECT查询,从数据库读取行.示例如下: ...
- nRF24L01无线介绍
CE:RX或TX模式选择 CSN:SPI片选信号 SCK:SPI时钟 MOSI:SPI数据输入 MISO:SPI数据输出 IRQ:可屏蔽中断脚 51测试程序 实测可用! #define TX_ADR_ ...
- js 五 jquery的使用,调用
4 this 关键字 this 表示当前函数或方法的调用者 1 全局函数由window调用,所以全局函数中的this 指的是window对象 2 事件处理函数中使用this,指的是当前事件的触发对象 ...
- Thymeleaf整合到Spring Security,标签sec不起作用
将 pom 文件中的 thymeleaf-extras-springsecurity4 依赖改成 thymeleaf-extras-springsecurity5 <dependency> ...
- 用js刷剑指offer(调整数组顺序使奇数位于偶数前面)
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 牛客网链接 js代码 ...
- Go语言中的defer
可以用作一些资源的释放. 1.在一个函数内的defer执行顺序是先写的后执行,后写的先执行(遵循栈结构) func DeferTest1(){ defer fmt.Println("我是 d ...
- notify()和 notifyAll()有什么区别?(未完成)
notify()和 notifyAll()有什么区别?(未完成)
- ICPC2019上海站游记
银牌第4,差4名拿金 金牌就保研国奖,银牌就什么都没有 最痛苦的是功败垂成 也许签到罚时太多罢,也许构造做得太晚罢,也许J题没有做出来罢 翻来覆去,似乎也想不到得金的理由 福兮祸所倚 年轻人多遇到点挫 ...
- 有关PHPstorm的git环境的配置和git密钥的生成总结
phpstorm上配置git环境的配置总感觉很简单,没发现看似简单的东西浪费我好多时间.我在网上查了一下关于phpstorm的git环境的配置没有具体的总结 所以我把自己的配过程简单总结了一下 接下来 ...
- xfs 文件系统
centos7.0开始默认文件系统是xfs,centos6是ext4,centos5是ext3 ext3和ext4的最大区别在于,ext3在fsck时需要耗费大量时间(文件越多,时间越长),而ext4 ...