11_测试框架TestNG使用介绍

一、TestNG基本介绍

TestNG是Java中的一个测试框架,是一个目前很流行实用的单元测试框架,有完善的用例管理模块,配合Maven能够很方便管理依赖第三方插件。使用TestNG可以做功能、接口、单元、集成的自动化测试,最常见的是结合selenium做功能自动化测试,它使用Java注释去写测试方法。
测试人员一般用TestNG来写自动化测试,开发人员一般用Junit写单元测试,TestNG适合测试人员使用的原因:

  1. 比Junit涵盖功能更全面的测试框架;
  2. Junit更适合隔离性比较强的单元测试;
  3. TestNG更适合复杂的集成测试。

编写一个测试的过程包含以下步骤:

  1. 编写测试的业务逻辑并在代码中插入TestNG annotation;
  2. 将测试信息添加到testng.xml文件或build.xml中;
  3. 运行TestNG。

二、TestNG使用

TestNG应用上相对来说比较简单,把它的注解理解了,相当于会了一大半了
1. 在Maven中引用TestNG
使用Maven作为项目管理工具,需要在pom.xml中添加以下依赖,将groupId、artifactId和version引进来后,就可以使用Maven框架进行自动下载和使用。

<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
</dependencies>

2. 在IDEA中创建module
新建一个文件夹用于该项目:AutoTest。使用IntelliJ IDEA打开该文件夹(File—>open),在该文件夹上面点击右键—>New—>module(module意思是它都归这个工程管)—>选择Maven点击Next—>填写GroupId和ArtifactId,点击Next—>创建了一个module,点击Finished(GroupId:一般是域名的反写,也作为项目中类的包名,是main目录里java的目录结构;ArtifactId:工程名,也就是根文件夹名)
在这里插入图片描述

创建了一个module,被认为工程的标志,根文件夹名前右下角为蓝色的,java前也是蓝色的,resources资源目录文件是图中的文件标志,工程目录结构如图所示:
在这里插入图片描述

3. 最基本的注解@Test
Module已创建完毕后,就可以开始了解TestNG的基本注解啦。
1)在java文件上右击—>new—>Package,创建一个包,包名:com.test.testng。(在公司,开发一个项目的时候每个功能模块肯定是放在某个包下,一般包名是以:最高域名.公司名/个人名.模块名)
2)在包中创建一个类,这个类就是为了运行TestNG里的代码创建的。点击包右键—>new—>Java Class,输入类名:BasicAnnotation—>OK
3)在pom中引用TestNG。TestNG与IDEA集成的比较好的一点是:假设在pom中没引用TestNG,也会进行提示。
4)创建一个方法:testCase1,在方法前加“@Test”,是最基本的注解,用来把方法标记为测试的一部分。
在这里插入图片描述
在@Test为红色时,说明没有import对应的方法,在此我们可以进行设置一下自动优化导入包:
File—>settings—>Editor—>General—>Auto Import,将下图中1和2 进行勾选,
1:IDEA将在我们写代码的时候自动棒我们导入需要用到的包,但是有多个同名的类调用不同的包,还是需要手动(Alt+Enter)设置。
2:IDEA将在我们写代码的时候自动帮我们优化导入的包,比如自动去掉一些没有用的包。

4. 注解之@BeforeMethod和@AfterMethod
除了最基本的注解外,还有标签可以进行标注在这个方法之前或者之后运行。
创建两个方法:beforeMethod和afterMethod, 同时再创建一个testCase2方法—>Run类,输出内容可以更直观理解。注:输入sout回车,即可输出System.out.println()。
在这里插入图片描述
可以看到,BeforeMethod/AfterMethod在每个方法运行之前/之后都会运行一次。在以后写测试用例时,在测试方法之前/之后必须要运行的都可以写到BeforeMethod/AfterMethod里。

5. 注解之@BeforeClass和@AfterClass
@BeforeClass和@AfterClass是在类运行之前和之后的注解。
创建两个方法:beforeClass和afterClass—>Run类,如下图所示:
在这里插入图片描述
@BeforeClass和@AfterClass使用场景举例:在类运行前,是否需要变量赋值、初始化对象等,写完后其它方法里就都可以使用了。

6. 注解之@BeforeSuite和@AfterSuite
在注解中,执行顺序非常非常重要。测试套件注解:创建两个方法beforeSuite和afterSuite—>Run类,结果如下图所示。
在这里插入图片描述
根据结果可以看到:Suite把class包裹起来了,说明类在运行之前运行了Suite,Suite可以包含多个Class,类是属于某个套件之下的。

