有关在运行时生成testng.xml的更多信息

2024-04-05 01:20
文章标签 xml 运行 生成 信息 testng

本文主要是介绍有关在运行时生成testng.xml的更多信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这篇文章中,我们将重点介绍一些新的和令人兴奋的事情,我们可以在运行时或以编程方式制作testng.xml。

我们将涵盖以下内容。

  • 在运行时生成testng.xml时是否包含方法功能?
  • 在运行时生成testng.xml时排除方法功能?
  • 是否在运行时将报表的输出目录更改为特定目录?
  • 我们如何以编程方式并行运行案例?

首先,让我们创建一个测试类(比如CodekruTest)和一些案例,我们将在整个帖子中使用这些案例,并学习一些令人兴奋的东西。

package Test;import org.testng.Assert;
import org.testng.annotations.Test;public class CodekruTest {@Testpublic void test1() {System.out.println("Executing test1");Assert.assertTrue(true);}@Testpublic void test2() {System.out.println("Executing test2");Assert.assertTrue(true);}@Testpublic void test3() {System.out.println("Executing test3");Assert.assertTrue(true);}}
如何在运行时创建testng.xml时使用包含的方法功能?

正如你所看到的,我们在CodekruTest类中有三个测试方法(test1、test2和test3),但是如果我们只想执行类中的两个测试方法(test1、test3),那该怎么办呢?我们如何做到这一点?

我们将使用include标记创建一个XML文件,然后将这两个方法包含在include标记中,并忽略第三个方法。

<suite name="codekru"><test name="codekruTest"><classes><class name="Test.CodekruTest"><methods><include name="test1" /><include name="test3" /></methods></class></classes></test>
</suite>

现在,我们如何以编程方式创建上述XML文件?

我们在XML文件中有一个与include标记等效的标记,它是TestNG中的XmlInclude类。因此,包含测试方法的语法如下所示:

XmlInclude includedtestMethod1 = new XmlInclude("test1");
XmlInclude includedtestMethod3 = new XmlInclude("test3");

我们将这些方法添加到列表中,然后将该列表进一步添加到类中。

List<XmlInclude> includedMethodsList = new ArrayList<XmlInclude>();
includedMethodsList.add(includedtestMethod1);
includedMethodsList.add(includedtestMethod3);
xmlClass.setIncludedMethods(includedMethodsList);

上面的XML文件的整个程序将如下所示。

