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

Appium Android Test case, How does it work?

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

我设法 运行 一个简单的脚本,但我不理解 运行ning 过程的逻辑,例如 android 生命周期。

测试用例的周期是多少。

因为当我 运行 下面的代码没有 运行 按 test1、test2、test3...

的顺序

我们如何告诉测试用例 运行 首先要做什么以及以什么顺序? 谢谢

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,这也会在会话完成后删除该应用程序。 前任。 capabilities.setCapability("fullReset", true/false);

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

此外,@BeforeClass 注释意味着该方法将 运行 一次且仅在 class 中的所有测试之前执行一次,而 @AfterClass 则相反。但是,我建议使用 @Before 和 @After 注释 setup 和 tearDown 方法,这使得驱动程序在每次测试之前和之后的安装和拆卸都是 运行 的顺序。这将减少您出错的机会。

我希望这能让您对一些基本实践有一个很好的了解,最后一段也能让您对生命周期有所了解。

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

测试愉快:)

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