TestNG简介

Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation

创建maven项目,添加依赖

  1. <dependency>
  2. <groupId>org.testng</groupId>
  3. <artifactId>testng</artifactId>
  4. <version>6.14.3</version>
  5. <scope>test</scope>
  6. </dependency>

常用注解

@BeforeSuite / @AfterSuite
@BeforeTest / @AfterTest
@BeforeClass / @AfterClass,在类运行之前/后运行
@BeforeMethod / @AfterMethod,在测试方法之前/后运行
 
  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.*;
  4. import org.testng.annotations.Test;
  5.  
  6. /**
  7. * @描述 : <...>
  8. * @博客 : www.cnblogs.com/uncleyong
  9. * @微信 : ren168632201
  10. */
  11. public class TestAnnotation {
  12. @Test
  13. public void test(){
  14. System.out.println("TestAnnotation.test");
  15. System.out.println("线程ID:" + Thread.currentThread().getId());
  16. }
  17.  
  18. @Test
  19. public void test2(){
  20. System.out.println("TestAnnotation.test2");
  21. }
  22.  
  23. @BeforeMethod
  24. public void beforeMethodTest(){
  25. System.out.println("TestAnnotation.beforeMethodTest");
  26. }
  27.  
  28. @AfterMethod
  29. public void afterMethodTest(){
  30. System.out.println("TestAnnotation.afterMethodTest");
  31. }
  32.  
  33. @BeforeClass
  34. public void beforeClassTest(){
  35. System.out.println("TestAnnotation.beforeClassTest");
  36. }
  37.  
  38. @AfterClass
  39. public void afterClassTest(){
  40. System.out.println("TestAnnotation.afterClassTest");
  41. }
  42.  
  43. @BeforeSuite
  44. public void beforeSuiteTest(){
  45. System.out.println("TestAnnotation.beforeSuiteTest");
  46. }
  47.  
  48. @AfterSuite
  49. public void afterSuiteTest(){
  50. System.out.println("TestAnnotation.afterSuiteTest");
  51. }
  52. }
 

输出结果:

  1. TestAnnotation.beforeSuiteTest
  2. TestAnnotation.beforeClassTest
  3. TestAnnotation.beforeMethodTest
  4. TestAnnotation.test
  5. 线程ID1
  6. TestAnnotation.afterMethodTest
  7. TestAnnotation.beforeMethodTest
  8. TestAnnotation.test2
  9. TestAnnotation.afterMethodTest
  10. TestAnnotation.afterClassTest
  11. TestAnnotation.afterSuiteTest

安装插件Create TestNG XML

搜索:Create TestNG XML

安装

重启后

创建xml文件

在resources下创建suite.xml,文件名随意,只要内容符合要求就可以了
 
suite:套件,包含一个或多个test
  test:测试集,包含一个或多个classes
    classes:测试类集合,包含一个或多个class
      class:测试类,包含一个或多个方法
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  3. <suite name="All Test Suite">
  4. <!--<test verbose="2" preserve-order="true" name="test">-->
  5. <test name="test">
  6. <classes>
  7. <class name="com.qzcsbj.TestAnnotation"/>
  8. </classes>
  9. </test>
  10. <test name="test2">
  11. <classes>
  12. <class name="com.qzcsbj.TestAnnotationB">
  13. <methods>
  14. <include name="testb"/> <!--指定要运行的方法-->
  15. </methods>
  16. </class>
  17. </classes>
  18. </test>
  19. </suite>

套件测试

