Hybrid Application

  • 네이티브 앱 형태로 만들되 그 안에서 웹사이트를 띄울 수 있는 브라우저 창을 두는 앱
  • 장점
    • 네이티브 수준의 구현을 업데이트 할 때만 마켓 검수가 필요하고 웹뷰에서 나타나는 컨테츠는 웹 사이트만 수정하기 되기 때문에 훨씬 더 유연하게 개발가 유지보수가 가능함 

 

사전 준비

  • 사전에 크롬드라이버가 설치 되어있어야 한다.

 

웹뷰 모드로 접근

  • 크롬 드라이버 로드 및 웹뷰 모드 on
desired_caps['chromedriverExecutable'] = 'D:\Test_Appium\chromedriver.exe'
desired_caps['autoWebview'] = True
 
  • 자동화 컨텍스트 설정
webview = driver.contexts[1]
driver.switch_to.context(webview)
 
 

만약 Native 메뉴로 접근해야한다면?

  • 해당 메뉴에 접근 할때는 아래와 같이 스위칭을 해줘야 한다.
driver.switch_to.context('NATIVE_APP')
 
  • 다시 웹뷰로 접근할때는 아래와 선언해줍니다.
driver.switch_to.context(webview)
 

예제 소스

'''
Test App
Device: emulator-5554
'''
import unittest
from appium import webdriver
from time import sleep
import os
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from appium.webdriver.common.touch_action import TouchAction
 
class LoginTest(unittest.TestCase):
 
    def setUp(self):    
        desired_caps = {}
        desired_caps['platformName'] = 'ANDROID'
        desired_caps['platformVersion'] = '12'
        desired_caps['deviceName'] = 'device1'
        desired_caps['udid'] = 'emulator-5554'
        desired_caps['automationName'] = 'Appium'        
        desired_caps['chromedriverExecutable'] = 'D:\Test_Appium\chromedriver.exe'
        desired_caps['appPackage'] = 'com.xxx.xxxx'
        desired_caps['appActivity'] = 'com.xxx.xxxx'
        desired_caps['unicodeKeyboard'] = True
        desired_caps['resetKeyboard'] = True
        desired_caps['autoWebview'] = True
        desired_caps['noReset'] = True
 
 
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
 
    def testRun(self):      
 
        driver = self.driver       
        wait = WebDriverWait(driver, 20)
        # switch to webview
        webview = driver.contexts[1]
        driver.switch_to.context(webview)
        mainloginbtn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#topArea > nav > ul > li.xans-element-.xans-layout.xans-layout-statelogoff > a')))
        mainloginbtn.click()
         
        id = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#member_id')))       
        id.click()
        id.send_keys('toast')
         
        pw = driver.find_element(By.CSS_SELECTOR, '#member_passwd')
        pw.click()
        pw.send_keys('1234')
         
        loginbtn = driver.find_element(By.CSS_SELECTOR, '#member_login_module_id > div > fieldset > div > div.ec-base-button.gFull > button')
        loginbtn.click()
         
        sleep(8)
 
    def tearDown(self):
        self.driver.quit()
  
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(LoginTest)
    unittest.TextTestRunner(verbosity=2).run(suite)

'APP Test > Appium' 카테고리의 다른 글

Linux 자동화 환경 구성  (0) 2022.06.07
Appium Automation Framework from Java, Maven, TestNG  (0) 2020.08.10
블로그 이미지

정신차려이각박한세상속에서

,

환경정보

  • Ubuntu

 

작업 절차

1. NVM(Node Version Manager 설치)

  • 아래 명령어를 통한 설치 스크립트 실행
$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

$ source /home/toast/.bashrc
  • 설치 가능한 버전 확인
$ nvm ls-remote
  • 아래의 명령어로 최신 버전 설치
$ nvm install v16.15.0
  • NPM 버전 확인
$ npm -v

 

2. Appium 설치

  • 아래의 명령어로 앱피움 설치
$ npm install -g appium
  • 앱피움 닥터 설치 후 실행으로 앱피움 실행 패키지 검사 확인
$ npm install -g appium-doctor
  • java 관련 jre 설치 및 확인
