Я пытаюсь настроить свой testng.xml таким образом, чтобы он указывал на динамически настраиваемый xml-файл testng, чтобы определить, что нужно тестировать на основе количества подключенных мобильных устройств (drivers.xml).У меня есть Java-класс, который создает и содержит драйверы Appium, а затем передает эти значения для каждого драйвера в другой класс Java для настройки параметров и значений для каждого драйвера, чтобы я мог использовать аннотацию @Parameters для передачи необходимой информации о драйвере для параллельного тестирования.
В настоящее время способ установки файла testng.xml, похоже, вообще не запускает никаких тестов.Я пытался искать ответы в Интернете, но для TestNG, кажется, не так много значений для других пользовательских XML-файлов.(Я не уверен, правильно ли я формулирую свой вопрос или нет.) Кто-нибудь сталкивался с проблемами для этой настройки?
Вот файлы Xml и класс Java, который создает пользовательский файл XML:
testNG.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>
drivers.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>
Класс Java Xml Maker:
public class XMLMaker {
private boolean docTypeDeclared = false;
public DocumentBuilderFactory docDriverSetup;
public DocumentBuilder driverSetup;
public int connectedDevices = 0;
Document doc;
TransformerFactory transformerFactory;
Transformer transformer;
public void setupDriverXMLFile(List <AppiumDriver<MobileElement>> driverList) {
try {
docDriverSetup = DocumentBuilderFactory.newInstance();
driverSetup = docDriverSetup.newDocumentBuilder();
doc = driverSetup.newDocument();
transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
if(docTypeDeclared == false) {
DOMImplementation domImpl = doc.getImplementation();
DocumentType docType = domImpl.createDocumentType("suite", "","http://testng.org/testng-1.0.dtd");
doc.appendChild(docType);
docTypeDeclared = true;
}
Element suiteElement = doc.createElement("suite");
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", (String)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 packageName = doc.createElement("package");
packageName.setAttribute("name", "BaseTest");
devicePort.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();
}
}
public void createDriverFile() throws TransformerConfigurationException {
transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("./drivers.xml"));
try {
transformer.transform(source, result);
System.out.println("File Updated");
} catch (TransformerException e) {
e.printStackTrace();
}
}
}