热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

testng学习beforeafter,parameters,并行,factory,beanshell,监听器,依赖注入

一系列的beforeafter的操作测试[TestNG]Running:C:\Users\user\AppData\Local\Temp\testng-eclipse-15388

 一系列的before after的操作测试

 

[TestNG] Running:
C:\Users\user\AppData\Local\Temp\testng-eclipse-1538841744\testng-customsuite.xmlclass1-@BeforeSuite
Class2-@BeforeSuite
NewTest1-@BeforeSuite
pck1_-@BeforeSuite
pck2-@BeforeSuite
class1-@BeforeTest
Class2-@BeforeTest
NewTest1-@BeforeTest
pck1_-@BeforeTest
pck2-@BeforeTest
pck1_-@BeforeClass
pck1_-@BeforeMethod
testpck1_
pck1_-@AfterMethod
pck1_-@BeforeMethod
testpck1_
pck1_-@AfterMethod
pck1_-@AfterClass
pck2-@BeforeClass
pck2-@BeforeMethod
testpck2
pck2-@AfterMethod
pck2-@BeforeMethod
testpck2
pck2-@AfterMethod
pck2-@AfterClass
Class2-@BeforeClass
Class2-@BeforeMethod
testClass2
Class2-@AfterMethod
Class2-@BeforeMethod
testClass2
Class2-@AfterMethod
Class2-@AfterClass
NewTest1-@BeforeClass
NewTest1-@BeforeMethod
test1-----testpck1_
NewTest1-@AfterMethod
NewTest1-@BeforeMethod
test1-----testpck1_
NewTest1-@AfterMethod
NewTest1-@BeforeMethod
test2-----testpck1_
NewTest1-@AfterMethod
NewTest1-@BeforeMethod
test2-----testpck1_
NewTest1-@AfterMethod
NewTest1-@AfterClass
class1-@BeforeClass
class1-@BeforeMethod
testClass1
class1-@AfterMethod
class1-@BeforeMethod
testClass1
class1-@AfterMethod
class1-@AfterClass
class1-@AfterTest
Class2-@AfterTest
NewTest1-@AfterTest
pck1_-@AfterTest
pck2-@AfterTest
PASSED: f(1, "a")
PASSED: f(2, "b")
PASSED: f(1, "a")
PASSED: f(2, "b")
PASSED: f(1, "a")
PASSED: f(2, "b")
PASSED: f1(1, "a")
PASSED: f1(2, "b")
PASSED: f2(1, "a")
PASSED: f2(2, "b")
PASSED: f(1, "a")
PASSED: f(2, "b")===============================================
Default test
Tests run: 12, Failures: 0, Skips: 0
===============================================class1-@AfterSuite
Class2-@AfterSuite
NewTest1-@AfterSuite
pck1_-@AfterSuite
pck2-@AfterSuite===============================================
Default suite
Total tests run: 12, Failures: 0, Skips: 0
===============================================[TestNG] Time taken by org.testng.reporters.EmailableReporter2@694e1548: 16 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@7f13d6e: 219 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@4e7dc304: 92 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@184f6be2: 47 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@2a742aa2: 297 ms

 

由操作日志可以得出:

  按照时间线排列

1.before suite ,在多个class中写了,在执行的时候,会把每个class的beforeSuite先执行

2.beforeTest ,在多个class中写了,在执行的时候,会把每个class的beforeTest执行

3.beforeClass,在不同的class中写了,在执行的时候,会在对应class的beforeClass执行

4.beforeMethod,一个class中,写了好几个@test,在执行的时候,会在每个@test用例执行beforeMethod

5.AfterMethod,该class中,每个@test执行完后,都执行AfterMethod

6.AfterClass,在每个class执行完后,执行对应class的AfterClass

7.AfterTest,在所有class执行完后,执行所有的AfterTest

8.AfterSuite在测试结果已经得出,测试已经完成了,执行所有的AfterSuite

 

疑问:AfterTest和AfterSuite到底有啥差别?

parameters

 

parameters 在使用两个参数时,一直报错:

 

参考下 https://www.cnblogs.com/meitian/p/5199079.html

 

结论:

 

1.parameter写了之后,在xml里面添加值,执行也必须使用xml执行;

 

2.@parameter和@Test 谁前谁后并不重要;

 

3.调用的方法如果涉及传参,似乎要很注意,我这里卡住了。。。

 

 

 

写了个测试demo

 

public class test {@Test@Parameters({"username","password"})public void test (String username ,String password){System.out.println("username is :"+username+",password is "+password);}
}

 

  直接执行这个class,会出现报错

 

Parameter 'username' is required by @Test on method test but has not been marked @Optional or defined
in C:\Users\user\AppData\Local\Temp\testng-eclipse-63400206\testng-customsuite.xml

 

执行testng.xml

 

执行顺畅:

 

username is :test1994,password is qwer1234

 

 

 

testng并行:

  当前暂时用不上,以后可用于参考:

    https://blog.csdn.net/wanghantong/article/details/40394625

testng的@Factory注解

  如果用例使用的数据有一定的规律,可以用程序实现,就可以用factory对数据进行初始化赋值,交给test执行。  

  factory注解相关   https://www.cnblogs.com/silence-hust/p/4539363.html

  dataprovider和factory的区别:

    -factory用程序实现给test赋值

    -dataprovider是存储的数据,可以给factory,也可以给test

  dataprovider和factory的混用  https://blog.csdn.net/wanghantong/article/details/39271015

  示例:

      测试数据提供的测试账号,是test5~test10,test1994~test1998.

      如果只用dataprovider来提供数据,就需要写一大串的测试账号,如果使用dataprovider和factory,只需要用以下的代码解决

 