$ sudo apt install default-jre
 
$ java --version

 

3. Android Command Line Tools 설치 및 환경 변수 설정

$ mkdir -p Android/Sdk
toast@toast:~/Android/Sdk$ unzip commandlinetools-linux-8092744_latest.zip
  • 압출 파일을 아래 폴더에 이동
$ cd cmdline-tools/
$ mkdir latest
$ mv bin/ latest/
$ mv lib/ latest/
$ mv NOTICE.txt  latest/
$ mv source.properties  latest/
  • sdk manager 리스트 확인
$ cd /home/toast/Android/Sdk/cmdline-tools/latest/bin/
$ sdkmanager --list
  • 필요한 패키지 설치
$ sdkmanager "platform-tools" "emulator" "build-tools;30.0.3"
  • home 디렉토리에서 환경 변수 설정
$ cd ~
$ vi .bashrc
하단에 아래 내용 추가
export ANDROID_HOME="$HOME/Android/Sdk"
export JAVA_HOME="/usr/lib/jvm/default-java"
 
export ADB="$ANDROID_HOME/plaform-tools/adb"
 
$ source .bashrc

 

4. Python Appium Client 설치

  • 파이썬 스크립트에 포함된 모듈 설치
$ sudo apt install python-pip
$ pip install Appium-Python-Client==0.52

 

5. Appium 실행

  • 아래의 명령어()로 앱피움 서버 실행
$ appium -p 4725

예뮬레이터 환경구성

1. 환경변수 확인 및 사전작업

  • 환경변수 확인
$ cd ~
$ vi .bashrc
 
export ANDROID_HOME="$HOME/Android/Sdk"
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
export ANDROID_SDK_HOME="$HOME/Android/Sdk"
export ANDROID_AVD_HOME="$HOME/.android/avd"
 
export JAVA_HOME="/usr/lib/jvm/default-java"
 
export ADB="$ANDROID_HOME/platform-tools/adb"
 
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/emulator
 
$ source .bashrc
  • 필요 패키지 다운로드(안드로이드 버전은 맞춰서 다운)
$ cd /home/toast/Android/Sdk/cmdline-tools/latest/bin/
$ ./sdkmanager "system-images;android-25;google_apis;armeabi-v7a" "platforms;android-25"
  • 라이센스 동의
$ ./sdkmanager --licenses

 

2. 예뮬레이터 생성 및 실행

  • 예뮬레이터 생성(다운받은 패키지 버전을 실행시키면 된다)
$ cd /home/toast/Android/Sdk/cmdline-tools/latest/bin/
$ echo "no" | ./avdmanager create avd -n test -k "system-images;android-25;google_apis;armeabi-v7a"
  • 생성된 예뮬레이터 리스트 확인
$ cd /home/toast/Android/Sdk/emulator
$ emulator -list-avds
test
  • 예뮬레이터 실행(case1. GPU모드)
$ cd /home/toast/Android/Sdk/emulator
$ ./emulator -avd test -no-audio -no-boot-anim -accel on -gpu swiftshader_indirect
  • 예뮬레이터 실행(case2. 헤드레스모드)
    • emulator -avd {EMULATOR_NAME} -no-window
$ cd /home/toast/Android/Sdk/emulator
$ emulator -avd test -no-window

 

'APP Test > Appium' 카테고리의 다른 글

Hybrid App 스크립트 작성  (0) 2022.06.07
Appium Automation Framework from Java, Maven, TestNG  (0) 2020.08.10
블로그 이미지

정신차려이각박한세상속에서

,

[사전확인]

Native App, Web App, Hybrid App

출처 : https://m.blog.naver.com/acornedu/221012420292

 

 

What is Appium ?

Appium은 모바일 애플리케이션의 테스트 자동화를 가능하게 해주는 오픈소스 라이브러리이다. native, hybrid, mobile web 등 모든 타입의 모바일 애플리케이션의 테스트 자동화를 가능하게 해준다. 자동화된 테스트는 실제 디바이스나 에뮬레이터, 혹은 시뮬레이터에서 실행될 수 있다. 

 

 

 

