繁体   English   中英

Appium Android测试用例,它如何工作?

[英]Appium Android Test case, How does it work?

您好,我正在尝试学习Appium,以在我的应用程序上自动化测试用例。

我设法运行了一个简单的脚本,但是我不了解android生命周期之类的运行过程的逻辑。

一个测试用例的周期是多少?

因为当我运行下面的代码时,它不会按顺序运行,分别是test1,test2,test3 ...

我们如何告诉testCase首先运行什么,以什么顺序运行? 谢谢

package appium.learning;

import java.net.MalformedURLException;
import java.net.URL;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class LearningTest {

    WebDriver driver;

    @BeforeClass
    public void setUp() throws MalformedURLException{
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("device", "Android");
        capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
        capabilities.setCapability(CapabilityType.VERSION, "4.4");
        capabilities.setCapability(CapabilityType.PLATFORM, "Android");
        capabilities.setCapability("app-package", "com.myapp"); //Replace with your app's package
        capabilities.setCapability("app-activity", ".myapp"); //Replace with app's Activity
        driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }




    @AfterClass
    public void tearDown(){
        driver.quit();
    }


    @Test
    public void Cal1(){
        driver.findElement(By.name("1")).click();
    }
    @Test
    public void Cal2(){
        driver.findElement(By.name("2")).click();
    }
    @Test
    public void Cal3(){
        driver.findElement(By.name("3")).click();
    }
    @Test
    public void Cal4(){
        driver.findElement(By.name("4")).click();
    }

}

在您的测试中,必须没有测试依赖性,这意味着一个测试不应依赖于另一个测试的输出。 每个测试应该唯一且独立。 因此,无需订购测试。

JVM在运行时随机决定将首先运行哪个测试。 顺序是随机的。 这是因为无论如何您都不需要按特定顺序运行测试。

但是,有一些注释可以使JVM强制以一定顺序运行测试,但是不建议这样做。

关于您在每次测试之间不卸载应用程序的问题,让我为您澄清一下。 因此,基本上,每个带有@Test注释的测试在下一个测试(以随机顺序)运行之前结束。

但是,仅仅因为该应用程序总是在测试之间关闭并重新打开并不意味着它总是被重新安装。 实际上,有两个主要功能可让您控制此功能:

fullReset-(iOS)删除整个模拟器文件夹。 (Android)通过卸载应用程序而不是清除应用程序数据来重置应用程序状态。 在Android设备上,会话完成后,这也会删除该应用程序。 恩。 abilities.setCapability(“ fullReset”,true / false);

noReset-在会话之间不重置应用程序状态。 (IOS:请勿删除应用程序plist文件; Android:请勿在新会话之前卸载应用程序)。 abilities.setCapability(“ noReset”,true / false);

同样,@BeforeClass注释意味着该方法将在类中的所有测试之前运行一次,并且仅运行一次,而@AfterClass相反。 但是,我建议使用@Before和@After注释setup和tearDown方法,这将在每次测试按顺序运行之前和之后对驱动程序进行设置和拆卸。 这样可以减少出错的机会。

我希望这可以使您对一些基本实践有所了解,并且最后一段也应使您对生命周期有所了解。

如果您还有任何疑问,请发表评论。

测试愉快:)

您的另一个选择是在测试2开始之前登录:意味着合并两个测试用例。 我有同样的问题,只需更改测试步骤的逻辑即可解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM