一、指定test class

Test class FirstTest

package cas.eric;

import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test; public class FirstTest {
@Test
@Parameters({"name"})
public void test_one(@Optional("zhangsan") String name){
System.out.println("test one");
//如果变量name有值则打印传入的name值,如果没有则打印默认值zhangsan
System.out.println(name);
}
}

执行testng的class:TestngRun

package cas.eric;

import org.testng.TestNG;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class TestngRun { public static void main(String[] args) {
//新建一个XmlSuite对象
XmlSuite xmlSuite = new XmlSuite();
//指定xmlsuite 名称
xmlSuite.setName("xml test suite");
//指定name 参数值
Map<String,String> parameters = new HashMap<>();
parameters.put("name", "lisi");
//xmlsuite添加parameters
xmlSuite.setParameters(parameters);
//新建一个XmlTest对象
XmlTest xmlTest = new XmlTest(xmlSuite);
//设置xmltest 名称
xmlTest.setName("xml test");
//新建xmlclass 对象
List<XmlClass> classes = new ArrayList<>();
String packageName = TestngRun.class.getPackage().getName();
classes.add(new XmlClass(packageName+".FirstTest"));
xmlTest.setXmlClasses(classes);
List<XmlSuite> suites = new ArrayList<>();
suites.add(xmlSuite);
TestNG testNG = new TestNG();
testNG.setXmlSuites(suites);
testNG.run();
} }

打印结果:

test one
lisi

二、指定xml文件

testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<test verbose="2" preserve-order="true" name="test">
<classes>
<class name="cas.eric.FirstTest"></class>
</classes>
</test>
</suite>

TestngRun.java

 package cas.eric;

 import org.apache.commons.io.FileUtils;
import org.testng.TestNG;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; public class TestngRun { public static void main(String[] args) {
try {
String xmlName = "testng.xml";
//读取文件到流
InputStream inputStream = TestngRun.class.getClassLoader().getResourceAsStream(xmlName);
//新建一个文件对象
File xmlFile = new File("name.xml");
//拷贝流的内容到新文件中
FileUtils.copyInputStreamToFile(inputStream,xmlFile);
TestNG testNG = new TestNG();
List<String> suites = new ArrayList<>();
//添加文件到suite
suites.add(xmlFile.getAbsolutePath());
testNG.setTestSuites(suites);
testNG.run();
}
catch (IOException e) {
e.printStackTrace();
}
} }

执行结果:

test one
zhangsan

打印了默认的name:zhangsan,那使用xml方式执行的时候如何传入参数呢

三、执行xml文件以及自定义传参

TestngRun.java

 package cas.eric;

 import org.testng.TestNG;
import org.testng.xml.SuiteXmlParser;
import org.testng.xml.XmlSuite;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class TestngRun { public static void main(String[] args) {
String xmlName = "testng.xml";
InputStream inputStream = TestngRun.class.getClassLoader().getResourceAsStream(xmlName);
TestNG testNG = new TestNG();
SuiteXmlParser suiteXmlParser = new SuiteXmlParser();
List<XmlSuite> suites = new ArrayList<>();
XmlSuite xmlSuite = suiteXmlParser.parse(xmlName, inputStream, true);
suites.add(xmlSuite);
Map<String,String> parameters = new HashMap<>();
parameters.put("name", "wangwu");
xmlSuite.setParameters(parameters);
testNG.setXmlSuites(suites);
testNG.run(); } }

执行结果:

test one
wangwu

当然也可以自定义test class

SecondTest.java

 package cas.eric;

 import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test; public class SecondTest { @Test
@Parameters({"name"})
public void test_two(@Optional("mike") String name){
System.out.println("test two");
//如果变量name有值则打印传入的name值,如果没有则打印默认值zhangsan
System.out.println(name);
}
}

TestngRun.java

 package cas.eric;

 import org.testng.TestNG;
import org.testng.xml.SuiteXmlParser;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest; import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class TestngRun { public static void main(String[] args) {
String xmlName = "testng.xml";
InputStream inputStream = TestngRun.class.getClassLoader().getResourceAsStream(xmlName);
TestNG testNG = new TestNG();
SuiteXmlParser suiteXmlParser = new SuiteXmlParser();
List<XmlSuite> suites = new ArrayList<>();
XmlSuite xmlSuite = suiteXmlParser.parse(xmlName, inputStream, true);
List<XmlTest> xmlTestList = xmlSuite.getTests();
XmlTest xmlTest = xmlTestList.get(0);
List<XmlClass> xmlClassList = xmlTest.getXmlClasses();
String packageName = TestngRun.class.getPackage().getName();
XmlClass xmlClass = new XmlClass(packageName+".SecondTest");
xmlClassList.add(xmlClass);
suites.add(xmlSuite);
Map<String,String> parameters = new HashMap<>();
parameters.put("name", "wangwu");
xmlSuite.setParameters(parameters);
testNG.setXmlSuites(suites);
testNG.run(); } }

