336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

HP Load Runner

  • 자체 스크립트 언어를 이용하여 다양한 부하 테스트 시나리오 작성
  • 정교한 모니터링 가능 (CPI, 메모리 사용률,  네트워크 모니터링)

Apache JMeter : 스크립트 작성하는데 높은 숙련도 필요
Multi-Mechanize : 파이썬 기반, 테스트 결과는 Apache JMeter 와 호환되는 포맷으로 출력

nGrinder

http://naver.github.io/ngrinder/

  • 오픈소스 부하 테스트 도구인 Grinder(http://grinder.sourceforge.net/)를 NHN 에서 개서해서 만든 도구
  • Groovy 와 Jytho 기반으로 테스트 스크립트 작성 가능
  • Load Runner처럼 실시간은 아니지만 TPS 나 응답 시간을 그래프로 나타내준다.


블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

FireFox Selenium IDE


https://addons.mozilla.org/ko/firefox/user/katalon/?src=api




다양하게 Export 할수 있는 옵션을 제공한다.

JUnit 테스트를 위해서는 Selenium Server가 동작하고 있어야 함



Selenium RC(Remote Control) vs. WebDriver

Selenium은 WebDriver라는 프로젝트와 합쳐져서 Selenium2 라는 버전이 나왔는데, 이전 버전을 RC(Remote Control)방식, 2 버전을 WebDriver 방식이라고 한다.


Selenium1 버전의 RC버전은 테스트 케이스를 웹 프락시 서버를 통해서 자바스크립트를 사용하여 수행하는 방식이다.



  1. JUnit 이나 Python 스크립트 등으로 만든 Selenium 테스트 케이스를 Driving Process 라고 한다.
  2. Driving Process 가 Selenium 서버와 통신을 해서 Selenium 서버에 있는 Launcher를 통해서, 웹브라우저를 실행한다. 실행된 웹 브라우저는 Selenium 테스트 케이스를 실행하는 자바스크립트가 작성되어 있고, 이 스크립트를 통해서, 테스트 페이지를 띄우게 된다. 이 테스트 페이지는 원본 테스트 페이지가 아니라, 테스트 실행과 결과 체크를 위한 스크립트가 내장된 페이지를 띄우게 된다.
  3. 이 과정은 테스트 타깃 페이지를 바로 띄우는 것이 아니라, Selenium 서버가 웹 프락시 서버 역할을 해서, 2에서 언급한 것과 같은 자바스크립트를 삽입한 페이지를 반환한다.
  4. Selenium 서버 내의 프락시 서버는 테스트 페이지를 만들어내기 위해서 원본 페이지에 접속하여 원본 데이터베이스를 읽어온 후에 거기에 테스트에 필요한 자바 스크립트를 인젝션(Injection) 한다.

* 결국 자바스크립트를 삽입하기 때문에, 실제 브라우저의 동작 방식을 기반으로 테스트하는 것이 아니라 거기에 테스트용 자바 스크립트를 덧입혀서 테스트하는 것이기 때문에 브라우저의 자바스크립트의 지원성이나 테스트 대상 페이지에서 사용한 자바 스크립트에 따라서 테스트가 실패할 가능성이 있다.

그래서 나온 것이 WebDriver인데, 자바스크립트를 삽입하는 것이 아니라 *.dll 이나 *exe를 이용해서 브라우저를 네비티브 수준에서 컨트롤해서 테스트를 진행 및 결과를 얻어낸다.


블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

https://www.crummy.com/software/BeautifulSoup/



설치


from bs4 import BeautifulSoup
import re
html="""
<html>
<head>
<title> test web </title>
</head>
<body>
<p align="center"> text contents 1 </p>
<p align="right"> text contents 2 </p>
<p align="left"> text contents 3 </p>
<p align="center"> text contents 4 </p>
<img src="c:\Python34\Koala.jpg" width="500" height="300">
</body>
</html> """

bs = BeautifulSoup(html)
print (bs.prettify())

# find : 태그를 하나만 가져옴
print (bs.find('title')) # <title> test web </title>
print (bs.find('p', align='center')) # <p align="center"> text contents 1 </p>
print (bs.find('p', align='right')) # <p align="right"> text contents 2 </p>
print (bs.find('p', align='left')) # <p align="left"> text contents 3 </p>

print(bs.find_all('p')) # [<p align="center"> text contents 1 </p>, <p align="right"> text contents 2 </p>, <p align="left"> text contents 3 </p>, <p align="center"> text contents 4 </p>]

head_tag = bs.find('head')
print (head_tag.find('title')) # <title> test web </title>
print (head_tag.find('p')) # None : 반드시 자기 안에 있는 태그만 가져 올 수 있다

body_tag = bs.find('body')
list1 = body_tag.find_all(['p', 'img'])

for tag in list1:
print(tag)
'''
<p align="center"> text contents 1 </p>
<p align="right"> text contents 2 </p>
<p align="left"> text contents 3 </p>
<p align="center"> text contents 4 </p>
<img height="300" src="c:\Python34\Koala.jpg" width="500"/>
'''

tags = bs.find_all(re.compile('^p'))
print(tags)

# find_all
# 인수로 태그 이름 말고 속성 문장, limit등을 전달 할 수 있다
print(bs.find_all(align='center')) # [<p align="center"> text contents 1 </p>, <p align="center"> text contents 4 </p>]
print(bs.find_all(width='500')) # [<img height="300" src="c:\Python34\Koala.jpg" width="500"/>]
print(bs.find_all(text = ' text contents 1 ')) # [' text contents 1 ']
print(bs.find_all(text = re.compile('text+'))) # [' text contents 1 ', ' text contents 2 ', ' text contents 3 ', ' text contents 4 ']

# limit 인수 : 태그의 개수를 제한
print(bs.find_all('p', limit=2)) # [<p align="center"> text contents 1 </p>, <p align="right"> text contents 2 </p>]

print()
print ('*' * 50)
print ('*' * 50)
# 문장 가져오기
body_tag = bs.find('body')
p_tag = body_tag.find('p')
print (p_tag.string) # text contents 1 --> string은 한번에 한 문장 밖에 가져오지 못한다

# 모든 문장 가져오는 방법
strings = body_tag.strings
for string in strings:
print (string)

'''
text contents 1


text contents 2


text contents 3


text contents 4
'''


# 태그에서의 여러 문자열을 하나의 문자열로 출력
print(body_tag.get_text())
'''
text contents 1
text contents 2
text contents 3
text contents 4
'''

# 중간에 들어간 줄 바꿈 기호가 모두 삭제
print(body_tag.get_text(strip=True)) # text contents 1text contents 2text contents 3text contents 4
print(body_tag.get_text('-', strip=True)) # text contents 1-text contents 2-text contents 3-text contents 4

# 태그의 속성
# Beautiful Soup에서는 HTML의 class속성을 가져올 수 있을 뿐 아니라 태그의 속성을 추가, 삭제 변경 모두 가능함
html="""
<html>
<head>
<title> test web </title>
</head>
<body>
<p class="ptag black" align="center"> text contents 1 </p>
<p class="ptag yellow" align="center"> text contents 2 </p>
<p class="ptag red" align="center"> text contents 3 </p>
<img src="c:\Python34\Koala.jpg" width="500" height="300">
</body>
</html> """

bs = BeautifulSoup(html)
p_tag = bs.find('p')
print(p_tag['class']) # ['ptag', 'black']

# 속성 변경
p_tag['class'][1] = 'white'
print(p_tag['class']) # ['ptag', 'white']

# 속성 추가
p_tag['id'] = 'P-TAG'
print (p_tag['id'] ) # P-TAG

# 속성 제거
print(p_tag['align']) # center
del p_tag['align']
#print(p_tag['align']) # error

# 속성은 dictionary
print (p_tag.attrs) # {'class': ['ptag', 'white'], 'id': 'P-TAG'}


###############
# 태그의 관계
###############
html="""
<html>
<head>
<title> test web </title>
</head>
<body>
<p class="ptag black" align="center"> text contents 1 </p>
<p class="ptag yellow" align="center"> text contents 2 </p>
<p class="ptag red" align="center"> text contents 3 </p>
<img src="c:\Python34\Koala.jpg" width="500" height="300">
</body>
</html> """

bs=BeautifulSoup(html)
body_tag = bs.find('body')
print(body_tag)
'''
<body>
<p align="center" class="ptag black"> text contents 1 </p>
<p align="center" class="ptag yellow"> text contents 2 </p>
<p align="center" class="ptag red"> text contents 3 </p>
<img height="300" src="c:\Python34\Koala.jpg" width="500"/>
</body>
'''

for child in body_tag.children:
print (child)

'''
<p align="center" class="ptag black"> text contents 1 </p>


<p align="center" class="ptag yellow"> text contents 2 </p>


<p align="center" class="ptag red"> text contents 3 </p>


<img height="300" src="c:\Python34\Koala.jpg" width="500"/>

'''


img_tag = bs.find('img')
print (img_tag.parent)
''' img 부모인 body가 나옴
<body>
<p align="center" class="ptag black"> text contents 1 </p>
<p align="center" class="ptag yellow"> text contents 2 </p>
<p align="center" class="ptag red"> text contents 3 </p>
<img height="300" src="c:\Python34\Koala.jpg" width="500"/>
</body>
'''

# find_parent : 부모를 찾는 함수
print (img_tag.find_parent('body'))
print (img_tag.find_parent('html'))

html="""
<html>
<head>
<title> test web </title>
</head>
<body>
<p class="ptag black" align="center"> text contents 1 </p>
<p class="ptag yellow" align="center"> text contents 2 </p>
<p class="ptag red" align="center"> text contents 3 </p>
<img src="c:\Python34\Koala.jpg" width="500" height="300">

<div class="container">
<p class="text"> </p>
</div>
</body>
</html> """

bs=BeautifulSoup(html)

# p태그 자식을 가진 모든 부모 찾기 : find_parents
print ('************************* div example')
p_tag = bs.find('p', class_='text')
parents = p_tag.find_parents()
for parent in parents:
print (parent.name)
'''
div
body
html
[document]
'''



블로그 이미지

뚱땡이 우주인

,