2015-11-30 5 views
0

Я использую appium для проведения тестов в мобильных приложениях. То, что я пытаюсь сделать, - это выполнить только тестовые примеры, написанные в классе 1, если значение «numberOfAssets» равно 1. И тогда ТОЛЬКО выполняйте тестовые примеры, написанные в классе 2, если «numberOfAssets» равен 2.
Я пытался найти исправление для этого и наткнуться на класс «Редактор аннотации». Но печальная часть заключается в том, что она заканчивает установку всех аннотаций @Test на значение true.Условное выполнение тестовых случаев в TestNG

Все, что я хочу, это только для одного целого класса, выполняемого на основе значения «numberOfAssets». Я был бы признателен за некоторые предложения по этому поводу.

У меня три классами:

initialSetUp class-

public class initialSetUp{ 
    AndroidDriver driver; 
    int numberOfAssets = 1; 
@BeforeClass 
    public void setUp() throws MalformedURLException { 
     //Set up desired capabilities and pass the Android app-activity and app-package to Appium 
     DesiredCapabilities capabilities = new DesiredCapabilities(); 
     capabilities.setCapability("BROWSER_NAME", "chrome"); 
     capabilities.setCapability("VERSION", "4.4.2"); 
     capabilities.setCapability("deviceName","Emulator"); 
     capabilities.setCapability("platformName","Android");   
     capabilities.setCapability("appPackage", "com.temp.app_name"); 
     capabilities.setCapability("appActivity","com.temp.app_name.start_activity"); 
     driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  
    } 

    @AfterClass 
    public void teardown(){ 
     //close the app 
     driver.quit(); 
    } 
} 

Класс 1-

@Listeners(AnnotationTransformer.class) 
    @Test(enabled = false, groups = "yo") 
    public class oneAssetType extends initialSetUp{ 
    //Check if first page is asset type specified 
// @Test (groups = "onlyOne", priority = 1) 
    public void test_1() throws Exception { 
     WebElement centerLable = driver.findElement(By.id("pagerTitle")); 
     assert centerLable.getText().equalsIgnoreCase("Whatever") : "did not match with expected value"; 
    } 
} 

Класс 2-

@Test(enabled = false) 
    public class twoAssetType extends initialSetUp{ 
     //Check if first page is stickers 
     @Test (groups = {"twoAssets", "a"}, priority = 1) 
     public void test_1() throws Exception { 
      WebElement centerLable = driver.findElement(By.id("pagerTitle")); 
      assert centerLable.getText().equals("WhereEver") : "did not match with expected value"; 
      } 
    } 

TestNG.xml-

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 

<suite name="Main App Suite"> 
    <listeners> 
     <listener class-name="package_name.AnnotationTransformer" /> 
    </listeners> 

    <test name="Navigate one Asset Types"> 
     <classes> 
     <class name="package_name.oneAssetType" /> 
     </classes> 
    </test> 

<test name="Navigate two asset types"> 
     <classes> 
      <class name="package_name.twoAssetType" /> 
     </classes> 
    </test> 
</suite> 

Я также настроить аннотацию трансформатор class-

public class AnnotationTransformer implements IAnnotationTransformer { 
    initialSetUp setup = new initialSetUp(); 
    @Override 
    public void transform (ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod){   
     try{ 
      if (testClass.getName().equals("package_name.oneAssetType") && (setup.numberOfAssets == 1)) { 
       annotation.setEnabled(true); 
      } 
     }catch(NullPointerException e){ 
      //YO 
     } 
    } 

ответ

0

Для вашей информации, @Listeners(AnnotationTransformer.class) не работает. The documentation says:

В @Listeners аннотаций может содержать любой класс, который расширяет org.testng.ITestNGListener кроме IAnnotationTransformer и IAnnotationTransformer2. Причина в том, что эти слушатели должны быть известны очень рано в этом процессе, так что TestNG может использовать их для перезаписи ваших комментариев, поэтому вам нужно указать этих слушателей в файле testng.xml.

Тогда, о вашей проблеме, ваш initialSetUp экземпляр от слушателя - это не сам тест. Итак, setup.numberOfAssets никогда не изменится. Антенные трансформаторы используются до запуска теста и без контекста времени выполнения. Вместо этого вы можете попробовать что-то с IHookable.

Смежные вопросы