Java와 Python의 만남:
Jython과 Sikuli
정보기술 시대에 유익한 파이썬 프로그래밍 – 제 10 강 (1)
동양미래대학교
2015.7
최용 <sk8er.choi@gmail.com>
주제
• Jython
• SikuliX
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 GroupEditorMBean
user = "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 Group
https://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.py
print("Hello, Jython!")
> jython hello.py
Hello, 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)
...
1
2
3
4
5
>>> 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 mydict
False
>>> mydict['firstkey'] = 'firstval'
>>> mydict.values()
['firstval']
>>> mydict.keys()
['firstkey']
>>> len(mydict)
1
>>> mydict
{'firstkey': 'firstval'}
Jython – set
>>> s1 = set(['jython', 'cpython'])
>>> s1.add('ironpython')
>>> s1
set(['ironpython', 'jython', 'cpython'])
>>> s2 = set(['jython', 'ironpython', 'pypy'])
>>> s3 = s1.copy()
>>> s3
set(['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.py
from 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/
SikuliX
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=50962
73991c2722bc17580b36133ace4
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 스크립트 – 웹브라우저 열기
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
• 지뢰 찾기 게임 자동 플레이
• 아이튠즈 볼륨 조절
• 시티빌 게임 자동 플레이

Java와 Python의 만남: Jython과 Sikuli

  • 1.
    Java와 Python의 만남: Jython과Sikuli 정보기술 시대에 유익한 파이썬 프로그래밍 – 제 10 강 (1) 동양미래대학교 2015.7 최용 <sk8er.choi@gmail.com>
  • 2.
  • 3.
    Jython • Java 플랫폼을위한 Python • Java 바이트코드에 대한 정적 컴파일 및 동적 컴파일 • Java 클래스를 Jython에서 확장 가능 • Java의 설계에 부합하는 완전한 객체 지향 프로그래밍을 지원 • Python 언어 및 그 레퍼런스 구현인 CPython을 따름 • Jython 2.7은 CPython 2.7에 대응
  • 4.
    Python & Jython Python2.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
  • 5.
  • 6.
    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
  • 7.
    Jython 적용 사례– WLST • Oracle WebLogic: Java EE 표준 준수 웹 애플리케이션 서버 • WLST(WebLogic Scripting Tool): WebLogic 서버 인스턴스와 도메인을 관리하는 명령행 스크립팅 인터페이스 from weblogic.management.security.authentication import GroupEditorMBean user = "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 Group https://docs.oracle.com/cd/E29542_01/web.1111/e13715/config_wls.htm#WLSTG210
  • 8.
    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/
  • 9.
    Jython 적용 사례– nGrinder • 네이버의 성능 테스트 도구 • http://deview.kr/2013/detail.nhn?topicSeq=2
  • 10.
    Java 설치 • http://www.oracle.com/technetwork/java/javase/downloads/index.html •JDK 다운로드 • 설치 • 설치 확인 > java -version
  • 11.
    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
  • 12.
    Jython 실행 대화식 > jython >>>print("Hello, Jython!") Hello, Jython! 스크립트 hello.py print("Hello, Jython!") > jython hello.py Hello, Jython!
  • 13.
    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
  • 14.
    Jython – list >>>ourList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> for elem in ourList[:5]: ... print(elem) ... 1 2 3 4 5 >>> num_list = [1, 2, 3, 4] >>> [num * 2 for num in num_list] [2, 4, 6, 8]
  • 15.
    Jython – tuple >>>myTuple = () >>> myTuple2 = (1, 'two', 3, 'four') >>> myTuple2 (1, 'two', 3, 'four') >>> myteam = 'Bears', >>> myteam ('Bears',)
  • 16.
    Jython – dict >>>mydict = {} >>> 'firstkey' in mydict False >>> mydict['firstkey'] = 'firstval' >>> mydict.values() ['firstval'] >>> mydict.keys() ['firstkey'] >>> len(mydict) 1 >>> mydict {'firstkey': 'firstval'}
  • 17.
    Jython – set >>>s1 = set(['jython', 'cpython']) >>> s1.add('ironpython') >>> s1 set(['ironpython', 'jython', 'cpython']) >>> s2 = set(['jython', 'ironpython', 'pypy']) >>> s3 = s1.copy() >>> s3 set(['ironpython', 'jython', 'cpython']) >>> s1.difference(s2) set(['cpython']) >>> s1.union(s2) set(['ironpython', 'jython', 'pypy', 'cpython']) >>> s1.symmetric_difference(s2) set(['pypy', 'cpython'])
  • 18.
    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
  • 19.
    Jython – java.swing swing_test.py fromjavax.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
  • 20.
    Jython – HelloWorld.java publicclass 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
  • 21.
    Jython 참고자료 • TheDefinitive Guide to Jython • 원문 http://www.jython.org/jythonbook/en/1.0/ • 번역 http://jythonbook-ko.readthedocs.org/
  • 22.
  • 23.
    AutoHotKey vs. Seleniumvs. SikuliX • AutoHotKey • 스크립팅 언어를 통해 Windows 매크로 생성과 실행을 자동화 • 핫 키, 클립보드 접근, 데이터 입력 양식 GUI 생성, 정규 표현식 • DLL 호출, 윈도우 메시지 • Selenium • 브라우저 자동화, 웹 애플리케이션 테스트 • WebDriver: 브라우저 기반 테스트, Java로 작성, 여러 환경에 배포 • IDE: 버그 재현, 파이어폭스 애드온 • Sikuli • 스크린 캡처를 이용 • Jython 기반
  • 24.
    Sikuli with Selenium& AHK • Selenium에서 Sikuli 사용 https://youtu.be/i6oGa9xU_VY • Sikuli 스크립트를 실행시키는 Autohotkey 스크립트 http://ahkscript.org/forum/viewtopic.php?t=76601&sid=50962 73991c2722bc17580b36133ace4
  • 25.
    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 시작
  • 26.
    SikuliX 스크립트 –웹브라우저 열기
  • 27.
    SikuliX 스크립트 – 무료Wi-Fi 사용 $ /Applications/SikuliX.app/run -r ~/Repos/sikuli-scripts/starbucks_wifi.sikuli
  • 28.
    Sikuli 예제 • http://www.sikuli.org/videos.html •Sikuli for Mobile Testing https://youtu.be/01jFl8KrEMY • 지뢰 찾기 게임 자동 플레이 • 아이튠즈 볼륨 조절 • 시티빌 게임 자동 플레이