运行结果:

test one
wangwu
test two
wangwu

代码执行testng的几种方式的更多相关文章

  1. C#执行异步操作的几种方式比较和总结

    C#执行异步操作的几种方式比较和总结 0x00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过, ...

  2. Shell脚本中执行mysql的几种方式(转)

    Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...

  3. linux 中的命令是什么?执行命令的几种方式?如何自己创建命令?

    linux 中的命令是什么? 命令是可执行的二进制程序 执行命令的几种方式? ./test.sh                     #相对路径执行 /data/test.sh           ...

  4. 转 mysql mysql命令行中执行sql的几种方式总结

    https://www.jb51.net/article/96394.htm 1.直接输入sql执行 MySQL> select now(); +---------------------+ | ...

  5. PHP中通过bypass disable functions执行系统命令的几种方式

    原文:http://www.freebuf.com/articles/web/169156.html 一.为什么要bypass disable functions 为了安全起见,很多运维人员会禁用PH ...

  6. TestNG入门教程-12-Java代码执行testng.xml和失败后重跑

    前面我们都在IDEA上右键testng.xml文件来运行testng用例,这个在编写测试用例过程是 可以这么做,但是,如果测试用例写完了,也是这么做吗?有没有什么方法,例如自动化去实现.测试脚本维护后 ...

  7. Centos上执行Shell的四种方式

    注意:我这里说的shell脚本是Bash Shell,其他类型的shell脚本不保证有效 1,方式一:进入shell文件所在目录 ./my.sh执行 ./my.sh ./的意思是说在当前的工作目录下执 ...

  8. bat批处理执行python 的几种方式

    第一种方式:@echo off C: cd C:\Users\administrator\Desktopstart python apidemo.py exit第二种方式: start cmd /K ...

  9. C#执行异步操作的几种方式比较和总结(转发:https://www.cnblogs.com/durow/p/4826653.html)

    0x00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过,倒也没遇到什么大问题.最近因为需求要求 ...

随机推荐

  1. Mongo--04 Mongo分片集群

    目录 一.分片的概念 二. 分片工作原理 三.IP端口目录规划 1.IP端口规划 2.目录规划 四.分片集群搭建副本集步骤 1.安装软件 2.创建目录 3.创建配置文件 4.优化警告 5.启动服务 6 ...

  2. tf Dataset API

    https://zhuanlan.zhihu.com/p/30751039 https://zhuanlan.zhihu.com/p/37106443 关于其中shuffle时的buffer_size ...

  3. c++ 创建线程用CreateThread后,线程直接就开始执行了吗

    //CreateThread函数的参数原型如下 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T ...

  4. hadoop本机运行 解决winutils.exe的问题

    如何解决winutils.exe的问题什么原因导致的???windows是客户端,读取linux的文件.客户端没有hadoop的环境重新在windows上面编译hadoop,编译出来window版本的 ...

  5. CF1103D Codeforces Round #534 (Div. 1) Professional layer 状压 DP

    题目传送门 https://codeforces.com/contest/1103/problem/D 题解 失去信仰的低水平选手的看题解的心路历程. 一开始看题目以为是选出一些数,每个数可以除掉一个 ...

  6. HTML加载过程

    在地址栏输入url,返回html后,浏览器开始顺序加载并渲染DOM Body标签 当浏览器遇到body标签才算真正开始加载并渲染DOM,此时会有以下几种情况: DOM元素 浏览器遇到dom元素时,正常 ...

  7. Oracle 9i,10g,11g各自alert日志的位置

    10g&9i的alert日志: 进入oracle:[zhangshengdong@oralocal1 ~]$ sudo su - oracle[oracle@oralocal1 ~]$ sql ...

  8. Django【第25篇】:后端CORS解决跨域问题

    解决跨域问题 一.为什么会有跨域问题? 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href属性,a标签什么的都不拦截. 二.解决跨域问题的两种方式 JS ...

  9. 【usaco 2013 open yinyang】阴阳

    题目 Farmer John 正在在计划自己的农场漫步.他的农场的结构就像一棵树:农场有N个谷仓(1<= N <=100,000),分别由N-1条路链接.这样,他便可以通过这些谷仓间的道路 ...

  10. 【leetcode】1129. Shortest Path with Alternating Colors

    题目如下: Consider a directed graph, with nodes labelled 0, 1, ..., n-1.  In this graph, each edge is ei ...