J'essaie d'utiliser le fichier testng.xml ... et on dirait que Device Farm ignore le fichier entier.Testng XML non accepté par AWS Device Farm
Mon exemple est simple. J'ai une classe d'usine qui instancier les classes de test, ce qui est la façon dont mon fichier xml ressemble
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
<test name="test">
<classes>
<class name="Factory"/>
</classes>
</test>
</suite>
J'ai même essayé d'exclure les méthodes manuellement
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
<test name="test">
<classes>
<class name="Factory"/>
<class name="TestSingleUrl">
<methods>
<exclude name="testCorrectSiteKey"/>
<exclude name="testIsTagImplemented"/>
<exclude name="testHttpsScheme"/>
<exclude name="testCorrectTagName"/>
<exclude name="testCorrectBootstrapPath"/>
</methods>
</class>
</classes>
</test>
</suite>
Mais je reçois un « Can not invoke method: soit le rendre statique soit créer un constructeur non-args ". Ce qui signifie que la Ferme des Périphériques essaye d'exécuter les méthodes de TestSingleUrl Class..Mais celui qui appelle ces tests devrait être l'usine
Est-ce que quelqu'un sait comment faire pour que la Ferme des Périphériques accepte notre fichier xml?
Ceci est mon Classe usine:
public class Factory{
private String targetSiteKey;
//Data Provider that consumes the first line, which contains the target sitekey of the tag
@DataProvider(name = "urlProvider")
public Iterator<Object[]> createData() throws IOException {
List<String> lines = IOUtils.readLines(new InputStreamReader(this.getClass().getResourceAsStream("Urls.csv")));
List<Object[]> objectArrays = lines.stream().map(x -> new Object[]{x}).collect(Collectors.toList());
Iterator<Object[]> itr = objectArrays.iterator();
targetSiteKey = itr.next()[0].toString();
return itr;
}
@Factory(dataProvider="urlProvider")
public Object[] creatingTests(String url){
System.out.println(System.currentTimeMillis());
String siteKey=null;
String path = null;
String tagName = null;
WebElement browsi;
try{
RemoteWebDriver driver = DriverWrapper.getDriver();
driver.get(url);
browsi = driver.findElement(By.id("browsi-tag"));
tagName = browsi.getTagName();
siteKey = browsi.getAttribute("data-sitekey");
path = browsi.getAttribute("src");
}catch(Exception ignored){}
finally{
return new Object[] {new TestSingleUrl(targetSiteKey,siteKey,path,tagName,url)};
}
}
}
Et voici ma TestSingleUrl Classe:
public class TestSingleUrl {
private String targetSiteKey,siteKey,path,tagName,url;
public TestSingleUrl(String targetSiteKey,String siteKey, String path, String tagName,String url){
this.targetSiteKey = targetSiteKey;
this.siteKey=siteKey;
this.path=path;
this.tagName=tagName;
this.url=url;
}
@Test
public void testCorrectSiteKey(){
System.out.println(url);
Assert.assertEquals(siteKey, targetSiteKey);
}
@Test
public void testIsTagImplemented(){
System.out.println(url);
Assert.assertFalse(siteKey.isEmpty());
Assert.assertFalse(tagName.isEmpty());
Assert.assertFalse(path.isEmpty());
}
@Test
public void testHttpsScheme(){
System.out.println(url);
Assert.assertTrue(path.contains("https"));
}
@Test
public void testCorrectTagName(){
System.out.println(url);
Assert.assertEquals(tagName,"script");
}
@Test
public void testCorrectBootstrapPath(){
System.out.println(url);
Assert.assertTrue(path.contains("middycdn-a.akamaihd.net/bootstrap/bootstrap.js"));
}
}
Je pense que les messages d'erreur que je reçois est parce que la ferme de l'appareil tente d'exécuter chaque méthode avec une annotation @Test qu'elle trouve. S'il lisait mon fichier xml, cela n'arriverait pas.
Pouvez-vous partager l'usine et TestSingleUrl? On dirait que vous avez incorrectement mis en œuvre le motif d'usine. – RocketRaccoon
Hey @RocketRaccoon, je viens de mettre les classes. Je ne pense pas que ce soit une erreur dans mes classes .. parce que je peux l'exécuter dans un périphérique local .. le problème est quand je l'envoie à la batterie de périphériques. –
Et comment l'exécutez-vous là? – RocketRaccoon