第一个类

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.*;
  4. import org.testng.annotations.Test;
  5.  
  6. /**
  7. * @描述 : <...>
  8. * @博客 : www.cnblogs.com/uncleyong
  9. * @微信 : ren168632201
  10. */
  11. public class TestAnnotation {
  12. @Test
  13. public void test(){
  14. System.out.println("TestAnnotation.test");
  15. System.out.println("线程ID:" + Thread.currentThread().getId());
  16. }
  17.  
  18. @Test
  19. public void test2(){
  20. System.out.println("TestAnnotation.test2");
  21. }
  22.  
  23. @BeforeMethod
  24. public void beforeMethodTest(){
  25. System.out.println("TestAnnotation.beforeMethodTest");
  26. }
  27.  
  28. @AfterMethod
  29. public void afterMethodTest(){
  30. System.out.println("TestAnnotation.afterMethodTest");
  31. }
  32.  
  33. @BeforeClass
  34. public void beforeClassTest(){
  35. System.out.println("TestAnnotation.beforeClassTest");
  36. }
  37.  
  38. @AfterClass
  39. public void afterClassTest(){
  40. System.out.println("TestAnnotation.afterClassTest");
  41. }
  42.  
  43. @BeforeSuite
  44. public void beforeSuiteTest(){
  45. System.out.println("TestAnnotation.beforeSuiteTest");
  46. }
  47.  
  48. @AfterSuite
  49. public void afterSuiteTest(){
  50. System.out.println("TestAnnotation.afterSuiteTest");
  51. }
  52. }

  

第二个类

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.*;
  4. import org.testng.annotations.Test;
  5.  
  6. /**
  7. * @描述 : <...>
  8. * @博客 : www.cnblogs.com/uncleyong
  9. * @微信 : ren168632201
  10. */
  11. public class TestAnnotationB {
  12. @Test
  13. public void testb(){
  14. System.out.println("TestAnnotation.testb==");
  15. System.out.println("线程ID:" + Thread.currentThread().getId());
  16. }
  17.  
  18. @Test
  19. public void testb2(){
  20. System.out.println("TestAnnotationB.testb2==");
  21. }
  22.  
  23. @BeforeMethod
  24. public void beforeMethodTestb(){
  25. System.out.println("TestAnnotationB.beforeMethodTestb==");
  26. }
  27.  
  28. @AfterMethod
  29. public void afterMethodTestb(){
  30. System.out.println("TestAnnotationB.afterMethodTestb==");
  31. }
  32.  
  33. @BeforeClass
  34. public void beforeClassTestb(){
  35. System.out.println("TestAnnotationB.beforeClassTestb==");
  36. }
  37.  
  38. @AfterClass
  39. public void afterClassTestb(){
  40. System.out.println("TestAnnotationB.afterClassTestb==");
  41. }
  42.  
  43. @BeforeSuite
  44. public void beforeSuiteTestb(){
  45. System.out.println("TestAnnotationB.beforeSuiteTestb==");
  46. }
  47.  
  48. @AfterSuite
  49. public void afterSuiteTestb(){
  50. System.out.println("TestAnnotationB.afterSuiteTestb==");
  51. }
  52. }

输出结果:

  1. TestAnnotation.beforeSuiteTest
  2. TestAnnotationB.beforeSuiteTestb==
  3.  
  4. TestAnnotation.beforeClassTest
  5. TestAnnotation.beforeMethodTest
  6. TestAnnotation.test
  7. 线程ID1
  8. TestAnnotation.afterMethodTest
  9.  
  10. TestAnnotation.beforeMethodTest
  11. TestAnnotation.test2
  12. TestAnnotation.afterMethodTest
  13. TestAnnotation.afterClassTest
  14.  
  15. TestAnnotationB.beforeClassTestb==
  16. TestAnnotationB.beforeMethodTestb==
  17. TestAnnotation.testb==
  18. 线程ID1
  19.  
  20. TestAnnotationB.afterMethodTestb==
  21. TestAnnotationB.afterClassTestb==
  22.  
  23. TestAnnotation.afterSuiteTest
  24. TestAnnotationB.afterSuiteTestb==

忽略测试

测试过程中,问题还没解决,可以先忽略,也就是不执行此方法

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.Test;
  4.  
  5. /**
  6. * @博客 : www.cnblogs.com/uncleyong
  7. * @微信 : ren168632201
  8. * @描述 : <...>
  9. */
  10. public class TestIgnore {
  11. @Test
  12. public void testa(){
  13. System.out.println("TestIgnore.testa");
  14. }
  15.  
  16. @Test(enabled = true)
  17. public void testb(){
  18. System.out.println("TestIgnore.testb");
  19. }
  20.  
  21. @Test(enabled = false)
  22. public void testc(){
  23. System.out.println("TestIgnore.testc");
  24. }
  25. }

