一系列的before after的操作测试

[TestNG] Running:
C:\Users\user\AppData\Local\Temp\testng-eclipse-1538841744\testng-customsuite.xml class1-@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 <sub; i++) {
String iString =String.valueOf(a+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;
@Override
public 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中添加监听器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="suite1下有多test" verbose="1" preserve-order="true" parallel="false">
<!--
<listeners>
<listener class-name="extentReport.ExtentTestNGIReporterListener"></listener>
</listeners>
-->
<listeners>
<listener class-name="testNGReport.UserDefinedReporter"></listener>
</listeners>
<test name="有参数的用例的test">
<classes>
<class name="com.test.test">
<methods>
<include name="dataProviderTest"></include>
</methods>
</class>
</classes>
</test>
<test name="成功的test">
<classes>
<class name="com.test.test">
<methods>
<include name="testTrue"></include>
</methods>
</class>
</classes>
</test>
</suite>

  除了步骤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 {
@DataProvider(name = "createData")
public Iterator<Object[]> createData(){
List<Object[]> dataProvider = new ArrayList<Object[]>();
for (int i=0;i<2;i++){
String[] s = {String.format("我是第(%s)个参数",i)};
dataProvider.add(s);
}
return dataProvider.iterator();
} @Test(dataProvider = "createData")
public void dataProviderTest(String s){
//输出log会在报告中提现
Reporter.log("获取到参数:"+s,true);
Assert.assertTrue(s.length()>2," 成功?失败?");
} @Test
public void testTrue() {
Assert.assertTrue(true,"成功咯!");
} @Test
public void testFail() {
Assert.fail("失败咯!");
}
@Test
@Parameters({ "username", "password" })
public void test(String username,String password){
System.out.println("the username is :"+username+",the password is :"+password);
Assert.assertTrue(1==1, "1!=1");
} }

 

执行之后查看结果:

[RemoteTestNG] detected TestNG version 6.13.1
now start test
now start test
Test started running dataProviderTestat 1516171050894
Test started running dataProviderTestat 1516171050894
获取到参数:我是第(0)个参数
dataProviderTest--Test method success
dataProviderTest--Test method success
Test started running dataProviderTestat 1516171050909
Test started running dataProviderTestat 1516171050909
获取到参数:我是第(1)个参数
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 ===============================================
suite1下有多test
Total tests run: 3, Failures: 0, Skips: 0
===============================================

  

 

依赖注入

Dependency injection

  

testng学习-before&after,parameters,并行,factory,beanshell,监听器,依赖注入的更多相关文章

  1. AngularJs:Service、Factory、Provider依赖注入使用与区别

           本教程使用AngularJS版本:1.5.3        AngularJs GitHub: https://github.com/angular/angular.js/       ...

  2. Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

    一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.S ...

  3. 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory

    spring Ioc依赖注入控制反转 事实上这个东西很好理解的,并非那么的复杂. 当某个Java对象,须要调用还有一个Java对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...

  4. 跟我学AngularJs:Service、Factory、Provider依赖注入使用与差别

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka        本教程使用AngularJs版本号:1.5.3        AngularJ ...

  5. Spring.Net 入门学习(一)实现控制器翻转与依赖注入

    Spring.net IOC:Invasion of Control,控制器翻转,名字由英文翻译过来就是这个意思了,其实用通俗的话来说就是:将创建对象的职责交给控制器来做,这个控制器就是spring了 ...

  6. Spring4学习回顾之路03—XML配置Bean ,依赖注入的方式

    配置Bean的形式可以基于XML文件的方式,也可以基于注解的方式,而Bean的配置方式可以通过全类名(反射),通过工厂方式和FactoryBean. XML形式 <?xml version=&q ...

  7. Spring学习(二)三种方式的依赖注入

    1.前言 上一篇讲到第一个Spring项目的创建.以及bean的注入.当然.注入的方式一共有三种.本文将展开细说. 1.set注入:本质是通过set方法赋值 1.创建老师类和课程类 1.Course ...

  8. TestNG学习-001-基础理论知识

    此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestN ...

  9. TestNG学习-002-annotaton 注解概述及其执行顺序

    此文主要讲述用 TestNG 基础的 annotation (注解)知识,及其执行的顺序,并通过一个 TestNG 简单的实例演示 annotation 的执行顺序. 希望能对初学 TestNG 测试 ...

随机推荐

  1. 表单中input name属性有无[]的区别

    1 input数组 如下一个表单: <input type="text" name="username[]" value="Jason" ...

  2. Python——组图Canvas控制参数

    一.参数说明 background(bg) : 背景色; foreground(fg): 前景色; borderwidth :组件边框宽度: width  : 组件宽度: height  : 高度; ...

  3. 我的Git

    1.git 的安装与配置. 首先,对git进行下载.然后,在本地安装后进行版本查看,win10系统通过win+r快捷键打开控制台,然后用git --version的cmd命令查看git版本. 然后对g ...

  4. spring @Validated 注解开发中使用group分组校验

    之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...

  5. How to execute a Stored Procedure with Entity Framework Code First

    Recently I worked on a project, which I started as code first and then I forced to switch to Databas ...

  6. C语言实现字符串逆序输出

    方法一: #include <stdio.h> #include <stdlib.h> #include <string.h> void Reverse(char ...

  7. Spring Boot自动配置与Spring 条件化配置

    SpringBoot自动配置 SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,简化开发时间,无需浪费时间讨论具体的Spring配置,只需考虑如何利用SpringBoot的自动配置即 ...

  8. BZOJ3730震波——动态点分治+线段树(点分树套线段树)

    题目描述 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土地常常发生地震,并且随着时代的发展,城市 ...

  9. python_sort(key=) 的使用

    """ sort() 函数内含有 key 可以指定相关的函数来作为排序依据 比如这里指定每一项的索引为1 的元素作为排序依据 默认是以第一个作为排序依据 "&q ...

  10. Failed to load package MonoAndroidDesignerPackage

    from : https://developercommunity.visualstudio.com/content/problem/160124/failed-to-load-package-mon ...