Университет ИТМО
Лабораторная работа №4 по дисциплине
«Тестирование ПО»
Выполнил:
студент 3-го курса
группы 3125
Припадчев Артём
Санкт-Петербург
2015
Постановка задачи
Изучить методику функционального тестирования Android приложения, используя Appium.
Необходимо взять приложение согласно варианту, установить симулятор Genymotion, настроить Appium (http://appium.io) и написать 5 тестовых сценариев. Сценарий установки виджета на экран обязателен.
Вариант 5: Twitter
ID
|
1
|
Название
|
Android / Вход в несуществующий аккаунт
|
Автор
|
Артём Припадчев
|
Краткое
описание (цель)
|
Вход в несуществующий аккаунт
|
Начальные условия
|
Twitter открыт
|
Пошаговые инструкции
|
Нажать на кнопку “Log in”
В поле логин ввести lol@mail.ru
В поле пароль ввести 123456
Нажать на кнопку “Log in”
|
Критерий прохождения
|
Показывается сообщения, что такого аккаунта не существует. Вход не выполнен.
|
Примечания
|
|
ID
|
2
|
Название
|
Android / Large widget
|
Автор
|
Артём Припадчев
|
Краткое
описание (цель)
|
Установка большого виджета
|
Начальные условия
|
Открыт рабочий стол Android
|
Пошаговые инструкции
|
Перейти в меню приложений
Перейти на вкладку Widgets
Найти в списке Twttter (large)
Долгим тапом зажать виджет
На рабочем столе отпустить виджет
|
Критерий прохождения
|
Виджет появился на рабочем столе
|
Примечания
|
|
ID
|
3
|
Название
|
Android / Вход в существующий аккаунт
|
Автор
|
Артём Припадчев
|
Краткое
описание (цель)
|
Вход в существующий аккаунт
|
Начальные условия
|
Twitter открыт
|
Пошаговые инструкции
|
Нажать на кнопку “Log in”
Ввести логин и пароль существующей учетной записи
Нажать на кнопку “Log in”
|
Критерий прохождения
|
Осуществляется вход в приложение.
|
Примечания
|
|
ID
|
4
|
Название
|
Android / Поиск / Получение результатов
|
Автор
|
Артём Припадчев
|
Краткое
описание (цель)
|
Проверка работы поиска в приложении
|
Начальные условия
|
Twitter открыт
Осуществлен вход в аккаунт
|
Пошаговые инструкции
|
Нажать на иконку поиска
Ввести любой текст
Нажать Enter
|
Критерий прохождения
|
Показаны результаты поиска по запросу
|
Примечания
|
|
ID
|
5
|
Название
|
Android / Выход из учетной записи
|
Автор
|
Артём Припадчев
|
Краткое
описание (цель)
|
Проверка выхода из учетной записи
|
Начальные условия
|
Twitter открыт
Осуществлен вход в аккаунт
|
Пошаговые инструкции
|
Перейти в меню приложения (кнопка с изображением трех вертикально расположенных точек)
Выбрать Settings
Выбрать свою учетную запись
Выбрать Log out, в всплывающем окне нажать OK
|
Критерий прохождения
|
Осуществлен выход из аккаунта
|
Примечания
|
|
Исходные коды
package twitterTestPack;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.junit.*;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
public class startApp {
private AppiumDriver driver;
WebElement element;
@Before
public void setUp() throws MalformedURLException{
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "/Twitter");
File app = new File(appDir, "com.twitter.android-2.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
capabilities.setCapability("deviceName", "192.168.202.101:5555");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.twitter.android");
capabilities.setCapability("appActivity", ".StartActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
public void aftertest() {
driver.quit();
}
@Test
public void installLargeWidget() throws Exception {
System.out.println("Starting test " + new Object(){}.getClass().getEnclosingMethod().getName());
driver.navigate().back();
element = driver.findElement(By.name("Apps"));
element.click();
element = driver.findElement(By.name("Widgets"));
element.click();
boolean exit = false;
while(!exit)
{
element = null;
try
{
element = driver.findElement(By.name("Twitter (large)"));
}
catch (Exception ex){}
if(element==null)
{
Dimension size = driver.manage().window().getSize();
int startx = (int) (size.width * 0.8);
int endx = (int) (size.width * 0.20);
int starty = size.height / 2;
driver.swipe(startx, starty, endx, starty, 1000);
}
else exit = true;
}
TouchAction action = new TouchAction(driver);
action.longPress(element).release().perform();
System.out.println("Ending test " + new Object(){}.getClass().getEnclosingMethod().getName());
}
@Test
public void invalid_LogIn() throws Exception {
System.out.println("Starting test " + new Object(){}.getClass().getEnclosingMethod().getName());
element = driver.findElement(By.name("Log in"));
element.click();
List textFieldsList = driver.findElementsByClassName("android.widget.EditText");
textFieldsList.get(0).sendKeys("lol@mail.ru");
textFieldsList.get(1).sendKeys("123456");
element = driver.findElement(By.name("Log in"));
element.click();
Thread.sleep(3000);
try
{
element = driver.findElement(By.name("Log in"));
Assert.assertNotNull(element);
}
catch(Exception e){
Assert.fail();
}
System.out.println("Ending test " + new Object(){}.getClass().getEnclosingMethod().getName());
}
}
package twitterTestPack;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.junit.*;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
public class LogIn {
private AppiumDriver driver;
WebElement element;
@Before
public void setUp() throws MalformedURLException{
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "/Twitter");
File app = new File(appDir, "com.twitter.android-2.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
capabilities.setCapability("deviceName", "192.168.202.101:5555");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.twitter.android");
capabilities.setCapability("appActivity", ".StartActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
public void aftertest() {
driver.quit();
}
@Test
public void valid_LogIn() throws Exception {
System.out.println("Starting test " + new Object(){}.getClass().getEnclosingMethod().getName());
element = driver.findElement(By.name("Log in"));
element.click();
List textFieldsList = driver.findElementsByClassName("android.widget.EditText");
textFieldsList.get(0).sendKeys("GetViruses@gmail.com");
textFieldsList.get(1).sendKeys("*********");
element = driver.findElement(By.name("Log in"));
element.click();
Thread.sleep(3000);
try
{
element = driver.findElement(By.name("Log in"));
Assert.assertNull(element);
}
catch(Exception e){
}
System.out.println("Ending test " + new Object(){}.getClass().getEnclosingMethod().getName());
}
}
package twitterTestPack;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.junit.*;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.*;
public class SearchTests {
private AppiumDriver driver;
WebElement element;
@Before
public void setUp() throws MalformedURLException{
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "/Twitter");
File app = new File(appDir, "com.twitter.android-2.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
capabilities.setCapability("deviceName", "192.168.202.101:5555");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.twitter.android");
capabilities.setCapability("appActivity", ".StartActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
try{
driver.findElement(By.name("Don't allow")).click();
}
catch(Exception e){}
}
//@After
public void aftertest() {
driver.quit();
}
@Test
public void getSearchResults() throws Exception
{
driver.findElement(By.name("Search")).click();
element = driver.findElement(By.name("Search Twitter"));
element.sendKeys("text \n");
Thread.sleep(3000);
element = driver.findElement(By.name("All Tweets"));
Assert.assertNotNull(element);
}
}
package twitterTestPack;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.junit.*;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.*;
public class LogOut {
private AppiumDriver driver;
WebElement element;
@Before
public void setUp() throws MalformedURLException{
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "/Twitter");
File app = new File(appDir, "com.twitter.android-2.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
capabilities.setCapability("deviceName", "192.168.202.101:5555");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.twitter.android");
capabilities.setCapability("appActivity", ".StartActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
try{
driver.findElement(By.name("Don't allow")).click();
}
catch(Exception e){}
}
//@After
public void aftertest() {
driver.quit();
}
@Test
public void logOut() throws Exception
{
driver.findElement(By.name("More")).click();
driver.findElement(By.name("Settings")).click();
driver.findElement(By.name("@ArtemVirused")).click();
driver.findElement(By.name("Log out")).click();
driver.findElement(By.name("OK")).click();
//Thread.sleep(5000);
try{
element = driver.findElement(By.name("Sign up"));
System.out.println("ОК");
Assert.assertNotNull(element);
}
catch(Exception e){
Assert.fail();
}
}
//@Test
public void writeTweet() throws Exception
{
element = driver.findElement(By.name("What's happening?"));
element.click();
element = driver.findElement(By.name("What's happening?"));
element.click();
element.sendKeys("TestTweet");
Thread.sleep(1000);
}
}
package twitterTestPack;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({ startApp.class, LogIn.class, SearchTests.class, LogOut.class })
public class AllTests {
}
|