【问题标题】:Appium Android Test case, How does it work?Appium Android 测试用例,它是如何工作的?
【发布时间】:2015-08-09 08:34:36
【问题描述】:

您好,我正在尝试学习 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();
    }

}

【问题讨论】:

  • 你是如何运行代码的?您是否没有使用 eclipse 中的 run as junit 选项。在 junit runner 中,您可以查看所有测试用例并全部或单独运行它们。
  • 是的,使用eclipse,右键以junit方式运行,
  • 另一个问题,为什么每次运行测试,都是安装apk文件agian?
  • @Mr T Use 可以使用命令:desired_caps['noReset'] = True 以保持应用程序处于相同状态而不是重新安装
  • @krishna chetan,嗨。你能扩展你的anwser吗,如何运行多个测试用例,而不需要每次都重新安装apk。谢谢你

标签: java android eclipse automation appium


【解决方案1】:

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

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

但是,您可以使用注释强制 JVM 以特定顺序运行测试,但强烈建议不要这样做。

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

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

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

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

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

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

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

测试愉快:)

【讨论】:

  • 你好@qazimusab,谢谢你的回复。非常详细,非常感谢您的时间。我需要按顺序排列测试用例的原因是,首先我需要登录。然后如果成功。遵循其他测试。当我在第一个案例中使用 appium 时,至少需要 1 分钟。所以在测试 2 中我不想重新登录。
  • 因此,您可以每次都登录,也可以不进行重置,以便用户在您的应用中有该功能时保持登录状态。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2016-12-23
    • 2018-09-13
    • 2018-05-01
    • 2013-11-12
    相关资源
    最近更新 更多