通过 Maven/Testng 通过动态自定义 TestNG 文件运行测试

我正在尝试以指向动态自定义的 testng xml 文件的方式设置我的 testng.xml,以确定需要根据连接的移动设备数量(drivers.xml)测试哪些内容。我有一个 Java 类,它创建并包含 Appium 驱动程序,然后将每个驱动程序的这些值传递到另一个 Java 类以设置每个驱动程序的参数和值,以便我可以使用 @Parameters 批注传递所需的驱动程序信息以进行并行测试。


目前我设置 testng.xml 文件的方式似乎根本没有运行任何测试。我试过在网上寻找答案,但对于 TestNG,从其他自定义 xml 文件中获取值似乎并不多。(我不确定我是否正确地表达了我的问题。)有没有人遇到过这种设置的问题?


以下是创建自定义 xml 文件的 Xml 文件和 Java 类:


测试NG.xml:


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">


<suite name="All-Tests">


    <suite-files>


        <suite-file path="./drivers.xml"></suite-file>


    </suite-files>


</suite>

driver.xml(自定义 xml 文件):


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">


-<suite name="suite">



-<test name="driver1">


<parameter name="platform" value="Android"/>

<parameter name="udid" value="192.168.174.102:5555"/>


<parameter name="URL" value="http://127.0.0.1:5000/wd/hub"/>



-<parameter name="port" value="8200">


<package name="BaseTest"/>


</parameter>


</test>



-<test name="driver2">


<parameter name="platform" value="Android"/>


<parameter name="udid" value="192.168.174.101:5555"/>


<parameter name="URL" value="http://127.0.0.1:5000/wd/hub"/>



-<parameter name="port" value="2801">


<package name="BaseTest"/>


</parameter>


</test>


</suite>


料青山看我应如是
浏览 196回答 1
1回答

慕妹3146593

想通了这个问题。首先,套件文件路径的名称需要是“drivers.xml”而不是“./drivers.xml”。&nbsp; <?xml version="1.0" encoding="UTF-8"?>&nbsp; <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suite name="All-Tests"><suite-files>&nbsp; &nbsp; <suite-file path="drivers.xml"></suite-file></suite-files></suite>其次,我的 XmlMaker 类没有设置 Xml 文件的创建,例如 Suite 标签需要一个名称,声明 doctype,以及在构建我的自定义 xml 文件时我必须对如何做 Element 对象进行一些调整。public class XMLMaker {&nbsp; &nbsp; public DocumentBuilderFactory docDriverSetup;&nbsp; &nbsp; public DocumentBuilder driverSetup;&nbsp; &nbsp; public int connectedDevices = 0;&nbsp; &nbsp; Document doc;&nbsp; &nbsp; TransformerFactory transformerFactory = TransformerFactory.newInstance();&nbsp; &nbsp; Transformer transformer;&nbsp; &nbsp; public void setupDriverXMLFile(List <AppiumDriver<MobileElement>> driverList) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("List size: "+ driverList.size());&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; docDriverSetup = DocumentBuilderFactory.newInstance();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; driverSetup = docDriverSetup.newDocumentBuilder();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doc = driverSetup.newDocument();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformer = transformerFactory.newTransformer();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "http://testng.org/testng-1.0.dtd");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element suiteElement = doc.createElement("suite");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; suiteElement.setAttribute("name", "All-tests");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(AppiumDriver<MobileElement> driver: driverList) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element rootElement = doc.createElement("test");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; suiteElement.appendChild(rootElement);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootElement.setAttribute("name", (String) driver.getCapabilities().getCapability("deviceName"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element deviceNameEle = doc.createElement("parameter");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deviceNameEle.setAttribute("name", "deviceName");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deviceNameEle.setAttribute("value", (String) driver.getCapabilities().getCapability("deviceName"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootElement.appendChild(deviceNameEle);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element platformEle = doc.createElement("parameter");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; platformEle.setAttribute("name", "platform");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; platformEle.setAttribute("value", driver.getPlatformName()+"");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootElement.appendChild(platformEle);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element udidEle = doc.createElement("parameter");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; udidEle.setAttribute("name", "udid");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; udidEle.setAttribute("value", (String)driver.getCapabilities().getCapability("udid"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootElement.appendChild(udidEle);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element urlPort = doc.createElement("parameter");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlPort.setAttribute("name", "URL");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlPort.setAttribute("value", (String)driver.getCapabilities().getCapability("appiumURL"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootElement.appendChild(urlPort);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element devicePort = doc.createElement("parameter");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if((driver.getPlatformName()+"").&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toLowerCase().contains("android")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; devicePort.setAttribute("name", "port");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; devicePort.setAttribute("value", driver.getCapabilities().getCapability("systemPort")+"");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((driver.getPlatformName()+"").&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toLowerCase().contains("ios")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; devicePort.setAttribute("name", "port");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; devicePort.setAttribute("value", (String)driver.getCapabilities().getCapability("wdaLocalPort"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootElement.appendChild(devicePort);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element packages = doc.createElement("packages");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootElement.appendChild(packages);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Element packageName = doc.createElement("package");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; packageName.setAttribute("name", "BaseTest");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; packages.appendChild(packageName);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connectedDevices++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; suiteElement.setAttribute("parallel", "tests");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; suiteElement.setAttribute("thread-count", connectedDevices+"");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doc.appendChild(suiteElement);&nbsp; &nbsp; &nbsp; &nbsp; } catch(ParserConfigurationException pce) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pce.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; } catch (TransformerConfigurationException e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java