java와 python의 만남: jython과 sikuli
TRANSCRIPT
Java 와 Python 의 만남 :Jython 과 Sikuli
정보기술 시대에 유익한 파이썬 프로그래밍 – 제 10 강 (1)
동양미래대학교2015.7
최용 <[email protected]>
Jython
• Java 플랫폼을 위한 Python• Java 바이트코드에 대한 정적 컴파일 및 동적 컴파일• Java 클래스를 Jython 에서 확장 가능• Java 의 설계에 부합하는 완전한 객체 지향 프로그래밍을 지원• Python 언어 및 그 레퍼런스 구현인 CPython 을 따름• Jython 2.7 은 CPython 2.7 에 대응
Python & Jython
Python 2.7• C
• Multi-platform
• .pyc 로 컴파일• C 확장• GIL
• Python 가비지 컬렉션 ( 참조 횟수 세기 )
Jython 2.7• Java(Java Native Runtime for C
사용 )
• Java 7 또는 8
• $py.class 파일로 컴파일• JFFI 를 사용하여 Java 또는 C 확장• 완전한 멀티 쓰레드• Java 가비지 컬렉션 또는 Python 2.7
과 같은 GC API 도 제공https://wiki.python.org/jython/WhyJython
Jython 의 근황
https://speakerdeck.com/wolevertest/jim-baker-getting-to-jython-2-dot-7-and-beyond
https://www.youtube.com/watch?v=hLm3garVQFo
Jython 2.7 – 추가적 지원• six – 단일 소스 코드로 Python 2 와 3 지원• socket/select/ssl, requests• pip, setuptools• 실행 가능한 zip 아카이브• 지역화된 플랫폼 , CJK 인코딩
https://speakerdeck.com/wolevertest/jim-baker-getting-to-jython-2-dot-7-and-beyond?slide=50
Jython 적용 사례 – WLST
• Oracle WebLogic: Java EE 표준 준수 웹 애플리케이션 서버• WLST(WebLogic Scripting Tool):WebLogic 서버 인스턴스와 도메인을 관리하는 명령행 스크립팅 인터페이스
from weblogic.management.security.authentication import GroupEditorMBeanuser = "my_user"print "Checking if "+user+ " is a Member of a group ... "atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator")if atnr.isMember('Administrators',user,true) == 0: print user+ " is not member of Administrators"else: print user+ " is a member of Administrators"
Example 6-8 Verifying Whether a User is a Member of a Grouphttps://docs.oracle.com/cd/E29542_01/web.1111/e13715/config_wls.htm#WLSTG210
Jython 적용 사례 – HP Universal CMDB• CMDB(Configuration Management
Database, 구성관리 데이터베이스 )• 변경 , 릴리스 , 인시던트 , 서비스 요청 ,
문제점 , 구성 관리 프로세스에 사용할 구성 품목(CI) 에 대한 정보를 저장하는 데이터베이스• IT 프로세스들이 정확성 및 일관성을 유지할 수
있도록 단일 정보소스를 제공• HP Universal CMDB 는 Jython 을
이용하여 CI 를 갱신할 수 있도록 adapter를 제공http://dade.co.za/2015/06/17/example-script-to-update-a-ci-in-hp-ucmdb-using-python-and-suds/
Jython 적용 사례 – nGrinder
• 네이버의 성능 테스트 도구• http://deview.kr/2013/detail.nhn?topicSeq=2
Java 설치• http://
www.oracle.com/technetwork/java/javase/downloads/index.html
• JDK 다운로드 • 설치• 설치 확인
> java -version
Jython 다운로드와 설치• http://www.jython.org/downloads.html• Download Jython 2.7.0 – Installer
• java -jar jython-installer-2.7.0.jar• Installation type: standard
• 시스템 속성 – 고급 – 환경 변수• JYTHON_PATH=C:\jython2.7.0• PATH=%PATH%;%JYTHON_PATH%\bin
Jython 실행
대화식> jython
>>> print("Hello, Jython!")Hello, Jython!
스크립트hello.pyprint("Hello, Jython!")
> jython hello.pyHello, Jython!
Jython – list
>>> my_string_list = ['Hello', 'Jython', 'Lists']>>> multi_list = [1, 2, 'three', 4, 'five', 'six']>>> combo_list = [1, my_string_list, multi_list]>>> my_string_list[2]'Lists'>>> my_string_list_copy = my_string_list[:]>>> my_string_list_copy['Hello', 'Jython', 'Lists']>>> new_list = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]>>> new_list[0:10:2][2, 6, 10, 14, 18]>>> new_list[::2][2, 6, 10, 14, 18]
http://jythonbook-ko.readthedocs.org/en/latest/DataTypes.html
Jython – list
>>> ourList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> for elem in ourList[:5]:... print(elem)... 12345
>>> num_list = [1, 2, 3, 4]
>>> [num * 2 for num in num_list][2, 4, 6, 8]
Jython – tuple
>>> myTuple = ()
>>> myTuple2 = (1, 'two', 3, 'four')
>>> myTuple2(1, 'two', 3, 'four')
>>> myteam = 'Bears',
>>> myteam('Bears',)
Jython – dict
>>> mydict = {}>>> 'firstkey' in mydictFalse>>> mydict['firstkey'] = 'firstval'>>> mydict.values()['firstval']>>> mydict.keys()['firstkey']>>> len(mydict)1>>> mydict{'firstkey': 'firstval'}
Jython – set
>>> s1 = set(['jython', 'cpython'])>>> s1.add('ironpython')>>> s1set(['ironpython', 'jython', 'cpython'])>>> s2 = set(['jython', 'ironpython', 'pypy'])>>> s3 = s1.copy()>>> s3set(['ironpython', 'jython', 'cpython'])>>> s1.difference(s2)set(['cpython'])>>> s1.union(s2)set(['ironpython', 'jython', 'pypy', 'cpython'])>>> s1.symmetric_difference(s2)set(['pypy', 'cpython'])
Jython – java.lang.Math
>>> from java.lang import Math
>>> Math.max(4, 7)7L
>>> Math.pow(10,5)100000.0
>>> Math.round(8.75)9L
>>> Math.abs(-9.765)9.765
>>> from java.lang import System as javasystem
>>> javasystem.out.println("Hello")Hello
http://jythonbook-ko.readthedocs.org/en/latest/JythonAndJavaIntegration.html
Jython – java.swing
swing_test.pyfrom javax.swing import JButton, JFrame
frame = JFrame('Hello, Jython!', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size = (300, 300) )
def change_text(event): print 'Clicked!'
button = JButton('Click Me!', actionPerformed=change_text)frame.add(button)frame.visible = True
> jython swing_test.py
http://jythonbook-ko.readthedocs.org/en/latest/GUIApplications.html
Jython – HelloWorld.java
public class HelloWorld {
public void hello() {
System.out.println("Hello World!");
}
public void hello(String name) {
System.out.printf("Hello %s!", name);
}
}
> javac HelloWorld.java
> jython
>>> import HelloWorld
>>> h = HelloWorld()
>>> h.hello()
Hello World!
>>> h.hello("frank")
Hello frank!
http://jythonbook-ko.readthedocs.org/en/latest/ModulesPackages.html
Jython 참고자료• The Definitive Guide to Jython• 원문 http://www.jython.org/jythonbook/en/1.0/ • 번역 http://jythonbook-ko.readthedocs.org/
AutoHotKey vs. Selenium vs. SikuliX
• AutoHotKey• 스크립팅 언어를 통해 Windows 매크로 생성과 실행을 자동화• 핫 키 , 클립보드 접근 , 데이터 입력 양식 GUI 생성 , 정규 표현식• DLL 호출 , 윈도우 메시지
• Selenium• 브라우저 자동화 , 웹 애플리케이션 테스트• WebDriver: 브라우저 기반 테스트 , Java 로 작성 , 여러 환경에 배포• IDE: 버그 재현 , 파이어폭스 애드온
• Sikuli• 스크린 캡처를 이용• Jython 기반
Sikuli with Selenium & AHK
• Selenium 에서 Sikuli 사용 https://youtu.be/i6oGa9xU_VY• Sikuli 스크립트를 실행시키는 Autohotkey 스크립트
http://ahkscript.org/forum/viewtopic.php?t=76601&sid=5096273991c2722bc17580b36133ace4
SikuliX 다운로드와 설치 , 실행• http://www.sikulix.com/download.html
• SikuliX 1.1.0 설치 파일 다운로드 (sikulixsetup....jar)
• 설치에 사용할 폴더를 생성하고 , 설치 파일 (jar) 을 이동• CMD 에서 설치 실행> java -jar sikulixsetup-1.1.0-…-forsetup.jar
• 설치 옵션 지정하고 진행
• runsikulix.cmd 실행하여 SikuliX 시작
SikuliX 스크립트 – 무료 Wi-Fi 사용
$ /Applications/SikuliX.app/run -r ~/Repos/sikuli-scripts/starbucks_wifi.sikuli
Sikuli 예제• http://www.sikuli.org/videos.html
• Sikuli for Mobile Testing https://youtu.be/01jFl8KrEMY
• 지뢰 찾기 게임 자동 플레이• 아이튠즈 볼륨 조절• 시티빌 게임 자동 플레이