1.IntelliJ IDEA 工具红色的代码提示快捷键:ALT+ENTER;

2.CTRL+j:可联想出sout=System.out.println;

3.CTRL+d:复制当前行所有内容;

4.批量注释:录入/**按回车;

一.TestNG注解

1.@Test  ----最基本的注解,用来把方法标记为测试的一部分

2.方法注解

@BeforeMethod

@AfterMethod

3.类注解

@BeforeClass

@AfterClass

4.测试套件注解

@BeforeSuite

@AfterSuite

说明:测试套件注解包含类注解,类注解包含方法注解,方法注解包含测试注解

5.忽略测试---默认属性enabled=true

       @Test(enabled = false)

二.TestNG组测试中的方法分组测试

@Test(groups = "server")
@Test(groups = "client")
@BeforeGroups("server")
@AfterGroups("server")
@BeforeGroups("client")

@AfterGroups("client")
三.TestNG组测试中的类分组测试
GroupsOnClass.xml:
<?xml version="1.0" encoding="UTF-8" ?>

<suite name="suitename">
<test name="runAll">
<classes>
<class name="com.course.testng.groups.GroupsOnClass1"/>
<class name="com.course.testng.groups.GroupsOnClass2"/>
<class name="com.course.testng.groups.GroupsOnClass3"/>
</classes>
</test>
<test name="onlyRunStu">
<groups>
<run>
<include name="stu"/>
</run>
</groups>
<classes>
<class name="com.course.testng.groups.GroupsOnClass1"/>
<class name="com.course.testng.groups.GroupsOnClass2"/>
<class name="com.course.testng.groups.GroupsOnClass3"/>
</classes>
</test>
</suite>

四.异常测试
/**
*什么时候会用到异常测试??
*在我们期望结果为某一个异常的时候
* 比如:我们传入了某些不合法的参数,程序抛出了异常
* 也就是说我的预期结果就是这个异常。
*/
@Test(expectedExceptions = RuntimeException.class)
public void runTimeExceptionSuccess(){
System.out.println("这是我的异常测试");
throw new RuntimeException();
}

五.依赖测试
@Test(dependsOnMethods = {"test1"})----大括号中为依赖的方法名
说明:当被依赖的方法执行失败的时候,依赖它的方法将被忽略,不执行

六.参数化测试--xml文件参数化
@Test
@Parameters({"name","age"})
public void paramterTest1(String name,int age){
System.out.println("name="+name+"; age="+age);

}
xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<suite name="parameter">
<test name="param">
<classes>
<parameter name="name" value="zhangsan"/>
<parameter name="age" value="10"/>
<class name="com.course.testng.paramter.ParamterTest"/>
</classes>

</test>
</suite>
七.参数化测试---DataProvider参数化
package com.course.testng.paramter;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.lang.reflect.Method;

public class DataProviderTest {
@Test(dataProvider = "data")
public void testDataProvider(String name,int age){
System.out.println("name="+name+"; age="+age);
}

@DataProvider(name = "data")
public Object[][] providerData(){
Object[][] o = new Object[][]{
{"zhangsan",10},
{"lisi",20},
{"wangwu",30}
};
return o;
}

@Test(dataProvider = "methodData")
public void test1(String name,int age){
System.out.println("test1111方法"+"name="+name+"; age="+age);
}

@Test(dataProvider = "methodData")
public void test2(String name,int age){
System.out.println("test2222方法"+"name="+name+"; age="+age);
}

@DataProvider(name = "methodData")
public Object[][] methodDataTest(Method method){
Object[][] result=null;

if(method.getName().equals("test1")){
result = new Object[][]{
{"zhangsan",20},
{"lisi",25}
};

}else if(method.getName().equals("test2")){
result = new Object[][]{
{"wangwu",50},
{"zhaoliu",60}
};

}

return result;
}
}

疑问:以上代码按类执行,为什么先执行test1方法和test2方法后,再执行的testDataProvider方法?
解答:执行顺序是按照方法名的字典序升序排序执行的。

八.TestNG多线程测试-注解方式实现

/**
* 多线程测试,没有关联的用例可以使用多线程,减少执行时间
* 以下演示3个线程同时运行,共执行10次
*/
@Test(invocationCount = 10,threadPoolSize = 3)
public void test() {
System.out.println("*************hello world**************");
System.out.printf("Thread Id : %s%n",Thread.currentThread().getId());
}

九.TestNG多线程测试-XML文件实现

<?xml version="1.0" encoding="UTF-8" ?>
<suite name="thread" parallel="methods" thread-count="2"> ---说明:parallel指的是级别

<!--
tests级别:不同的test tag下的用例可以在不同的线程下执行---说明:此处的tests级别指的是此xml文件中的test标签
相同的test tag下的用例只能在同一个线程中去执行
classs级别:相同的class tag 下的用例在同一个线程中执行
不同的class tag 下的用例可以在不同的线程中执行
methods级别:所有用例都可以再不同的线程下去执行
thread-count:代表了最大并发线程数
xml文件配置这种方式不能指定线程池,只有方法上才可以指定线程池
-->
<test name="demo1">
<classes>

<class name="com.course.testng.multiThread.MultiThreadOnXml" />
</classes>
</test>

<test name="demo2">
<classes>

<class name="com.course.testng.multiThread.MultiThreadOnXml" />
</classes>
</test>

</suite>
 十.超时测试
package com.course.testng;

import org.testng.annotations.Test;

public class TimeOutTest {

@Test(timeOut =3000) //单位为毫秒值
public void testSuccess() throws InterruptedException {
Thread.sleep(2000);
}


@Test(timeOut =2000)
public void testFailed() throws InterruptedException {
Thread.sleep(3000);
}
}
 





 




posted on 2021-02-07 23:33  洋洋洋wy  阅读(77)  评论(0编辑  收藏  举报