一、指定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. vscode 黑屏及类名报错解决方案

    1.安装vscode之后打开黑屏,解决方案如下图,右键--属性--兼容性--勾选上 2.vscode 类名总报错 是ES2017的语法修饰器引起vscode警告. 解除的方法如果你使用的typescr ...

  2. Beta冲刺-(3/3)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...

  3. java并发学习--第十章 java内存模型的内存语义

    一.锁的内存语义 所为的java内存模型的内存语义指的就是在JVM中的实现原则. 锁的内存语义:锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 我们把上面这句话再整理下: ...

  4. 如何删除Github上的仓库

    1.首先,进入自己的github账户页面,点击头像选择下面的Your repositorys,点击进入 2.进入以后选中自己要删除的仓库,点击进去该仓库界面 3.找到Settings按钮,点击进入 4 ...

  5. 造个自己的Vue的UI组件库类似Element

    前言 随着前端的三大框架的出现,组件化的思想越来越流行,出现许多组件库.它能够帮助开发者节省时间提高效率, 如React的Ant-design,Vue的iView,Element等,它们的功能已经很完 ...

  6. [USACO2009 OPEN] 滑雪课 Ski Lessons

    洛谷P2948 看到题目就觉得这是动规但一直没想到如何状态转移……看了别人的题解之后才有一些想法 f[i][j]:前i单位时间能力值为j可以滑的最多次数 lessons[i][j]:结束时间为i,获得 ...

  7. vue开发移动端总结

    1.app.vue组件中,外层只能有一个div块,不能多个并列在一起. 正确: 错误: 2.main.js文件 3. app.vue文件 4. stroe.js 文件 5. router.js

  8. SpringCloud学习系列-微服务

    最近和尚硅谷周阳老师学习了Spring Cloud感觉有必要在这里做下笔记和总结. 软件系统架构演变 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用 ...

  9. 【leetcode】622. Design Circular Queue

    题目如下: Design your implementation of the circular queue. The circular queue is a linear data structur ...

  10. webkit内核的浏览器常见7种分别是..

    Google Chrome Safari 遨游浏览器 3.x 搜狗浏览器 阿里云浏览器 QQ浏览器 360浏览器 ...