How Appium Works

앱피움은 Client - Server 아키텍쳐로 동작한다

Appium 서버는 Node.js로 작성되었으며 WebDriver 세션을 생성하고 관리하는 HTTP 서버이다.

클라이언트는 아래의 언어를 지원한다

Java
Python
C#
Javascript
Ruby
PHP
Robot Framework

 

[Desired Capabilities]

자동화 세션의 종류를 서버에 알리기 위해 Appium 서버로 전송되는 일련의 키와 값입니다.

관련 설명은 아래 URL 참고

http://appium.io/docs/en/writing-running-appium/caps/

 

Desired Capabilities - Appium

From here you can search these documents. Enter your search terms below.

appium.io

 

 

[How to install appium on Windows]

Check if node.js is installed on your system

node --version
npm --version

 

Download node.js installer 

https://nodejs.org/en/download/

 

Download | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

Run the installer & install node.js & npm

 

Check if node.js & npm are installed

node --version npm --version

where node

where npm

 

Install appium with node.js

npm install -g appium

 

Check if appium is installed

appium -v
where appium

 

Start appium

appium

 

 

[How to install appium with with Appium Desktop Client]

Download appium desktop client

http://appium.io/

 

Appium: Mobile App Automation Made Awesome.

Appium Philosophy Appium is built on the idea that testing native apps shouldn't require including an SDK or recompiling your app. And that you should be able to use your preferred test practices, frameworks, and tools. Appium is an open source project and

appium.io

 Install appium desktop client

 Start appium through appium desktop client

 

 

 

How to check installation & dependencies (appium-doctor)

Install appium-doctor

https://github.com/appium/appium-doctor

 

appium/appium-doctor

Tool to verify appium installation. Contribute to appium/appium-doctor development by creating an account on GitHub.

github.com

npm install appium-doctor -g
appium-doctor -h
appium-doctor --android

 

[앱피움 관련 설명 참고 URL]

https://domich.wordpress.com/2016/01/11/appium-%EC%95%A0%ED%94%BC%EC%9B%80-%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC%EB%A7%81-%EA%B8%B0%EB%B0%98-ui-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC/

 

안드로이드 테스팅의 효자손 “Appium(앱피움)” 파헤치기 1

[마이크로 소프트웨어 기고, 2015년 7월 31일] 안드로이드 테스팅의 효자손 “Appium(앱피움)” 파헤치기 1 -앱피움 개요 -앱피움의 아키텍쳐 -개발환경 구성 ->안드로이드 앱 개발 환경 구성하기 ->��

domich.wordpress.com

 

 

'APP Test > 테스트 환경구성' 카테고리의 다른 글

Android Stuido Emulator  (0) 2020.08.13
JENKINS 설정 및 테스트  (0) 2020.08.13
빌드 환경 구성(Jenkins-Android-Docker)  (0) 2020.08.10
블로그 이미지

정신차려이각박한세상속에서

,

프로젝트 관련

APP Test 2020. 8. 13. 14:09

해당 페이지는 프로젝트에 관련해서 설명하는 페이지입니다.

자세한 설명은 해당 링크를 참고하시면 됩니다.

 

도커 컨테이너로 구성된 빌드서에서 빌드를 진행

빌드환경은 따로 구축하지 않고 도커 허브에 있는 이미지로 구성함

 

 

Maven, TestNG, AppiumClient를 통한 테스트 스크립트 작성

Appium은 Selenium 베이스라 어떤 언어로도 사용 가능하지만, Java 클라이언트가 가장 사용량이 많고, 그만큼 서포트가 빠르며 안정된 클라이언트이기 때문에 Java를 선택하였다

 

젠킨스를 통해 빌드 및 테스트 스크립트 실행

E2E(End-to-End) 테스트이기 때문에 실제로 테스트 할 모바일 테스트기기가 필요했다

필자는 안드로이드 스튜디오의 에뮬레이터를 이용하여 프로젝트를 진행하였다.

블로그 이미지

정신차려이각박한세상속에서

,

[사전 작업]

Java JDK

Appium is installed

Android sdk is setup (for testing on android )

Xcode is setup (for testing on iOS)

