为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2021-11-11 14:17:10
我正在尝试以指向动态自定义的 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>
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

想通了这个问题。首先,套件文件路径的名称需要是“drivers.xml”而不是“./drivers.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>

其次,我的 XmlMaker 类没有设置 Xml 文件的创建,例如 Suite 标签需要一个名称,声明 doctype,以及在构建我的自定义 xml 文件时我必须对如何做 Element 对象进行一些调整。


public class XMLMaker {




    public DocumentBuilderFactory docDriverSetup;


    public DocumentBuilder driverSetup;


    public int connectedDevices = 0;


    Document doc;


    TransformerFactory transformerFactory = TransformerFactory.newInstance();


    Transformer transformer;


    public void setupDriverXMLFile(List <AppiumDriver<MobileElement>> driverList) {


        System.out.println("List size: "+ driverList.size());

        try {


            docDriverSetup = DocumentBuilderFactory.newInstance();


            driverSetup = docDriverSetup.newDocumentBuilder();


            doc = driverSetup.newDocument();


            transformer = transformerFactory.newTransformer();


            transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "http://testng.org/testng-1.0.dtd");


            Element suiteElement = doc.createElement("suite");

            suiteElement.setAttribute("name", "All-tests");


            for(AppiumDriver<MobileElement> driver: driverList) {


                Element rootElement = doc.createElement("test");

                suiteElement.appendChild(rootElement);

                rootElement.setAttribute("name", (String) driver.getCapabilities().getCapability("deviceName"));


                Element deviceNameEle = doc.createElement("parameter");

                deviceNameEle.setAttribute("name", "deviceName");

                deviceNameEle.setAttribute("value", (String) driver.getCapabilities().getCapability("deviceName"));

                rootElement.appendChild(deviceNameEle);


                Element platformEle = doc.createElement("parameter");

                platformEle.setAttribute("name", "platform");

                platformEle.setAttribute("value", driver.getPlatformName()+"");

                rootElement.appendChild(platformEle);


                Element udidEle = doc.createElement("parameter");

                udidEle.setAttribute("name", "udid");

                udidEle.setAttribute("value", (String)driver.getCapabilities().getCapability("udid"));

                rootElement.appendChild(udidEle);


                Element urlPort = doc.createElement("parameter");

                urlPort.setAttribute("name", "URL");

                urlPort.setAttribute("value", (String)driver.getCapabilities().getCapability("appiumURL"));

                rootElement.appendChild(urlPort);


                Element devicePort = doc.createElement("parameter");


                if((driver.getPlatformName()+"").

                        toLowerCase().contains("android")) {

                        devicePort.setAttribute("name", "port");

                        devicePort.setAttribute("value", driver.getCapabilities().getCapability("systemPort")+"");


                }

                if ((driver.getPlatformName()+"").

                        toLowerCase().contains("ios")) {

                        devicePort.setAttribute("name", "port");

                        devicePort.setAttribute("value", (String)driver.getCapabilities().getCapability("wdaLocalPort"));

                }


                rootElement.appendChild(devicePort);


                Element packages = doc.createElement("packages");

                rootElement.appendChild(packages);

                Element packageName = doc.createElement("package");

                packageName.setAttribute("name", "BaseTest");

                packages.appendChild(packageName);



                connectedDevices++;

            }   

            suiteElement.setAttribute("parallel", "tests");

            suiteElement.setAttribute("thread-count", connectedDevices+"");

            doc.appendChild(suiteElement);


        } catch(ParserConfigurationException pce) {

            pce.printStackTrace();

        } catch (TransformerConfigurationException e) {

            e.printStackTrace();

        } 


    }



查看完整回答
反对 回复 2021-11-11
  • 1 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信