您好我正在尝试学习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();
}
}
答案 0 :(得分:4)
在测试中,必须没有测试依赖项,这意味着一个测试不应该依赖于另一个测试的输出。每项测试都应该是独一无二且独立的。因此,消除了订购测试的需要。
JVM在运行时随机决定首先运行哪个测试。订单是随机的。这是因为您不需要以特定顺序运行测试。
但是,有一些注释可以强制JVM按特定顺序运行测试,但强烈建议不要这样做。
关于在每次测试之间没有卸载应用程序的问题,请允许我为您澄清一下。所以基本上,每个使用@Test 注释的测试将在下一次测试(以随机顺序)运行之前结束。
然而,仅仅因为应用程序始终关闭并在测试之间重新打开并不意味着它总是重新安装。实际上有两个主要功能可以控制它:
fullReset - (iOS)删除整个模拟器文件夹。 (Android)通过卸载应用而不是清除应用数据来重置应用状态。在Android上,这也将在会话完成后删除应用程序。 恩。 capabilities.setCapability(" fullReset",true / false);
noReset - 不要在会话之间重置应用状态。 (IOS:不要删除app plist文件; Android:在新会话之前不要卸载应用程序) 恩。 capabilities.setCapability(" noReset",true / false);
此外,@ BeforeClass注释意味着该方法将在类中的所有测试和@AfterClass相反之前运行一次且仅运行一次。但是,我建议使用@Before和@After对setup和tearDown方法进行注释,这样可以在每次测试运行之前和之后设置驱动程序并进行拆卸。这样可以减少出错的几率。
我希望这能让您对一些基本实践有所了解,最后一段也应该让您了解生命周期。
如果您还有任何问题请注释。
快乐测试:)
答案 1 :(得分:0)
另一个选择是在测试2开始之前登录:意味着合并两个测试用例。我有同样的问题,只是改变测试步骤的逻辑就解决了它。