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

查看:48
本文介绍了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 app 将各项功能一一正确执行.

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> 函数.

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 按照您想要的顺序运行方法.看看这个.那里描述的顺序也应该可以帮助您解决这个问题

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天全站免登陆