TestNG:测试用例被忽略 [英] TestNG : Test case is ignored

查看:949
本文介绍了TestNG:测试用例被忽略的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用TestNG框架为Android应用程序编写测试用例.我正在为此使用Appium测试工具.

I am using TestNG framework for writing test cases for my Android application. For which I am using Appium testing tool.

为此,我定义了以下文件:

For this I have defined following files :

  • pom.xml文件-依赖项必需
  • 一个BaseTest.java
  • BaseTest.java
  • 扩展的两个子类
  • testng.xml文件-在其中定义正在运行的测试类.
  • pom.xml file - required for dependencies
  • One BaseTest.java class
  • Two child classes which is extended from BaseTest.java
  • testng.xml file - defines running test classes in it.

为了更好地理解我的问题发布类& xml文件.

For better understanding of my question posting classes & xml files.

这是pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.testing</groupId>
    <artifactId>android-appium</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.1.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

这是BaseTest.java

import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;

public class BaseTest {


    @BeforeSuite
    public void setUp()
    {
    }

    @AfterSuite
    public void tearDown()
    {

    }
}

这是FirstTest.java

import io.appium.java_client.MobileBy;
import io.appium.java_client.MobileElement;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import scenarios.BaseTest;

import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class FirstTest extends BaseTest {

    private AndroidDriver<MobileElement> mAndroidDriver;

    @BeforeTest
    protected  void setUpDriver() throws MalformedURLException {

        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("device", "Android");

        desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "abfg34e");
        desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");

        desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.0");
        desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator1");
        desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.example.test");

        desiredCapabilities.setCapability(MobileCapabilityType.APP,"/home/desktop/app-developer-debug.apk");
        desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, "true");

        mAndroidDriver = new AndroidDriver(new URL(Constants.BASE_URL), desiredCapabilities);
        System.out.println("setUpDriver() :: time : "+ DateFormat.getDateTimeInstance().format(System.currentTimeMillis()));
    }

    @Test(groups = "app_screen_group_1", priority = 1)
    public void splashScreen_1() throws InterruptedException {
        System.out.println("splashScreen_1() :: startTime : "+ DateFormat.getDateTimeInstance().format(System.currentTimeMillis()));
        Thread.sleep(7000);
    }


    @Test(groups = "app_screen_group_1", priority = 2)
    public void splashScreen_2() throws InterruptedException {
        System.out.println("splashScreen_2() :: startTime : "+ DateFormat.getDateTimeInstance().format(System.currentTimeMillis()));
        MobileElement menuElement = mAndroidDriver.findElementByAccessibilityId("More options");
        menuElement.click();

        Thread.sleep(10);
        MobileElement splashElement = mAndroidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"Splash\")");
        splashElement.click();
    }
}

这是SecondTest.java

 import io.appium.java_client.MobileBy;
    import io.appium.java_client.MobileElement;
    import io.appium.java_client.TouchAction;
    import io.appium.java_client.android.AndroidDriver;
    import io.appium.java_client.remote.AndroidMobileCapabilityType;
    import io.appium.java_client.remote.MobileCapabilityType;
    import io.appium.java_client.touch.WaitOptions;
    import io.appium.java_client.touch.offset.PointOption;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;
    import scenarios.BaseTest;

    import java.net.MalformedURLException;
    import java.net.URL;
    import java.text.DateFormat;
    import java.time.Duration;
    import java.util.List;
    import java.util.concurrent.TimeUnit;

    public class SecondTest extends BaseTest {

        private AndroidDriver<MobileElement> mAndroidDriver;


        @Test(groups = "app_screen_group_2", priority = 1)
        public void logInScreen_1() throws InterruptedException {
            System.out.println("logInScreen_1() :: startTime : "+ DateFormat.getDateTimeInstance().format(System.currentTimeMillis()));
            Thread.sleep(7000);
        }


        @Test(groups = "app_screen_group_2", priority = 2)
        public void logInScreen_2() throws InterruptedException {
            System.out.println("logInScreen_2() :: startTime : "+ DateFormat.getDateTimeInstance().format(System.currentTimeMillis()));
            MobileElement menuElement = mAndroidDriver.findElementByAccessibilityId("More options");
            menuElement.click();

            Thread.sleep(10);
            MobileElement logInElement = mAndroidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"Log in\")");
            logInElement.click();
        }
    } 

这是testng.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="androidapp" group-by-instances="true">

    <test name="FirstScenario_1" >

        <classes>
            <class name="scenarios.FirstTest" ></class>
            <class name="scenarios.SecondTest"></class>
        </classes>
    </test>

   <!-- Following scenario runs perfectly if I have each separate class in separate test name. But in above case scenario it is not working properly, it gives Test ignored error for second method of FirstTest.java
<test name="secondScenario_1" >

        <classes>
            <class name="scenarios.FirstTest" ></class>
        </classes>
    </test>

 <test name="secondScenario_2" >

        <classes>
            <class name="scenarios.SecondTest" ></class>
        </classes>
    </test>-->
</suite>

当我使用appium工具运行此代码时,在FirstTest.java类的第二个函数splashScreen_2()上出现错误忽略的测试&它运行不正常.但是,当我在testng.xml文件&中取消注释secondScnario_2时,对FirstScenario_1进行评论,然后我的测试用例就可以正常运行(我也在评论中提到)& android应用程序正确地逐个执行每个功能.

When I run this code using appium tool then on second function splashScreen_2() of FirstTest.java class got error Test ignored & it is not running properly. But when I do uncomment secondScnario_2 in testng.xml file & comment FirstScenario_1 then my test cases run properly (as I mention in comment also) & android app executes each function properly one by one.

但是我想在testng.xml中的<test> </test>函数中执行所有类.

But I want to do execute all classes in <test> </test> functions in testng.xml.

如果在testng.xml文件中使用secondScnario_2,则需要为每种情况提供单独的测试名称.我只想使用一个测试名称.所以在这里,当我在testng.xml文件中使用FirstScenario_1时,为什么在这里出现 test 的错误?

If I use secondScnario_2 in testng.xml file then I need to give separate test name for each scenario. And I want to use only one test name. So here when I use FirstScenario_1 in testng.xml file, Why is their an error of test ignored ocurring here?

推荐答案

基于您在注释中描述的内容,我认为您希望通过在一个测试中定义所有类来按顺序运行所有内容.然后,您应该删除优先级和组,并使用preserve-order="true"与此xml一起运行它.这应该按照在xml中定义的顺序运行测试

Based on what you have described in comments , I think you want to run everything in order by defining all classes in one test. Then you should remove priorities and groups and run it with this xml with preserve-order="true" . This should run test in the order they are defined in xml

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

    <test name="FirstScenario_1" preserve-order="true">

        <classes>  
         <class name="scenarios.FirstTest" >
               <methods> 
                  <include name="setUpDriver" />
                  <include name="splashScreen_1" /> 
                  <include name="splashScreen_2" />
               </methods> 
        </class>
            <class name="scenarios.SecondTest">
               <methods> 
                  <include name="logInScreen_1" />
                  <include name="logInScreen_2" />
               </methods>
          </class>
        </classes>
    </test>
</suite>

您还可以使用@dependsOnMethods以所需的顺序运行方法.看看 this .那里描述的顺序还应该帮助您解决这个问题

You can also use @dependsOnMethods to run methods in the order you want . Have a look at this . The ordering described there should also help you to resolve this

这篇关于TestNG:测试用例被忽略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