运行结果:

  1. TestIgnore.testa
  2. TestIgnore.testb

分组测试

场景︰只想执行个别或者某一部分的测试用例

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.AfterGroups;
  4. import org.testng.annotations.BeforeGroups;
  5. import org.testng.annotations.Test;
  6.  
  7. /**
  8. * @博客 : www.cnblogs.com/uncleyong
  9. * @微信 : ren168632201
  10. * @描述 : <...>
  11. */
  12. public class TestGroups {
  13. @Test(groups = "login")
  14. public void testa(){
  15. System.out.println("TestIgnore.testa");
  16. }
  17.  
  18. @Test(groups = "submitOrder")
  19. public void testb(){
  20. System.out.println("TestIgnore.testb");
  21. }
  22.  
  23. @Test(groups = "submitOrder")
  24. public void testc(){
  25. System.out.println("TestIgnore.testc");
  26. }
  27.  
  28. @BeforeGroups("submitOrder")
  29. public void testBeforeGroups(){
  30. System.out.println("TestGroups.testBeforeGroups");
  31. }
  32.  
  33. @AfterGroups("submitOrder")
  34. public void testAfterGroup(){
  35. System.out.println("TestGroups.testAfterGroup");
  36. }
  37. }

  

输出结果:

  1. TestIgnore.testa
  2. TestGroups.testBeforeGroups
  3. TestIgnore.testb
  4. TestIgnore.testc
  5. TestGroups.testAfterGroup

xml方式

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  3. <suite name="All Test Suite">
  4. <!--<test verbose="2" preserve-order="true" name="test">-->
  5. <test name="test"> <!--test必须有name属性-->
  6. <groups>
  7. <run>
  8. <include name="submitOrder"/>
  9. </run>
  10. </groups>
  11. <classes>
  12. <class name="com.qzcsbj.TestGroups"/>
  13. </classes>
  14. </test>
  15. </suite>

输出结果:

  1. TestGroups.testBeforeGroups
  2. TestIgnore.testb
  3. TestIgnore.testc
  4. TestGroups.testAfterGroup

依赖测试

字符串数组,默认是空

dependsOnMethods和BeforeMethod的区别是: BeforeMethod是每个方法前都要执行,而dependsOnMethods只是依赖的方法前执行

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.Test;
  4.  
  5. /**
  6. * @博客 : www.cnblogs.com/uncleyong
  7. * @微信 : ren168632201
  8. * @描述 : <...>
  9. */
  10. public class TestDepend {
  11. @Test(dependsOnMethods = {"test2"})
  12. public void test(){
  13. System.out.println("TestAnnotation.test");
  14. }
  15.  
  16. @Test
  17. public void test2(){
  18. System.out.println("TestAnnotation.test2");
  19. }
  20. }

  

运行结果:

  1. TestAnnotation.test2
  2. TestAnnotation.test

如果被依赖方法执行失败,有依赖关系的方法不会被执行;

应用场景,登录失败,就不能进行下单等操作

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.Test;
  4.  
  5. /**
  6. * @博客 : www.cnblogs.com/uncleyong
  7. * @微信 : ren168632201
  8. * @描述 : <...>
  9. */
  10. public class TestDepend {
  11. @Test(dependsOnMethods = {"test2"})
  12. public void test(){
  13. System.out.println("TestAnnotation.test");
  14. }
  15.  
  16. @Test
  17. public void test2(){
  18. System.out.println("TestAnnotation.test2");
  19. throw new RuntimeException(); // 抛出一个异常
  20. }
  21. }

