私はtestng.xmlを使用しようとしていますが、Device Farmがファイル全体を無視しているようです。Testng XMLがAWS Device Farmに受け入れられません
私の例は簡単です。私は、テストクラスをインスタンス化するファクトリクラスを持っている、これは私のxmlファイルが
<?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>
どのように見えるかである私も手動で
<?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>
方法を除外しようとしたしかし、私は「することはできませんを取得していますメソッドを呼び出す:静的にするか、非argsコンストラクターを作成する "つまり、Device FarmがTestSingleUrl Classからメソッドを実行しようとしています。しかし、これらのテストを呼び出す人は工場でなければなりません。
xmlファイルを受け入れるためにデバイスファームを作成する方法を知っている人はいますか?
これは私のファクトリクラスです:
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)};
}
}
}
そして、これが私のTestSingleUrlクラスです:
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"));
}
}
私は、デバイスファームで実行しようとしているので、私は取得していますエラーメッセージがあることを考えます見つかった@Testアノテーションを持つすべてのメソッド。私のXMLファイルを読んでいたら、それは起こりません。
あなたは工場やTestSingleUrlを共有してもらえますか?ファクトリパターンが正しく実装されていないようです。 – RocketRaccoon
ちょっと@RocketRaccoon、私はクラスを置く。私はクラス内のエラーではないと思います。私はローカルデバイスで実行できます。問題は、デバイスファームに送信するときです。 –
そして、どうやってそれを実行していますか? – RocketRaccoon