import java.util.ArrayList;
import java.util.List;import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.TestNG;
import org.testng.annotations.Test;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlInclude;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;public class GenerateAndExecuteXML {public static void main(String[] args) {XmlSuite suite = new XmlSuite();suite.setName("codekru"); // equivalent of <suite> tagXmlTest test = new XmlTest(suite);test.setName("codekruTest"); // equivalent of <test> tagList<XmlClass> classes = new ArrayList<XmlClass>(); // equivalent of <classes> tagXmlClass xmlClass = new XmlClass("Test.CodekruTest"); // equivalent of <class> tag// including only two test methods of a classXmlInclude includedtestMethod1 = new XmlInclude("test1");XmlInclude includedtestMethod3 = new XmlInclude("test3");List<XmlInclude> includedMethodsList = new ArrayList<XmlInclude>();includedMethodsList.add(includedtestMethod1);includedMethodsList.add(includedtestMethod3);xmlClass.setIncludedMethods(includedMethodsList);classes.add(xmlClass);test.setXmlClasses(classes);List<XmlSuite> suites = new ArrayList<XmlSuite>();suites.add(suite);TestNG tng = new TestNG();tng.setXmlSuites(suites);tng.run();}
}

现在,您可以运行上面的程序,它将产生与XML文件本身产生的输出相同的输出。

Executing test1
Executing test3===============================================
codekru
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
如何在运行时创建testng.xml时使用排除方法功能?

现在,我们想从类中排除一个特定的测试,比如说我们想从类中排除test1方法。我们可以通过使用exclude标记来实现这一点,如下面的XML所示,其中只有test1()方法被添加到exclude标记中。

<suite name="codekru"><test name="codekruTest"><classes><class name="Test.CodekruTest"><methods><exclude name="test1"/></methods></class></classes></test>
</suite>

现在的问题是我们如何使用代码来实现同样的事情?TestNG为我们提供了一种简单的方法来完成它,但与XmlInclude类不同的是,我们没有XmlExlude类。相反,我们可以向类传递一个排除方法的列表,如下所示。

// adding "test1" as an excluded method
List<String> excludedMethods = new ArrayList<String>();
excludedMethods.add("test1");
xmlClass.setExcludedMethods(excludedMethods);

完整代码

import java.util.ArrayList;
import java.util.List;import org.testng.TestNG;
import org.testng.annotations.Test;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;public class Practice {public static void main(String[] args) {XmlSuite suite = new XmlSuite();suite.setName("codekru"); // equivalent of <suite> tagXmlTest test = new XmlTest(suite);test.setName("codekruTest"); // equivalent of <test> tagList<XmlClass> classes = new ArrayList<XmlClass>(); // equivalent of <classes> tagXmlClass xmlClass = new XmlClass("Test.CodekruTest"); // equivalent of <class> tag// adding "test1" as an excluded methodList<String> excludedMethods = new ArrayList<String>();excludedMethods.add("test1");xmlClass.setExcludedMethods(excludedMethods);classes.add(xmlClass);test.setXmlClasses(classes);List<XmlSuite> suites = new ArrayList<XmlSuite>();suites.add(suite);TestNG tng = new TestNG();tng.setXmlSuites(suites);tng.run();}
}

现在,我们可以将上面的程序作为一个标准的java应用程序运行,它将产生与等价的XML文件相同的输出。

Executing test2
Executing test3===============================================
codekru
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
现在,如何使用程序将报告的输出目录更改为特定目录?

使用TestNG也相对容易,因为它为我们提供了一种方法来做同样的事情。

TestNG tng = new TestNG();
tng.setOutputDirectory("D:\\Test");

 完整代码:

import java.util.ArrayList;
import java.util.List;import org.testng.TestNG;
import org.testng.annotations.Test;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;public class Practice {public static void main(String[] args) {XmlSuite suite = new XmlSuite();suite.setName("codekru"); // equivalent of <suite> tagXmlTest test = new XmlTest(suite);test.setName("codekruTest"); // equivalent of <test> tagList<XmlClass> classes = new ArrayList<XmlClass>(); // equivalent of <classes> tagXmlClass xmlClass = new XmlClass("Test.CodekruTest"); // equivalent of <class> tagclasses.add(xmlClass);test.setXmlClasses(classes);List<XmlSuite> suites = new ArrayList<XmlSuite>();suites.add(suite);TestNG tng = new TestNG();tng.setOutputDirectory("D:\\Test"); // pass the path of the directory in the argument where you want to store// the reports tng.setXmlSuites(suites);tng.run();}
}

现在,类中的所有测试方法都将运行,测试报告保存在D:\Test文件夹中,而不是默认的测试输出文件夹中。

我们如何以编程方式并行运行案例?

让我们假设我们想要并行运行一个类的方法。然后下面的XML文件可以帮助我们实现相同的。

<suite name="codekru"><test name="codekruTest" parallel = "methods"><classes ><class name="Test.CodekruTest" ></class></classes></test>
</suite>

要使用该程序执行相同的操作,我们只需在代码中添加以下行。

test.setParallel(ParallelMode.METHODS);

在这里,EschelMode是一个枚举。

现在,我们的整个程序将如下所示。

public class GenerateXmlAndExecuteAtRuntime {public static void main(String[] args) {XmlSuite suite = new XmlSuite();suite.setName("codekru"); // this means <suite name = "codekru">XmlTest test = new XmlTest(suite);test.setName("codekru"); // this means <test name = "codekru">List<XmlClass> classes = new ArrayList<XmlClass>(); // <classes>classes.add(new XmlClass("Test.CodekruTest")); // this means <class name = "Test.CodekruTest">test.setXmlClasses(classes);test.setParallel(ParallelMode.METHODS);List<XmlSuite> suites = new ArrayList<XmlSuite>();suites.add(suite);TestNG testng = new TestNG();testng.setXmlSuites(suites);testng.run();}
}

产出-

Executing test3
Executing test1
Executing test2===============================================
codekru
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0

如果我们想并行运行我们的类,我们可以使用下面的行。

1
test.setParallel(ParallelMode.METHODS);

这篇关于有关在运行时生成testng.xml的更多信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877316

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录