public class TestngFactory { @Factory (dataProvider="account_Name") //这个方法是factory创建测试实例数组的方法,并调用dataprovider的数据public Object[] createInstances(int a,int b) {System.out.println("a:"+a+",b:"+b);int sub=Math.abs(a-b)+1;Object[]result = new Object[sub];for(int i = 0; i           //这个方法返回测试用例,并给测试用例传参result[i] = new FactoryTest("test"+iString); }return result; }@DataProvider(name = "account_Name")public Object[][] accountName(){
      //设置数据来源,提供给factory使用return new Object[][]{{new Integer(1994),new Integer(1998)},{new Integer(5),new Integer(10)}};}
}

  

public class FactoryTest {private String accountName;
        //测试用例类的构造方法,用于初始化测试类,并提供数据public FactoryTest(String accountName) { this.accountName = accountName; } @Test
        //测试用例,使用数据public void testServer() { System.out.println("accountName :" + accountName); }
}

 

testng+beanshell

  不懂是什么,我记得jmeter里面beanshell是用来断言的,但是testng的,我看很多博客都是说是用来选择执行的用例的。

  jmeter相关https://blog.csdn.net/cyjs1988/article/details/79715592

  有待理解。 

testng监听器 

  https://www.ibm.com/developerworks/cn/opensource/os-cn-testinglistener/index.html

  在学习extentsreports美化测试报告,里面很多用到了两个监听器:IReport ,TestListenerAdapter

  两者的用途:前者是用来出报告,后者用来监听测试的状态(start,success,failure,skip)

 

  就研究了一下testng自带的监听器。

 

参考:https://www.cnblogs.com/superbaby11/p/6400686.html

 

http://blog.csdn.net/huazhongkejidaxuezpp/article/details/48662833

 

 

 

作用:

 

用来监听testng的执行状态,来做一些对应的操作。

 

比如开始测试前记录一下时间,测试完成后发个结果的邮件;用例成功了就标记一下,用例失败了重新跑。

 

 

 

步骤:

 

1.初始化监听器,做一些基本的监听操作设置:

 

package testNGReport;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter; public class UserDefinedReporter extends TestListenerAdapter{ private int m_count = 0; @Overridepublic void onTestStart(ITestResult result){System.out.println("Test started running "+result.getMethod().getMethodName()+"at "+result.getStartMillis());}@Override public void onTestFailure(ITestResult tr) { log(tr.getName()+ "--Test method failed\n"); } @Override public void onTestSkipped(ITestResult tr) { log(tr.getName()+ "--Test method skipped\n"); } @Override public void onTestSuccess(ITestResult tr) { log(tr.getName()+ "--Test method success\n"); } public void onTestFailedButWithinSuccessPercentage(ITestResult result) {System.out.println("Result fail but with success percentage");}public void onStart(ITestContext context) {System.out.println("now start test");}public void onFinish(ITestContext context) {System.out.println("now finish test");}private void log(String string) { System.out.print(string); if (++m_count % 40 == 0) { System.out.println(""); } } }

 

  2.在test.xml中添加监听器

 





 

  除了步骤2 ,还可以使用其他的方法调用监听器:

 

    在执行的用例中,使用监听器

 

package com.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;import testNGReport.UserDefinedReporter;
@Listeners(UserDefinedReporter.class)//这个语句指明了使用自定义的listener。
public class test {&#64;DataProvider(name &#61; "createData")public Iterator createData(){List dataProvider &#61; new ArrayList();for (int i&#61;0;i<2;i&#43;&#43;){String[] s &#61; {String.format("我是第&#xff08;%s&#xff09;个参数",i)};dataProvider.add(s);}return dataProvider.iterator();}&#64;Test(dataProvider &#61; "createData")public void dataProviderTest(String s){//输出log会在报告中提现Reporter.log("获取到参数&#xff1a;"&#43;s,true);Assert.assertTrue(s.length()>2," 成功&#xff1f;失败&#xff1f;");}&#64;Testpublic void testTrue() {Assert.assertTrue(true,"成功咯!");}&#64;Testpublic void testFail() {Assert.fail("失败咯!");}&#64;Test&#64;Parameters({ "username", "password" }) public void test(String username,String password){System.out.println("the username is :"&#43;username&#43;",the password is :"&#43;password);Assert.assertTrue(1&#61;&#61;1, "1!&#61;1");}}

 

 

 

执行之后查看结果&#xff1a;

 

[RemoteTestNG] detected TestNG version 6.13.1
now start test
now start test
Test started running dataProviderTestat 1516171050894
Test started running dataProviderTestat 1516171050894
获取到参数&#xff1a;我是第&#xff08;0&#xff09;个参数
dataProviderTest--Test method success
dataProviderTest--Test method success
Test started running dataProviderTestat 1516171050909
Test started running dataProviderTestat 1516171050909
获取到参数&#xff1a;我是第&#xff08;1&#xff09;个参数
dataProviderTest--Test method success
dataProviderTest--Test method success
now finish test
now finish test
now start test
now start test
Test started running testTrueat 1516171050925
Test started running testTrueat 1516171050925
testTrue--Test method success
testTrue--Test method success
now finish test
now finish test&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
suite1下有多test
Total tests run: 3, Failures: 0, Skips: 0
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;

 

  

 

 

 

依赖注入

Dependency injection

  

转:https://www.cnblogs.com/zhizhiyin/p/9050241.html



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
author-avatar
Lucky_Leeing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有