运行结果:

  1. TestAnnotation.test2
  2.  
  3. java.lang.RuntimeException
  4. at com.qzcsbj.TestDepend.test2(TestDepend.java:19)
  5. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  6. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  7. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  8. at java.lang.reflect.Method.invoke(Method.java:498)
  9. at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
  10. at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
  11. at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
  12. at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
  13. at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
  14. at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
  15. at org.testng.TestRunner.privateRun(TestRunner.java:648)
  16. at org.testng.TestRunner.run(TestRunner.java:505)
  17. at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
  18. at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
  19. at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
  20. at org.testng.SuiteRunner.run(SuiteRunner.java:364)
  21. at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
  22. at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
  23. at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
  24. at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
  25. at org.testng.TestNG.runSuites(TestNG.java:1049)
  26. at org.testng.TestNG.run(TestNG.java:1017)
  27. at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
  28. at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

超时

timeout属性的单位为毫秒。

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.Test;
  4. /**
  5. * @博客 : www.cnblogs.com/uncleyong
  6. * @微信 : ren168632201
  7. * @描述 : <...>
  8. */
  9. public class TestTimeOut {
  10. @Test(timeOut = 1000) // 单位为毫秒值,期望在1秒内得到结果
  11. public void test() throws InterruptedException {
  12. System.out.println("TestTimeOut.test");
  13. Thread.sleep(500);
  14. }
  15.  
  16. @Test(timeOut = 1000)
  17. public void test2() throws InterruptedException {
  18. System.out.println("TestTimeOut.test2");
  19. for (int i = 10; i > 0; i--) {
  20. Thread.sleep(101);
  21. System.out.println(i);
  22. }
  23. System.out.println("执行结束。");
  24. }
  25. }

输出结果:

  1. TestTimeOut.test2
  2. 10
  3. 9
  4. 8
  5. 7
  6. 6
  7. 5
  8. 4
  9. 3
  10. 2
  11.  
  12. org.testng.internal.thread.ThreadTimeoutException: Method com.qzcsbj.TestTimeOut.test2() didn't finish within the time-out 1000
  13.  
  14. at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.signalAll(AbstractQueuedSynchronizer.java:1953)
  15. at java.util.concurrent.ThreadPoolExecutor.tryTerminate(ThreadPoolExecutor.java:716)
  16. at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1014)
  17. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
  18. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  19. at java.lang.Thread.run(Thread.java:748)

断言

  1. package com.qzcsbj;
  2.  
  3. /**
  4. * @博客 : www.cnblogs.com/uncleyong
  5. * @微信 : ren168632201
  6. * @描述 : <...>
  7. */
  8. public class Add {
  9. public int sum(int a, int b){
  10. return a+b;
  11. }
  12. }
  1. package com.qzcsbj;
  2.  
  3. import org.testng.Assert;
  4. import org.testng.annotations.Test;
  5.  
  6. public class MyTest {
  7. @Test
  8. public void test(){
  9. Add add = new Add();
  10. int actual = add.sum(1, 2);
  11. int expect = 2;
  12. Assert.assertEquals(actual,expect);
  13. }
  14. }

参数化(数据驱动测试)

两种方式向测试方法传递参数:

  利用testng.xml定义parameter

  利用DataProviders

xml文件参数化

  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.Parameters;
  4. import org.testng.annotations.Test;
  5.  
  6. /**
  7. * @博客 : www.cnblogs.com/uncleyong
  8. * @微信 : ren168632201
  9. * @描述 : <...>
  10. */
  11. public class TestParameter {
  12. @Test
  13. @Parameters({"name","id"})
  14. public void test(String name, int id){
  15. System.out.println("name=" + name + ", id=" + id);
  16. }
  17. }

  

xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  3. <suite name="All Test Suite">
  4. <!--<test verbose="2" preserve-order="true" name="test">-->
  5. <test name="test"> <!--test必须有name属性-->
  6. <classes>
  7. <class name="com.qzcsbj.TestParameter">
  8. <parameter name="name" value="qzcsbj"/>
  9. <parameter name="id" value="1"/>
  10. </class>
  11. </classes>
  12. </test>
  13. </suite>

  

运行结果:

  1. name=qzcsbj, id=1

DataProvider参数化