Mobile device is ready for automation

Eclipse is installed

 

 

Appium 설치 관련

https://dejavuqa.tistory.com/222

 

Appium 서버 구성 (on Windows)

app 자동화 테스트를 위해 Windows에 Appium을 설치해 보겠습니다. 먼저 Java JDK를 설치해야 합니다. PC에 Java가 설치되어 있다면 넘어가셔도 됩니다. 아래 Oracle에 가서 JDK 8 Windows 버전을 다운로드 합니

dejavuqa.tistory.com

 

[관련환경 변수]

ANDROID_HOME=C:\Users\toast\AppData\Local\Android\Sdk
CLASSPATH=C:\Program Files\Java\jdk1.8.0_261\lib;.;
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_261
MAVEN=C:\apache-maven-3.6.3-bin\apache-maven-3.6.3
MAVEN_HOME=C:\apache-maven-3.6.3-bin\apache-maven-3.6.3
Path=C:\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin;C:\Program Files\Java\jdk1.8.0_261\bin;C:\Users\toast\AppData\Local\Android\Sdk;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Users\toast\AppData\Local\Android\Sdk\platform-tools;F:\Tools\gradle-6.5.1-bin\bin

 

 

Install TestNG in Eclipse

아래 URL 들어가서 "Online Update-Site" 복사

https://github.com/cbeust/testng-eclipse/

 

cbeust/testng-eclipse

Eclipse plug-in for TestNG. Contribute to cbeust/testng-eclipse development by creating an account on GitHub.

github.com

 

[이클립스]

Help > Install New Software > Add.. 클릭 후 아래와 같이 작성

 

 

 

Create a new maven project

Add required lib/dependencies

maven을 이용한 아래의 라이브러리를 불러오기

Appium java client

Selenium java

TestNG

[pom.xml]

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.appium.Demo</groupId>
  <artifactId>AppiumDemoProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>POMframework</name>
  <url>http://maven.apache.org</url>
    
   <properties>
                        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

            <repositories>
                        <repository>
                                    <id>spring-releases</id>
                                    <name>Spring Releases</name>
                                    <url>https://repo.spring.io/libs-release</url>
                        </repository>
            </repositories>
            <pluginRepositories>
                        <pluginRepository>
                                    <id>spring-releases</id>
                                    <name>Spring Releases</name>
                                    <url>https://repo.spring.io/libs-release</url>
                        </pluginRepository>
            </pluginRepositories>
  
  
<dependencies>

	<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
	<dependency>
	    <groupId>org.seleniumhq.selenium</groupId>
	    <artifactId>selenium-java</artifactId>
	    <version>3.141.59</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/io.appium/java-client -->
	<dependency>
	    <groupId>io.appium</groupId>
	    <artifactId>java-client</artifactId>
	    <version>7.3.0</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.testng/testng -->
	<dependency>
	    <groupId>org.testng</groupId>
	    <artifactId>testng</artifactId>
	    <version>7.1.0</version>
	    <scope>compile</scope>
	</dependency>

</dependencies>

<build>
                        <plugins>
                                    <!-- Compiler plug-in -->
                                    <plugin>
                                                <groupId>org.apache.maven.plugins</groupId>
                                                <artifactId>maven-compiler-plugin</artifactId>
                                                <version>3.8.1</version>
                                                <configuration>
                                                            <source>1.8</source>
                                                            <target>1.8</target>
                                                </configuration>
                                    </plugin>
                                    
                                    <!-- Below plug-in is used to execute tests -->
                                    <plugin>
                                                <groupId>org.apache.maven.plugins</groupId>
                                                <artifactId>maven-surefire-plugin</artifactId>
                                                <version>2.18.1</version>
                                                <configuration>
                                                            <suiteXmlFiles>
                                                                        <!-- TestNG suite XML files -->
                                                                        <suiteXmlFile>testng.xml</suiteXmlFile>
                                                            </suiteXmlFiles>
                                                </configuration>
                                    </plugin>
                        </plugins>
 </build>

</project>

위의 내용은 아래 그림과 같이 mavenrepository에서 참고하여 복붙함