7. 套件测试
举例讲解一下TestNG里的套件测试,虽然在TestNG里套件测试用到的相对较少,但是也要了解下滴,步骤如下:

  1. 之前在java文件中创建了一个包com.test.testng,现在在该包里新建一个包,管理所有套件测试代码(New—>PacKage,包名可以起为:suite)

  2. 在suite里创建一个类(New—>Java Class:SuiteConfig-配置类),SuiteConfigs 为了进行所有测试套件的配置,在这儿写测试的套件之前需要运行的方法。

  3. 再在suite包中创建一个类,以登录测试为例,(New—> Java Class:LoginTest-登录成功-逻辑控制类),在这儿写测试主要Test标签下面包含的那些方法。

  4. 在resources目录下创建testng.xml配置文件,一般来说配置文件叫tesng.xml,但是不是必须的,也可以叫其它名。testing.xml其实是标准的xml文件,实际上与SuiteConfig和LoginTest是有关联关系的。

  5. 打开SuiteConfig类,创建两个方法:beforeSuite和afterSuite。

  6. 再在Suite包中创建一个类:PayTest-支付成功,与LoginTest相当于一个测试组的,比较好区分。到此为止:目录结构如下图所示:
    在这里插入图片描述

  7. 打开LoginTest,写入方法:loginSogouMall,登录成功。
    在这里插入图片描述

  8. 打开PayTest,写入方法paySuccess,支付成功。
    在这里插入图片描述

  9. 打开配置文件testng.xml,根目录为suite,写入内容如下图所示,此处需要注意test标签必须定义一个名字。Run testing.xml后,根据运行结果可以看到执行顺序为1-2-3-4。
    在这里插入图片描述

8. 忽略测试
忽略测试是指本次测试执行中不想要执行的测试方法,示例如下。
1)在包com.test.testng中创建一个类,New-Java Class:IgnoreTest;
2)在IgnoreTest类中创建两个方法:ignore1和ignore2,根据输出结果可以看到,在@Test标签后加入属性(enabled=false),则可以忽略此测试方法,默认情况下enabled为true。
在这里插入图片描述
9. 组测试中的方法分组测试
首先介绍一下方法上分组,将方法进行归类。

  1. 在包com.test.testng新建一个包,管理所有套件测试代码(New—>PacKage,包名可以起为:groups);
    2)在groups包中新建一个类(New—>Java Class,方法名:GroupsOnMethod);
  2. 创建4个方法,如下图中所示,注意需要在@Test标签中添加属性groups;
    在这里插入图片描述
  3. 再创建2个方法,如下图所示,在@BeforeGroups和@AfterGroups标签后需要加入分组的名字。
    在这里插入图片描述
    多个组的写法:
public class Test1 {
  @Test(groups = { "functest", "checkintest" })
  public void testMethod1() {
  }
  @Test(groups = {"functest", "checkintest"} )
  public void testMethod2() {
  }
  @Test(groups = { "functest" })
  public void testMethod3() {
  }
}

在这里插入图片描述
在这里插入图片描述

  1. 运行类,运行结果为:
    在这里插入图片描述
  2. 通过此种做法,可以将很多个测试方法归类到一个组中,之后进行相关操作。

10. 组测试中的类分组测试
上节说的组分组,本节介绍一下类分组,将整个类文件进行分组。
1)在groups包中,创建3个类:GroupsOnClass1;GroupsOnClass2;GroupsOnClass3;
2)在GroupsOnClass1中,创建2个方法,如下图所示,此时需要注意的是@Test标签是写在类上的(标签也是可以写在类上面的),之后添加属性groups;
在这里插入图片描述
3) 在GroupsOnClass2中,创建2个方法,与GroupsOnClass1相似,相当于两个班的学生;
在这里插入图片描述
4) 在GroupsOnClass3中,创建2个方法,如下图所示;
在这里插入图片描述
5)在resources目录中创建一个xml文件:GroupsOnClass.xml,用该文件进行驱动,内容和运行结果如下图所示,运行了所有的组;
在这里插入图片描述
6) 只运行一部分组,书写及配置方法,如下图所示,结果只运行groups名字为stu的类。
在这里插入图片描述
11. 异常测试
在我们期望结果为某一个异常的时候,会用到异常测试。比如:传入某些不合法的参数,程序抛出异常。
1)新建一个类,ExpectedException;
2)创建2个方法,如下图所示,异常测试中,使用到了@Test标签中的expectedExceptions属性,根据结果可以看到成功了一条(即方法2),需要在方法中加入语句throw new RuntimeException(),需要注意的是,该语句后的内容不运行,所以一定要注意顺序。
在这里插入图片描述
12. 依赖测试
TestNGINX依赖方法是指本个测试方法执行的时候依赖于其它方法。举例说明:
1)创建一个Java类:DependTest;
2)创建2个方法:test1和test2,其中test2依赖于test1,即test1要先执行,如果test1失败,则test2不执行。此处用到@Test标签的属性dependsOnMethods,具体写法如下图所示,只运行test2,结果可以看到test1也被执行了;
在这里插入图片描述
3)在test1中加入语句:throw new RuntimeException(),抛出异常,这时候再运行test2结果会提示1 failed,1 ignored。当做依赖测试的时候,被依赖的方法若执行失败,则依赖的方法就会被忽略掉不再执行,实际场景中可以做前置条件的时候使用。