代码和数据未分离
  1. package com.qzcsbj;
  2.  
  3. import org.testng.annotations.DataProvider;
  4. import org.testng.annotations.Test;
  5.  
  6. /**
  7. * @博客 : www.cnblogs.com/uncleyong
  8. * @微信 : ren168632201
  9. * @描述 : <...>
  10. */
  11. public class TestDataProvider {
  12. @Test(dataProvider="data") // 和下面的name对应起来
  13. public void testDataProvider(String name, int id){
  14. System.out.println("name=" + name + ", id=" + id);
  15. }
  16. @DataProvider(name = "data") // 如果没有指定name,上面就写下面的方法名:providerData
  17. public Object[][] providerData(){
  18. Object[][] datas = new Object[][]{
  19. {"zhangsan",1001},
  20. {"lisi",1002},
  21. {"wangwu",1003}
  22. };
  23. return datas;
  24. }
  25. }

  

运行结果:

  1. name=zhangsan, id=1001
  2. name=lisi, id=1002
  3. name=wangwu, id=1003
代码和数据分离,数据存放在excel中

sheet名为data

ExcelUtil.java

  1. package com.qzcsbj;
  2.  
  3. import org.apache.poi.ss.usermodel.*;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.util.Arrays;
  7.  
  8. /**
  9. * @公众号 : 全栈测试笔记
  10. * @博客 : www.cnblogs.com/uncleyong
  11. * @微信 : ren168632201
  12. * @描述 : <>
  13. */
  14. public class ExcelUtil {
  15. // 方法也可以根据情况定义更多参数,比如读取excel的列范围
  16. public static Object[][] getdataFromExcel(String excelPath){
  17. Object[][] datas = null;
  18. try {
  19. // 获取workbook对象
  20. Workbook workbook = WorkbookFactory.create(new File(excelPath));
  21. // 获取sheet对象
  22. Sheet sheet = workbook.getSheet("data");
  23. datas = new Object[4][2];
  24. // 获取行
  25. for (int i = 1; i < 5; i++) {
  26. Row row = sheet.getRow(i);
  27. // 获取列
  28. for (int j=0; j<=1;j++){
  29. Cell cell = row.getCell(j);
  30. cell.setCellType(CellType.STRING);
  31. String value = cell.getStringCellValue();
  32. datas[i-1][j] = value;
  33. }
  34. }
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. return datas;
  39. }
  40.  
  41. public static void main(String[] args) {
  42. String excelPath = "E:\\case.xlsx";
  43. Object[][] datas = getdataFromExcel(excelPath);
  44. for (Object[] data : datas) {
  45. System.out.println(Arrays.toString(data));
  46. }
  47. }
  48. }

上面读取到的数据

LoginCase.java

  1. package com.qzcsbj;
  2.  
  3. import com.qzcsbj.HttpPostRequest;
  4. import org.testng.annotations.DataProvider;
  5. import org.testng.annotations.Test;
  6. import java.util.HashMap;
  7.  
  8. /**
  9. * @博客 : www.cnblogs.com/uncleyong
  10. * @微信 : ren168632201
  11. * @描述 : <...>
  12. */
  13. public class LoginCase {
  14. @Test(dataProvider = "datasFromExcel") // 多条数据,且数据和代码分离
  15. public void test(String username, String password){
  16. String url = "http://127.0.0.1:9999/login";
  17. HashMap<String, String> params = new HashMap<String, String>();
  18. params.put("username", username);
  19. params.put("password", password);
  20. String res = HttpPostRequest.postRequest(url, params);
  21. System.out.println("入参:username=" + username + ", password=" + password);
  22. System.out.println("响应:" + res);
  23. System.out.println("============================\n");
  24. }
  25.  
  26. @DataProvider(name = "datasFromExcel")
  27. public Object[][] datasFromExcel(){
  28. Object[][] datas = ExcelUtil.getdataFromExcel("E:\\case.xlsx");
  29. return datas;
  30. }
  31. }

进一步优化

把用例数据都放到excel中,读取excel文件,写一个CaseUtil工具类,根据接口编号来获取这个接口的测试数据,并获取指定列,比如:

Object[][] datas = CaseUtil.getDataByApiId("1",columns);

【bak】https://www.cnblogs.com/uncleyong/p/15855473.html

原文:https://www.cnblogs.com/uncleyong/p/15867747.html

TestNG基本使用的更多相关文章

  1. TestNG 入门教程

    原文出处:http://www.cnblogs.com/TankXiao/p/3888070.html 阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装T ...

  2. JUnit 4 与 TestNG 对比

    原文出处: 付学良的网志 原文出处2: http://www.importnew.com/16270.html -------------------------------------------- ...

  3. JAVA+Maven+TestNG搭建接口测试框架及实例

    1.配置JDK 见另一篇博客:http://www.cnblogs.com/testlurunxiu/p/5933912.html 2.安装Eclipse以及TestNG Eclipse下载地址:ht ...

  4. Idea+TestNg配置test-output输出

    说明:testNG的工程我是使用eclipse创建的,直接导入到idea中,运行test时不会生产test-output,只能在idea的控制台中查看运行结果,然后到处报告,经过不懈的百度终于找到怎么 ...

  5. testng 失败自动截图

    testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...

  6. 两种方式testng dataprovider结合csv做测试驱动

    方式一: 第一.读取csv数据源码 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  7. java分享第十九天(TestNg的IReporter接口的使用)

     IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么 ...

  8. java分享第十八天-02( java结合testng,利用XML做数据源的数据驱动)

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例:备注:@DataProvider的返回值类 ...

  9. java分享第十四天(TestNG Assert详解)

     TestNG Assert 详解org.testng.Assert 用来校验接口测试的结果,那么它提供哪些方法呢? 中心为Assert测试类,一级节点为方法例如assertEquals,二级结点为参 ...

  10. TestNG Assert 详解

    org.testng.Assert 用来校验接口测试的结果,那么它提供哪些方法呢? 中心为Assert测试类,一级节点为方法例如assertEquals,二级结点为参数类型及参数个数,double 3 ...

随机推荐

  1. 《剑指offer》面试题28. 对称的二叉树

    问题描述 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的.     1    / \   2   ...

  2. 使用Redis分布式锁控制请求串行处理

    1.需求背景 在一些写接口的场景下,由于一些网络因素导致用户的表单重复提交,就会在相邻很短的时间内,发出多个数据一样的请求.后台接口的幂等性保证一般都是先检查数据的状态,然后决定是否进行执行写入操作, ...

  3. 与Elasticsearch交互的客户端

    1.访问ES的方式 访问es的方式有两种,一种是http方式,还有一种是java客户端方式. 其中Java客户端又分为:1.1.Node client: 节点客户端实际上是一个集群中的节点(但不保存数 ...

  4. golang中的数组

    1. 数组的声明 package main import "fmt" func main() { // 数组:定长且元素类型一致的数据集合 // 方式一:先声明在赋值,声明时内存中 ...

  5. Sping简介

    SSH:Struct2 + Spring +Hibernate SSM:SpringMVC + Spring + Mybatis 优点 1,Sping是一个开源的免费的框架(容器) 2,Spirng是 ...

  6. CSS八种让人眼前一亮的HOVER效果

    一.发送效果 HTML <div id="send-btn"> <button> // 这里是一个svg的占位 Send </button> & ...

  7. IDEA2020.1破解

    IDEA2020.1破解 安装 下载idea idea官方下载地址:https://www.jetbrains.com/webstorm/download/other.html 下载破解插件 链接:h ...

  8. APC 篇——备用 APC 队列

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  9. 学习Java第13天

    今天选择数据库选了半天,Oracle,MySQL,SQL sever太难了,安装了又被图形界面,Linux虚拟机所困扰 明天尽量完成数据库安装 只能说是找视频资料和安装教程了.

  10. 右键没有word?excel?ppt?注解表该改改啦

    ✿[office 2019]office2010版本以上的都可以(例如:office 2010.office 2016.office 2019) 一.快速方法解决右键没有word: 在电脑桌面右键一个 ...