https://mvnrepository.com/ 에서 해당 library 검색

 

Save - Clean - Build project

자동으로 Maven이 해당 dependency를 참고하여 자동으로 관련 라이브러리가 추가된다

 

 

Create tests folders under src/main/java

User src/test/resources create a folder

 

 

Inside tests folder create a class - BaseClass

[BaseClass.java]

package baseClass;

import java.io.File;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;

public class BaseClass {

    protected AppiumDriver<MobileElement> driver;

    @BeforeTest
    public void setup()  {
    	
        try {

      	File classpathRoot = new File(System.getProperty("user.dir"));
    	File appDir = new File(classpathRoot, "\\src\\test\\resources\\apps");
		File app = new File(appDir, "app-release-unsigned.apk");           	

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("deviceName", "sdk_gphone_x86");  //Phone model number
        cap.setCapability("udid", "emulator-5554");
        cap.setCapability("platformName", "Android");
        cap.setCapability("platformVersion", "11");
        cap.setCapability("app", app.getAbsolutePath());
        cap.setCapability("appPackage", "corp.doha.mypt");
        cap.setCapability("appActivity", "corp.doha.mypt.activity.StartActivity");
        
        URL url = new URL("http://localhost:4723/wd/hub");      

        driver = new AppiumDriver<MobileElement>(url, cap);
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
        driver.hideKeyboard();        
        Thread.sleep(5000);

        } catch(Exception exp) {
            System.out.println("Cause is : "+exp.getCause());
            System.out.println("Cause is : "+exp.getMessage());
            exp.printStackTrace();
        }

    }

  @Test
  public void sampleTest() {
      System.out.println("I am inside sample Test");
  }

  @AfterTest
  public void teardown() {
      driver.closeApp();        
      driver.quit();
    }

}

adb devices는 android studio를 이용해서 에뮬로 돌렸음

Desired Capabilities 관련 정보 얻는 방법은 아래 URL 참고

 

https://medium.com/@ivantay2003/appium-desired-capabilities-basic-cheat-sheet-to-launch-mobile-application-ios-android-75b664367031

 

Appium Desired Capabilities — Basic Cheat Sheet to Launch Mobile Application (iOS / Android)

Article is published and is updated as of 1st October 2019. This information may be outdated by the time you read it.

medium.com

 

 

Add test class and extend BaseClass

[TestScript1.java]

package testScripts;

import org.openqa.selenium.By;
import org.testng.annotations.Test;

import baseClass.BaseClass;
import io.appium.java_client.MobileElement;

public class TestScript1  extends BaseClass{
	
	@Test
	public void Login() throws InterruptedException{
		
//		MobileElement Inputid = driver.findElement(By.id("corp.doha.mypt:id/input_id"));		
//		Inputid.sendKeys("test");	
//		MobileElement Inputpw = driver.findElement(By.id("corp.doha.mypt:id/input_password"));		
//		Inputpw.sendKeys("test");				
		MobileElement Login = driver.findElement(By.id("corp.doha.mypt:id/button_login"));		
		Login.click();		
		System.out.println("Completed Test Login...");
		Thread.sleep(5000);
		
	}
	
}

 

위의 스크립트는 아래 API 문서 참고

http://appium.io/docs/en/about-appium/api/#appium-api-documentation

 

API Documentation - Appium

From here you can search these documents. Enter your search terms below.

appium.io

 

 

 Run & Test

1. Run Appium Server

2. Run TestScript1.java

 

 

[참고]

1. appium server 관련

아래와 같은 오류 대응은 아래 URL 참고하자

An unknown server-side error occurred while processing the command.
Original error: unknown error: Chrome version must be >= 55.0.2883.0

http://appium.io/docs/en/writing-running-appium/web/chromedriver/

 

Using Chromedriver - Appium

From here you can search these documents. Enter your search terms below.

appium.io

 

 

 

'APP Test > Appium' 카테고리의 다른 글

Hybrid App 스크립트 작성  (0) 2022.06.07
Linux 자동화 환경 구성  (0) 2022.06.07
블로그 이미지

정신차려이각박한세상속에서

,