13. 参数化测试-xml文件参数化
TestNGINX允许在TestMethod以及@Before/After类注解、@Factory类注解的方法中传入参数。参数传递的方式有两种,一种是借助xml文件配置,另一种是以编码的方式传递参数。本小结介绍借助xml文件配置的方式。示例:
1)新建一个包parameter(New->Package);
2)新建一个类ParameterTest,类中新建一个方法parameTest,如下图所示,此处用到了一个新标签:@Parameters;
在这里插入图片描述
3)在resources目录下,新建一个xml配置文件,用于传参,内容如下图所示,即可运行成功。
在这里插入图片描述
14. 参数化测试-DataProvider参数化
上小结讲述了如何通过xml传递参数,本节讲述另一种方式。

  1. 新建一个类DataProviderTest;
  2. 新建两个方法,testDataprovide和ProviderData,ProviderData方法提供数据来源,返回形式Object。注意testDataprovide方法上@Test标签中dataProvider的属性值与ProviderData方法上@DataProvider标签中name的属性值要一致。
    在这里插入图片描述
    以上就是使用DataProvider如何传数据,除此之外,DataProvider支持根据方法进行参数传递,通过不同的方法传递不同的参数,示例:
    新建三个方法:test1、test2和methodDataTest,methodDataTest方法中必须填入Methodmethod,代表自动会将test1和test2方法传递进来,针对不同的方法名传递不同的参数。
    在这里插入图片描述
    15. 超时测试
    超时测试比较简单,主要是使用到@Test标签中的timeOut属性,单位为毫秒,示例:
    1)新建一个类TimeOutTest;
    2)新建两个方法,testSuccess和testFail,方法一在3000毫秒内给予响应,不抛出异常,运行成功,方法2在2000毫秒内没有得到响应,抛出异常,运行失败。
    在这里插入图片描述
    超时测试使用场景,例:在测试过程中某一段时间后无反应,想跳过,则可以使用超时测试。

16. 多线程并发执行测试
在这里插入图片描述
在这里插入图片描述
执行结果:
在这里插入图片描述
以上就是本次分享的TestNG比较常用的一些知识,希望对大家有帮助~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,针对测试框架TestNG和httpclient,我可以为你提供一些基本信息和使用建议。 首先,TestNG是一个流行的测试框架,可以用于编写和执行测试用例。它支持各种测试类型,包括单元测试、集成测试和端到端测试TestNG提供了丰富的注解和配置选项,可以灵活地定制测试流程和报告输出。 对于httpclient,它是Apache HTTP客户端库的一部分,可以用于发送HTTP请求和接收响应。httpclient支持多种HTTP协议版本和身份验证方式,以及连接池和缓存等高级功能。 在Java接口自动化测试中,通常可以使用TestNG和httpclient配合完成测试任务。你可以通过以下步骤来实现: 1. 在测试用例中使用httpclient发送HTTP请求,获取接口响应。 2. 解析响应数据,验证接口返回结果是否符合预期。可以使用TestNG提供的断言方法进行比较。 3. 在TestNG测试类中配置测试方法和测试套件,设置测试参数和测试报告输出等。 下面是一个简单的示例代码,展示了如何使用TestNG和httpclient测试一个接口: ```java import org.testng.Assert; import org.testng.annotations.Test; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; public class InterfaceTest { @Test public void testInterface() throws Exception { HttpGet request = new HttpGet("http://example.com/api/user"); HttpResponse response = HttpClientBuilder.create().build().execute(request); int statusCode = response.getStatusLine().getStatusCode(); Assert.assertEquals(statusCode, 200, "HTTP response code is not 200"); String responseBody = EntityUtils.toString(response.getEntity()); Assert.assertTrue(responseBody.contains("user"), "Response body does not contain expected string"); } } ``` 这个测试方法发送一个HTTP GET请求到指定的接口地址,然后验证响应状态码和响应内容是否符合预期。你可以根据实际需求修改测试代码,添加更多的测试步骤和断言。 希望这些信息能对你有所帮助。如果你还有其他问题或需要更深入的解答,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春暖花开dcm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值