<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3545209391276110829</id><updated>2026-08-23T17:45:23.008+09:00</updated><category term="Android"/><category term="Java"/><category term="API Test"/><category term="Jenkins"/><category term="Selenium"/><category term="TestNG"/><category term="python"/><category term="Junit"/><category term="git"/><category term="Json"/><category term="Postman"/><category term="SQL"/><category term="gitignore"/><category term="javascript"/><category term="maven"/><title type='text'>Development and Test</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>118</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-8350389427539631759</id><published>2023-02-16T15:28:00.002+09:00</published><updated>2023-02-16T15:28:45.603+09:00</updated><title type='text'>yaml 대체</title><content type='html'>&lt;p&gt;snakeyaml -&amp;gt; &amp;nbsp;jackson-dataformat-yaml&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/8350389427539631759/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2023/02/yaml.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8350389427539631759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8350389427539631759'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2023/02/yaml.html' title='yaml 대체'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-6498913351279621822</id><published>2023-02-03T14:55:00.003+09:00</published><updated>2023-02-03T14:55:44.909+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>unix timestamp 13 digit compare</title><content type='html'>&lt;p&gt;Intstant instant = Instant.ofEpochMilli(Long.parseLong(String timestamp));&lt;/p&gt;&lt;p&gt;Instant current = Instant.now();&lt;/p&gt;&lt;p&gt;instant.compareTo(current);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1 : t1 &amp;gt; t2&lt;/p&gt;&lt;p&gt;0 : t1 == t2&lt;/p&gt;&lt;p&gt;-1 : t1 &amp;lt; t2&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/6498913351279621822/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2023/02/unix-timestamp-13-digit-compare.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/6498913351279621822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/6498913351279621822'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2023/02/unix-timestamp-13-digit-compare.html' title='unix timestamp 13 digit compare'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-8766138494240361291</id><published>2023-01-07T17:15:00.003+09:00</published><updated>2023-01-07T17:15:44.108+09:00</updated><title type='text'>Cause-Effect - draft</title><content type='html'>&lt;p&gt;&amp;nbsp;https://www.geeksforgeeks.org/cause-effect-graphing-in-software-engineering/&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/8766138494240361291/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2023/01/cause-effect-draft.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8766138494240361291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8766138494240361291'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2023/01/cause-effect-draft.html' title='Cause-Effect - draft'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-3528971961197271137</id><published>2020-11-16T10:55:00.005+09:00</published><updated>2020-11-16T10:57:50.265+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="gitignore"/><title type='text'>.gitignore 파일 규칙</title><content type='html'>&lt;h4 style=&quot;text-align: left;&quot;&gt;.gitignore 파일이란?&lt;/h4&gt;&lt;p&gt;사용자가 원하지 않는 파일들을 자동으로 git commit 대상에서 제외하도록 규칙을 작성&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;원하지 않는 파일은?&lt;/h4&gt;&lt;p&gt;- IDE tool과 관련된 설정파일&lt;/p&gt;&lt;p&gt;- 언어의 빌드 결과물, 로그 패키지 관련 파일&lt;/p&gt;&lt;p&gt;- 사용자가 제외하기 원하는 파일 등
&lt;/p&gt;&lt;p&gt;- gitignore 참고 url :&amp;nbsp;&lt;a href=&quot;https://github.com/github/gitignore&quot;&gt;https://github.com/github/gitignore&lt;/a&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;.gitignore 파일 위치는?&lt;/h4&gt;&lt;p&gt;프로젝트 최상단 폴더에 위치시키면 된다.&lt;/p&gt;&lt;p&gt;.gitignore 파일 규칙&lt;/p&gt;&lt;p&gt;- #은 주석 역할&lt;/p&gt;&lt;p&gt;- 표준 glob 패턴 사용&lt;/p&gt;&lt;p&gt;- / 를 사용하면 규칙이 프로젝트 전체에 적용되지 않음&lt;/p&gt;&lt;p&gt;- / 로 끝나는 것은 폴더로 인식&lt;/p&gt;&lt;p&gt;- ! 를 사용하면 무시되지 않음&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;.gitignore sample&lt;/h4&gt;&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;#*#&lt;br /&gt;&lt;/span&gt;.#*&lt;br /&gt;*~&lt;br /&gt;_site/&lt;br /&gt;*/src/META-INF/&lt;br /&gt;*/src/main/java/META-INF/&lt;br /&gt;bin/&lt;br /&gt;target/&lt;br /&gt;.classpath&lt;br /&gt;.project&lt;br /&gt;.DS_Store&lt;br /&gt;.settings/&lt;br /&gt;.springBeans&lt;br /&gt;*.iml&lt;br /&gt;*.iws&lt;br /&gt;*.ipr&lt;br /&gt;.idea/&lt;br /&gt;code/&lt;br /&gt;cargo-installs/&lt;br /&gt;atlassian-ide-plugin.xml&lt;br /&gt;deploy/&lt;/pre&gt;&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;# 모든 확장자 .txt 파일을 무시&lt;br /&gt;&lt;/span&gt;*.txt&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: grey;&quot;&gt;# 무시하는 모든 확장자 .txt 파일들 중에서 test.txt 파일은 무시하지 않음&lt;br /&gt;&lt;/span&gt;!test.txt&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: grey;&quot;&gt;# Project/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#  ㄴ.gitignore&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#  ㄴsrc/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#    ㄴabc.txt&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#    ㄴTODO/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#      ㄴtest1.txt&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#  ㄴTODO/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#    ㄴtest2.txt&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;# 현재 폴더 중에서 &lt;/span&gt;&lt;span style=&quot;color: #a8c023; font-style: italic;&quot;&gt;TODO 폴더에 있는 모든 파일을 무시&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;# (즉, test1.txt 파일만 무시되고 test2.txt 파일은 무시되지 않음)&lt;br /&gt;&lt;/span&gt;/TODO&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: grey;&quot;&gt;# 프로젝트 전체 폴더 중 TODO라는 폴더명을 사용하는 &lt;/span&gt;&lt;span style=&quot;color: #a8c023; font-style: italic;&quot;&gt;TODO 폴더의 하위 파일은 모두 무시&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;# (즉, test1.txt 파일과 test2.txt 파일 모두 무시됨)&lt;br /&gt;&lt;/span&gt;TODO/&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: grey;&quot;&gt;# Project/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#  ㄴ.gitignore&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#  ㄴdoc/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#    ㄴa.txt&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#    ㄴb.pdf&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#    ㄴserver/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#      ㄴaa.txt&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#      ㄴbb.pdf&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;# 현재 폴더 중에서 doc 폴더 바로 밑에 있는 .txt 확장자 파일만 모두 무시&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;# 단, doc/server/aa.txt 와 같은 형식에서는 .txt 확장자 파일이 무시되지 않음&lt;br /&gt;&lt;/span&gt;doc/*.txt&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: grey;&quot;&gt;# 현재 폴더 중에서 doc 폴더 하위에 있는 .pdf 확장자 파일은&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;# doc 폴더 하위 어떤 폴더에 들어 있더라도 모두 무시&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;# (즉, b.pdf 파일과 bb.pdf 파일 모두 무시됨)&lt;br /&gt;&lt;/span&gt;doc/**/*.pdf&lt;/pre&gt;&lt;div id=&quot;gtx-trans&quot; style=&quot;left: -6px; position: absolute; top: 641.594px;&quot;&gt;&lt;div class=&quot;gtx-trans-icon&quot;&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/3528971961197271137/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/11/gitignore.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3528971961197271137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3528971961197271137'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/11/gitignore.html' title='.gitignore 파일 규칙'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-3803677623782271118</id><published>2020-11-16T10:43:00.003+09:00</published><updated>2020-11-16T10:59:10.771+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>Git 원격 및 로컬 디렉토리 연동방법</title><content type='html'>&lt;p&gt;1. git init&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;i&gt;//저장소 초기화&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2. git add 파일명(폴더)&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;i&gt;//파일 및 폴더 추가&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;3. git commit -m &quot;first commit&quot;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;i&gt;//commit&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4. git remote add origin URL&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;i&gt;//원격 저장소 연동&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;5. git push -u origin master &amp;lt;리모트 저장소 이름&amp;gt; &amp;lt;push할 브랜치 이름&amp;gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;i&gt;//파일 및 폴더 push&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/3803677623782271118/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/11/git.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3803677623782271118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3803677623782271118'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/11/git.html' title='Git 원격 및 로컬 디렉토리 연동방법'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-9035855676263193172</id><published>2020-11-09T14:33:00.002+09:00</published><updated>2020-11-09T14:33:20.489+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Selenium"/><title type='text'>element.click으로 브라우져의 새 탭이 열렸을 때 driver 제어 방법</title><content type='html'>&lt;p&gt;&amp;nbsp;element.click 으로 같은 화면에서 UI가 갱신되는 게 아니라 새 탭이 열렸을 경우,&lt;/p&gt;&lt;p&gt;selenium driver에 알려줘야 한다.&lt;/p&gt;&lt;p&gt;그렇지 않으면 기존에 오픈 된 브라우져의 화면에서 element를 찾게 되어 no such element 에러 메시지를 보게 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;[How to]&lt;/h3&gt;&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Menlo&#39;; font-size: 9.0pt;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;//driver 제어를 위한 현재 열려있는 브라우져 확인&lt;br /&gt;&lt;/span&gt;String parentWindow = &lt;span style=&quot;color: #9876aa;&quot;&gt;driver&lt;/span&gt;.getWindowHandle()&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #9876aa;&quot;&gt;element&lt;/span&gt;.click()&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&lt;br /&gt;&lt;/span&gt;String childWindow = &lt;span style=&quot;color: #cc7832;&quot;&gt;null;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;for&lt;/span&gt;(String childs: &lt;span style=&quot;color: #9876aa;&quot;&gt;driver&lt;/span&gt;.getWindowHandles()){&lt;br /&gt;    &lt;span style=&quot;color: #cc7832;&quot;&gt;if&lt;/span&gt;(!childs.equals(parentWindow)){&lt;br /&gt;        childWindow = childs&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        break;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;span style=&quot;color: #9876aa;&quot;&gt;driver&lt;/span&gt;.switchTo().window(childWindow)&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/9035855676263193172/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/11/elementclick-driver.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/9035855676263193172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/9035855676263193172'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/11/elementclick-driver.html' title='element.click으로 브라우져의 새 탭이 열렸을 때 driver 제어 방법'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-7395616766556988648</id><published>2020-11-06T17:47:00.003+09:00</published><updated>2020-11-06T17:47:45.294+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Junit"/><category scheme="http://www.blogger.com/atom/ns#" term="TestNG"/><title type='text'>Hamcrest Test Framework</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Hamcrest란?&lt;/h2&gt;&lt;p&gt;test framework을 이용하여 단위 테스트 진행 시 assert를 유연하게 하기 위해 matcher를 이용하여 좀 더 쉽고 확장성 있는 assert를 하기 위해 만들어진 framework이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Hamcrest는 처음부터 test framework과 통합되도록 설계되어 JUnit, TestNG와 함께 사용할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;maven dependency&lt;/h3&gt;&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Menlo&#39;; font-size: 9.0pt;&quot;&gt;&lt;span style=&quot;color: #e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #e8bf6a;&quot;&gt;    &amp;lt;groupId&amp;gt;&lt;/span&gt;org.hamcrest&lt;span style=&quot;color: #e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #e8bf6a;&quot;&gt;    &amp;lt;artifactId&amp;gt;&lt;/span&gt;hamcrest-library&lt;span style=&quot;color: #e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #e8bf6a;&quot;&gt;    &amp;lt;version&amp;gt;&lt;/span&gt;2.2&lt;span style=&quot;color: #e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #e8bf6a;&quot;&gt;    &amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span style=&quot;color: #e8bf6a;&quot;&gt;&amp;lt;/scope&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Hamcrest code&lt;/h3&gt;&lt;pre style=&quot;background-color: #2b2b2b; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: #e8bf6a;&quot;&gt;assertThat(actual, is(equalTo(expedted);
assertThat(result, instanceof String);
assertThat(result, is(hasItem(anyOf(equalTo(&quot;x&quot;, equalTo(&quot;y&quot;), equalTo(&quot;z&quot;))))));&lt;/span&gt;&lt;/pre&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Hamcrest Matcher&amp;nbsp;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;allOf - matches if all matchers match (short circuits)&lt;/div&gt;&lt;div&gt;anyOf - matches if any matchers match (short circuits)&lt;/div&gt;&lt;div&gt;not - matches if the wrapped matcher doesn’t match and vice&lt;/div&gt;&lt;div&gt;equalTo - test object equality using the equals method&lt;/div&gt;&lt;div&gt;is - decorator for equalTo to improve readability&lt;/div&gt;&lt;div&gt;hasToString - test Object.toString&lt;/div&gt;&lt;div&gt;instanceOf, isCompatibleType - test type&lt;/div&gt;&lt;div&gt;notNullValue, nullValue - test for null&lt;/div&gt;&lt;div&gt;sameInstance - test object identity&lt;/div&gt;&lt;div&gt;hasEntry, hasKey, hasValue - test a map contains an entry, key or value&lt;/div&gt;&lt;div&gt;hasItem, hasItems - test a collection contains elements&lt;/div&gt;&lt;div&gt;hasItemInArray - test an array contains an element&lt;/div&gt;&lt;div&gt;closeTo - test floating point values are close to a given value&lt;/div&gt;&lt;div&gt;greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo&lt;/div&gt;&lt;div&gt;equalToIgnoringCase - test string equality ignoring case&lt;/div&gt;&lt;div&gt;equalToIgnoringWhiteSpace - test string equality ignoring differences in runs of whitespace&lt;/div&gt;&lt;div&gt;containsString, endsWith, startsWith - test string matching&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;gtx-trans&quot; style=&quot;left: -10px; position: absolute; top: 341.781px;&quot;&gt;&lt;div class=&quot;gtx-trans-icon&quot;&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/7395616766556988648/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/11/hamcrest-test-framework.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/7395616766556988648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/7395616766556988648'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/11/hamcrest-test-framework.html' title='Hamcrest Test Framework'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-8153313125025144250</id><published>2020-01-22T15:31:00.002+09:00</published><updated>2020-01-22T15:31:45.748+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Python Test Code 예제</title><content type='html'>&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;unittest&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;ArithTest&lt;/span&gt;(unittest&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;TestCase):
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;runTest&lt;/span&gt;(&lt;span style=&quot;color: #007020;&quot;&gt;self&lt;/span&gt;):
        &lt;span style=&quot;color: #dd4422;&quot;&gt;&quot;&quot;&quot; Test addition and succeed. &quot;&quot;&quot;&lt;/span&gt;
        &lt;span style=&quot;color: #007020;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;failUnless(&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;‘&lt;/span&gt;one plus one fails&lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;!’&lt;/span&gt;)
        &lt;span style=&quot;color: #007020;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;failIf(&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;‘&lt;/span&gt;one plus one fails again&lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;!’&lt;/span&gt;)
        &lt;span style=&quot;color: #007020;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;failUnlessEqual(&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;‘&lt;/span&gt;more trouble &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;with&lt;/span&gt; one plus one&lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;!’&lt;/span&gt;)

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;suite&lt;/span&gt;():
    suite &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; unittest&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;TestSuite()
    suite&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;addTest(ArithTest())
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; suite

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; __name__ &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;‘&lt;/span&gt;__main__&lt;span style=&quot;background-color: #ffaaaa; color: red;&quot;&gt;’&lt;/span&gt;:
    runner &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; unittest&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;TextTestRunner()
    test_suite &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; suite()
    runner&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;run(test_suite)
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/8153313125025144250/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/python-test-code.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8153313125025144250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8153313125025144250'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/python-test-code.html' title='Python Test Code 예제'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-395611198446724732</id><published>2020-01-22T11:50:00.001+09:00</published><updated>2020-01-22T14:44:45.724+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Selenium"/><title type='text'>Selenium WebDriver setting</title><content type='html'>&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;LaunchWebDriver&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;final&lt;/span&gt; Logger logger &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; LoggerFactory&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getLogger&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;UserPageTest&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

    WebDriver driver&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;LaunchWebDriver&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;WebDriver driver&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;driver&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        PageFactory&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;initElements&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;driver&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; WebDriver &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;launchWebDriverMode&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String headlessOnOff&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;

        Path path &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; Paths&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        String pathStr &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; path&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toAbsolutePath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt; 
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;pathStr={}&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; pathStr&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

  &lt;span style=&quot;color: #888888;&quot;&gt;/* MAC 과 WINDOWS chromedriver 분기 */&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;isWindows&lt;span style=&quot;color: #333333;&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setProperty&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;webdriver.chrome.driver&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; pathStr &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;//driver//chromedriver.exe&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;isMac&lt;span style=&quot;color: #333333;&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setProperty&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;webdriver.chrome.driver&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; pathStr &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;//driver//chromedriver&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;지원하지 않는 OS 입니다.&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        ChromeOptions co &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ChromeOptions&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;computername={}&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getenv&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;computername&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;/* 공통 ChromeOptions 값. */&lt;/span&gt;
        co&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addArguments&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;start-maximized&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        co&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addArguments&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;enable-automation&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        co&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addArguments&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;--disable-gpu&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;isWindows&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;NG-BF&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getenv&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;computername&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;/* Jenkins 서버(windows)는 항상 headless 모드이다 (java.awt.headless = true) */&lt;/span&gt;
            logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;headless Mode : NG-BF is Always headlessMode&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;/* jenkins 에만 추가되는 ChromeOptions 값. */&lt;/span&gt;
            co&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addArguments&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;--no-sandbox&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;On&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;headlessOnOff&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #888888;&quot;&gt;// On / Off&lt;/span&gt;
                &lt;span style=&quot;color: #888888;&quot;&gt;/* headless chrome */&lt;/span&gt;
                co&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addArguments&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;--headless&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
   &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        driver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ChromeDriver&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;co&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;timeouts&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;implicitlyWait&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; TimeUnit&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;SECONDS&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt; &lt;span style=&quot;color: #888888;&quot;&gt;// 기본 대기 시간&lt;/span&gt;
        driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;maximize&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;isWindows&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;OS&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isFamilyWindows&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;isMac&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;OS&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isFamilyMac&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;abstract&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;BaseTest&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; WebDriver driver&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; LaunchWebDriver launchWebDriver&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@BeforeClass&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;setUp&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(){&lt;/span&gt;
        System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;*** before class ****&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        String headlessOnOff &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;On&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #888888;&quot;&gt;// headless = On or Off&lt;/span&gt;
        launchWebDriver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; LaunchWebDriver&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;driver&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        driver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; launchWebDriver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;launchWebDriverMode&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;headlessOnOff&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;driver &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
            Assert&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;assertTrue&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@AfterClass&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;tearDown&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(){&lt;/span&gt;
        System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;*** after class ****&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt; driver &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
            driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;quit&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@AfterTest&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;afterTest&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; IOException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;*** after test ****&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt; LaunchWebDriver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isWindows&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
            Runtime&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRuntime&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;taskkill /F /IM chromedriver.exe /T&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/395611198446724732/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/selenium-webdriver-setting.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/395611198446724732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/395611198446724732'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/selenium-webdriver-setting.html' title='Selenium WebDriver setting'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-7380199675176170316</id><published>2020-01-21T16:15:00.002+09:00</published><updated>2020-01-21T16:15:24.073+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>SQL Join</title><content type='html'>SQL Join&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0wIuiTkNkMQl7Vo9fw5sLoKLtt3j_eA5kVt1Mqe3eIE2QP86cKB_a6gfRT0dkY4GBHeG5ELPqXq_lTpiMm4q5-Z-ws1l2t2s8Dh6-UK-YHy4ZM6kU1RPF_VaD4WiRyMZP0d6FGgxE0e/s1600/Visual_SQL_JOINS_V2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;472&quot; data-original-width=&quot;600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0wIuiTkNkMQl7Vo9fw5sLoKLtt3j_eA5kVt1Mqe3eIE2QP86cKB_a6gfRT0dkY4GBHeG5ELPqXq_lTpiMm4q5-Z-ws1l2t2s8Dh6-UK-YHy4ZM6kU1RPF_VaD4WiRyMZP0d6FGgxE0e/s1600/Visual_SQL_JOINS_V2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;left: 6px; position: absolute; top: 30px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/7380199675176170316/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/sql-join.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/7380199675176170316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/7380199675176170316'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/sql-join.html' title='SQL Join'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0wIuiTkNkMQl7Vo9fw5sLoKLtt3j_eA5kVt1Mqe3eIE2QP86cKB_a6gfRT0dkY4GBHeG5ELPqXq_lTpiMm4q5-Z-ws1l2t2s8Dh6-UK-YHy4ZM6kU1RPF_VaD4WiRyMZP0d6FGgxE0e/s72-c/Visual_SQL_JOINS_V2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-2703272090316924688</id><published>2020-01-17T18:05:00.000+09:00</published><updated>2020-01-17T18:05:34.223+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>test 메소드 이름 알아오기</title><content type='html'>&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #555555; font-weight: bold&quot;&gt;@Test&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(){&lt;/span&gt;
 StackTraceElement&lt;span style=&quot;color: #333333&quot;&gt;[]&lt;/span&gt; stackTraceElements &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; Thread&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;currentThread&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;getStackTrace&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
 String methodName &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; stackTraceElements&lt;span style=&quot;color: #333333&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;getMethodName&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/2703272090316924688/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/test.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/2703272090316924688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/2703272090316924688'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/test.html' title='test 메소드 이름 알아오기'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-3603462730965526517</id><published>2020-01-17T15:49:00.003+09:00</published><updated>2020-01-17T15:49:33.446+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>API Test에서 테스트 수행 시 profile 선택</title><content type='html'>1. mvn clean test -P ${env}&lt;br /&gt;
env = qa or release or stage&lt;br /&gt;
&lt;br /&gt;
2. intelliJ 에서는&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG8zA320XZcDpZojQq5FYNGXVS90jbgBdPHSyqVsBvblFHSWrE-3gFYoHhBQ99v6I1zPtHke1V7wc9_xUYx3Vtl3OIWbwqjgV6h4dDp_5jdmWdu7H3rzGzO_IzmqmqO4SbxaEBEQVmepG4/s1600/IntelliJ_profile%25EC%2584%25A0%25ED%2583%259D.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;146&quot; data-original-width=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG8zA320XZcDpZojQq5FYNGXVS90jbgBdPHSyqVsBvblFHSWrE-3gFYoHhBQ99v6I1zPtHke1V7wc9_xUYx3Vtl3OIWbwqjgV6h4dDp_5jdmWdu7H3rzGzO_IzmqmqO4SbxaEBEQVmepG4/s1600/IntelliJ_profile%25EC%2584%25A0%25ED%2583%259D.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhADmWKmOIYzADmnTntC5t8QBR9fX0zqHnG4SH4rSyBilmOepyDoo86Id60fsNgWDktkcrv9uviBAaEWRTVL-zYKH6_niRzFHl8OGNht3K7vXz4d8OzbFcvlLKtMhcxBhMhAwn47OVdRa4/s1600/pom_xml_profile%25EC%25A0%2595%25EC%259D%2598.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;390&quot; data-original-width=&quot;204&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhADmWKmOIYzADmnTntC5t8QBR9fX0zqHnG4SH4rSyBilmOepyDoo86Id60fsNgWDktkcrv9uviBAaEWRTVL-zYKH6_niRzFHl8OGNht3K7vXz4d8OzbFcvlLKtMhcxBhMhAwn47OVdRa4/s400/pom_xml_profile%25EC%25A0%2595%25EC%259D%2598.png&quot; width=&quot;205&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span id=&quot;goog_1537436468&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1537436469&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/3603462730965526517/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/api-test-profile.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3603462730965526517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3603462730965526517'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/api-test-profile.html' title='API Test에서 테스트 수행 시 profile 선택'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG8zA320XZcDpZojQq5FYNGXVS90jbgBdPHSyqVsBvblFHSWrE-3gFYoHhBQ99v6I1zPtHke1V7wc9_xUYx3Vtl3OIWbwqjgV6h4dDp_5jdmWdu7H3rzGzO_IzmqmqO4SbxaEBEQVmepG4/s72-c/IntelliJ_profile%25EC%2584%25A0%25ED%2583%259D.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-4636037144310307191</id><published>2020-01-17T15:41:00.000+09:00</published><updated>2020-01-17T15:44:10.972+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API Test"/><title type='text'>Spec by Exam</title><content type='html'>API spec 분석 후 해당 API에 대해 예상되는 intput값과 output값을 기입하는 문서.&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TC No&lt;/td&gt;
&lt;td&gt;Test Level&lt;/td&gt;
&lt;td&gt;Assertion&lt;/td&gt;
&lt;td&gt;Precondition&lt;/td&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Comment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
Test Level&lt;br /&gt;
&lt;br /&gt;
Positive&lt;br /&gt;
P-Mandatory : 필수 파라메타로 기본 기능 검증&lt;br /&gt;
P-ALL : 모든 파라메타로 기본 기능 검증&lt;br /&gt;
P-InRange : 필수 파라메타에 대한 범위 검증, 조건부 필수 파라메타에 대한 범위 내 검증, 옵션 파라메타에 대한 범위 내 검증&lt;br /&gt;
&lt;br /&gt;
Negative&lt;br /&gt;
N-isMandatory : 파라메타 존재에 대한 예외 처리 검증&lt;br /&gt;
N-OutRange : 유효하지 않은 값에 대한 예외 처리 검증&lt;br /&gt;
N-Restriction : 파라메타 별 제약 사항 검증&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/4636037144310307191/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/spec-by-exam.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/4636037144310307191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/4636037144310307191'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/spec-by-exam.html' title='Spec by Exam'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-4389084979588542191</id><published>2020-01-17T14:29:00.000+09:00</published><updated>2020-01-17T14:30:56.346+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TestNG"/><title type='text'>TestNG의 ReportNG 설정법</title><content type='html'>&lt;b&gt;pom.xml&lt;/b&gt;&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.seleniumhq.selenium&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;selenium-java&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${selenium.java.version}&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.uncommons&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;reportng&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${reportng.version}&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.google.inject&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;guice&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${guice.version}&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    ......
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;build&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.maven.plugins&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;maven-surefire-plugin&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${maven.surefire.version}&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;encoding&amp;gt;&lt;/span&gt;UTF-8&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/encoding&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;argLine&amp;gt;&lt;/span&gt;-Dfile.encoding=UTF-8&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/argLine&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
                    &lt;span style=&quot;color: #888888;&quot;&gt;&amp;lt;!-- Setting ReportNG listeners --&amp;gt;&lt;/span&gt;
                    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
                        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;usedefaultlisteners&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
                        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;false&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
                    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
                    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
                        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;listener&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
                        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;org.uncommons.reportng.HTMLReporter,
                            org.uncommons.reportng.JUnitXMLReporter&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
                    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;suiteXmlFiles&amp;gt;&lt;/span&gt;
                    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;suiteXmlFile&amp;gt;&lt;/span&gt;src/test/resources/testng.xml&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/suiteXmlFile&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/suiteXmlFiles&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
        ......
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;testng.xml(test-suite)&lt;/b&gt;&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #557799;&quot;&gt;&amp;lt;!DOCTYPE suite SYSTEM &quot;http://beust.com/testng/testng-1.0.dtd&quot; &amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;suite&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;TestNG Suite Name&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;listeners&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;listener&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;class-name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;org.uncommons.reportng.HTMLReporter&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;listener&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;class-name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;org.uncommons.reportng.JUnitXMLReporter&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/listeners&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;test&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;tmon_monthly_maintenance&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;classes&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;com.tmoncorp.test.maintenance.TmonHomeTest&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;com.tmoncorp.test.maintenance.UserPageTest&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
            .....
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/classes&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/suite&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/4389084979588542191/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/testng-reportng.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/4389084979588542191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/4389084979588542191'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/testng-reportng.html' title='TestNG의 ReportNG 설정법'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-2266679147450171688</id><published>2020-01-17T14:04:00.001+09:00</published><updated>2020-01-17T14:04:58.218+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API Test"/><title type='text'>Response Data 추출 시 NullPointerException으로 테스트가 종료되지 않게 하려면</title><content type='html'>데이터 추출 후 assertion 시 isNotNull로 하려고 했으나 데이터 추출하는 부분에서 NullPointerException이 발생하게 되면 assert를 하지 않고 바로 테스트가 종료된다.&lt;br /&gt;
&lt;br /&gt;
리포트에서도 NullPointerException으로 fail이 발생했다고만 나와서 왜 NullPointerException이 났는지 코드를 봐야 하는 문제점이 있다.&lt;br /&gt;
&lt;br /&gt;
해결책으로는 MapUtils(org.apache.commons.collections)를 사용하면 된다.&lt;br /&gt;
MapUtils의 get Method들은 내부적으로 null 체크를 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&amp;lt;response&amp;gt;&lt;/div&gt;
&lt;div class=&quot;table-wrap&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px; overflow-x: auto; padding: 0px;&quot;&gt;
&lt;table class=&quot;confluenceTable&quot; style=&quot;border-collapse: collapse; margin: 0px; overflow-x: auto;&quot;&gt;&lt;colgroup&gt;&lt;col&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
{&lt;br /&gt;
&quot;data&quot;: {&lt;br /&gt;
&quot;dealSrl&quot;: [&lt;br /&gt;
1111111111&lt;br /&gt;
],&lt;br /&gt;
&quot;total&quot;: 1&lt;br /&gt;
},&lt;br /&gt;
&quot;httpStatus&quot;: &quot;OK&quot;,&lt;br /&gt;
&quot;httpCode&quot;: 200&lt;br /&gt;
}&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&quot;assertion&amp;nbsp; :&amp;nbsp;data.dealSrl[0]의 dealSrl 값 확인&quot; 이라고 했을 때&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;Map&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;Object&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; Object&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; resMap &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; jsonPath&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;Long&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; dealSrlList &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;List&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; MapUtils&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getObject&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;resMap&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;dealSrl&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
softAssertions&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;assertThat&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;dealSrlList&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;methodName&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isEqualTo&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;total&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
 
Long dealSrl &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; dealSrlList&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;dealSrl : &quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; dealSrl&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
softAssertions&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;assertThat&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;dealSrl&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;methodName&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isNotNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/2266679147450171688/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/response-data-nullpointerexception.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/2266679147450171688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/2266679147450171688'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/response-data-nullpointerexception.html' title='Response Data 추출 시 NullPointerException으로 테스트가 종료되지 않게 하려면'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-3951582523235146441</id><published>2020-01-16T16:36:00.000+09:00</published><updated>2020-01-16T16:36:00.957+09:00</updated><title type='text'>.gitignore 내용</title><content type='html'>&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Menlo&#39;; font-size: 9.0pt;&quot;&gt;#*#
.#*
*~
_site/
*/src/META-INF/
*/src/main/java/META-INF/
bin/
target/
.classpath
.project
.DS_Store
.settings/
.springBeans
*.iml
*.iws
*.ipr
.idea/
code/
cargo-installs/
atlassian-ide-plugin.xml
deploy/&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/3951582523235146441/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/gitignore.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3951582523235146441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3951582523235146441'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/gitignore.html' title='.gitignore 내용'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-5014270337154155433</id><published>2020-01-16T14:26:00.000+09:00</published><updated>2020-01-16T16:17:46.685+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Selenium"/><title type='text'>Selenium implicitly wait &amp; explicitly wait</title><content type='html'>&lt;b&gt;[implicitly wait]&lt;/b&gt;&lt;br /&gt;
해당 페이지에 속한 element가 모두 로딩될 때 까지 기다리는 방식&lt;br /&gt;
&lt;br /&gt;
syntax&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;timeouts&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;implicitlyWait&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;TimeOut&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; TimeUnit&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;SECONDS&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
example&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;driver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ChromeDriver&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;co&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;timeouts&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;implicitlyWait&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; TimeUnit&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;SECONDS&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;maximize&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;[explicitly wait]&lt;/b&gt;&lt;br /&gt;
특정 element가 나타날 때 까지 기다려주는 방식&lt;br /&gt;
&lt;br /&gt;
syntax&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;WebDriverWait wait &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; WebDriverWait&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;WebDriverReference&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; TimeOut&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
exmaple&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;driver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ChromeDriver&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
WebDriverWait wait &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; WebDriverWait&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;driver&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;....&lt;/span&gt;
WebElement element&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
element &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; wait&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;until&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ExpectedConditions&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;visibilityOfElementLocated&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;,,,&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)));&lt;/span&gt;
element&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/5014270337154155433/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/selenium-implicitly-wait-explicitly-wait.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/5014270337154155433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/5014270337154155433'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/selenium-implicitly-wait-explicitly-wait.html' title='Selenium implicitly wait &amp; explicitly wait'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-105538184892461066</id><published>2020-01-16T11:41:00.002+09:00</published><updated>2020-01-16T11:41:37.936+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Selenium"/><title type='text'>ChromeOptions argument</title><content type='html'>ChromeOptions argument 설명&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://peter.sh/experiments/chromium-command-line-switches/&quot;&gt;https://peter.sh/experiments/chromium-command-line-switches/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/105538184892461066/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/chromeoptions-argument.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/105538184892461066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/105538184892461066'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/chromeoptions-argument.html' title='ChromeOptions argument'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-7205755535137510084</id><published>2020-01-14T12:13:00.001+09:00</published><updated>2020-01-14T12:13:15.795+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>HttpStatusCode 체크</title><content type='html'>&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.apache.http.HttpResponse&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.apache.http.client.HttpClient&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.apache.http.client.methods.HttpGet&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.apache.http.impl.client.HttpClientBuilder&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
 
 
HttpClient client &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; HttpClientBuilder&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;create&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
HttpResponse response &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; client&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;execute&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;new&lt;/span&gt; HttpGet&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;URL&lt;span style=&quot;color: #333333&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;int&lt;/span&gt; statusCode &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; response&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;getStatusLine&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;getStatusCode&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
logger&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;StatusCode: {}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;,&lt;/span&gt; statusCode&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/7205755535137510084/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2020/01/httpstatuscode.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/7205755535137510084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/7205755535137510084'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2020/01/httpstatuscode.html' title='HttpStatusCode 체크'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-8705660792100675830</id><published>2019-12-05T17:24:00.002+09:00</published><updated>2019-12-10T17:21:30.922+09:00</updated><title type='text'>Selenium implicitly-wait and explicitly-wait</title><content type='html'>implicitly-wait : 브라우져 전체 요소가 로드될 때 까지 기다린다.&lt;br /&gt;
explicitly-wait : 특정 요소가 로드될 때 까지 기다린다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;implicitly wait&lt;/b&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;java.util.concurrent.TimeUnit&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.*&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.firefox.FirefoxDriver&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.testng.annotations.AfterMethod&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.testng.annotations.BeforeMethod&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.testng.annotations.Test&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #BB0066; font-weight: bold&quot;&gt;WaitTest&lt;/span&gt; &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;

 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;private&lt;/span&gt; WebDriver driver&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;private&lt;/span&gt; String baseUrl&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;private&lt;/span&gt; WebElement element&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;

 &lt;span style=&quot;color: #555555; font-weight: bold&quot;&gt;@BeforeMethod&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;setUp&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;throws&lt;/span&gt; Exception &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
  driver &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;new&lt;/span&gt; FirefoxDriver&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
  baseUrl &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;http://www.google.com&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;timeouts&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;implicitlyWait&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;,&lt;/span&gt; TimeUnit&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;SECONDS&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
 &lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;

 &lt;span style=&quot;color: #555555; font-weight: bold&quot;&gt;@Test&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;testUntitled&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;throws&lt;/span&gt; Exception &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;baseUrl&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  element &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;lst-ib&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;));&lt;/span&gt;
  element&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;Selenium WebDriver Interview questions&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  element&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;Keys&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;RETURN&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  List&lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;&lt;/span&gt;WebElement&lt;span style=&quot;color: #333333&quot;&gt;&amp;gt;&lt;/span&gt; list &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElements&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;className&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;_Rm&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;));&lt;/span&gt;
  System&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;list&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;());&lt;/span&gt;
 &lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;

 &lt;span style=&quot;color: #555555; font-weight: bold&quot;&gt;@AfterMethod&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;tearDown&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;throws&lt;/span&gt; Exception &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;quit&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
 &lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Explicitly wate&lt;/b&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;java.util.concurrent.TimeUnit&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.By&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.Keys&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.WebDriver&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.WebElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.firefox.FirefoxDriver&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.support.ui.ExpectedConditions&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.openqa.selenium.support.ui.WebDriverWait&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.testng.annotations.AfterMethod&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.testng.annotations.BeforeMethod&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;org.testng.annotations.Test&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #BB0066; font-weight: bold&quot;&gt;ExpectedConditionExample&lt;/span&gt; &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
 &lt;span style=&quot;color: #888888&quot;&gt;// created reference variable for WebDriver&lt;/span&gt;
 WebDriver driver&lt;span style=&quot;color: #333333&quot;&gt;;&lt;/span&gt;

 &lt;span style=&quot;color: #555555; font-weight: bold&quot;&gt;@BeforeMethod&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;throws&lt;/span&gt; InterruptedException &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// initializing driver variable using FirefoxDriver&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;new&lt;/span&gt; FirefoxDriver&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// launching gmail.com on the browser&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;https://gmail.com&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// maximized the browser window&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;maximize&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;timeouts&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;implicitlyWait&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;,&lt;/span&gt; TimeUnit&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;SECONDS&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
 &lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;

 &lt;span style=&quot;color: #555555; font-weight: bold&quot;&gt;@Test&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;throws&lt;/span&gt; InterruptedException &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// saving the GUI element reference into a &amp;quot;element&amp;quot; variable of WebElement type&lt;/span&gt;
  WebElement element &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// entering username&lt;/span&gt;
  element&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;dummy@gmail.com&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  element&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;Keys&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;RETURN&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// entering password&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;Passwd&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// clicking signin button&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;signIn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// explicit wait - to wait for the compose button to be click-able&lt;/span&gt;
  WebDriverWait wait &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;new&lt;/span&gt; WebDriverWait&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;driver&lt;span style=&quot;color: #333333&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
  wait&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;until&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;ExpectedConditions&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;visibilityOfElementLocated&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;//div[contains(text(),&amp;#39;COMPOSE&amp;#39;)]&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;)));&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// click on the compose button as soon as the &amp;quot;compose&amp;quot; button is visible&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;//div[contains(text(),&amp;#39;COMPOSE&amp;#39;)]&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
 &lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;

 &lt;span style=&quot;color: #555555; font-weight: bold&quot;&gt;@AfterMethod&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;teardown&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #888888&quot;&gt;// closes all the browser windows opened by web driver&lt;/span&gt;
  driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;quit&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;();&lt;/span&gt;
 &lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Fluent wait&lt;/b&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;1
2
3
4
5
6
7
8
9&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;Wait wait &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;new&lt;/span&gt; FluentWait&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;WebDriver reference&lt;span style=&quot;color: #333333&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;withTimeout&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;timeout&lt;span style=&quot;color: #333333&quot;&gt;,&lt;/span&gt; SECONDS&lt;span style=&quot;color: #333333&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;pollingEvery&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;timeout&lt;span style=&quot;color: #333333&quot;&gt;,&lt;/span&gt; SECONDS&lt;span style=&quot;color: #333333&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;ignoring&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;Exception&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;

WebElement foo &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; wait&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;until&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;new&lt;/span&gt; Function&lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;&lt;/span&gt;WebDriver&lt;span style=&quot;color: #333333&quot;&gt;,&lt;/span&gt; WebElement&lt;span style=&quot;color: #333333&quot;&gt;&amp;gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;public&lt;/span&gt; WebElement &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;applyy&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;WebDriver driver&lt;span style=&quot;color: #333333&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333&quot;&gt;{&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;return&lt;/span&gt; driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: #333333&quot;&gt;}});&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/8705660792100675830/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2019/12/selenium-implicitly-wait-and-explicitly.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8705660792100675830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8705660792100675830'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2019/12/selenium-implicitly-wait-and-explicitly.html' title='Selenium implicitly-wait and explicitly-wait'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-5979665001929645807</id><published>2019-12-02T16:16:00.003+09:00</published><updated>2019-12-02T16:56:48.572+09:00</updated><title type='text'>Jenkins 관련 내용</title><content type='html'>Windows Jenkins settings.xml 파일 위치&lt;br /&gt;
=&amp;gt; C:\Windows\System32\config\systemprofile\.m2&lt;br /&gt;
&lt;br /&gt;
외부 리포트 파일의 css 적용되지 않을 경우&lt;br /&gt;
=&amp;gt; jenkins.xml에 &quot;-Dhudson.model.DirectoryBrowserSupport.CSP=&quot; 추가하기</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/5979665001929645807/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2019/12/windows-jenkins-settingsxml.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/5979665001929645807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/5979665001929645807'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2019/12/windows-jenkins-settingsxml.html' title='Jenkins 관련 내용'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-2570497296153195522</id><published>2019-11-28T17:55:00.003+09:00</published><updated>2020-11-06T16:52:12.105+09:00</updated><title type='text'>REST API의 개념</title><content type='html'>&lt;h3 id=&quot;id-01.RESTAPI의개념-REST의정의&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 0px; padding: 0px;&quot;&gt;
REST의 정의&lt;/h3&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&quot;&lt;strong&gt;REpresentational State Transfer&lt;/strong&gt;&quot;로서&amp;nbsp;&lt;u&gt;자원(resource)을 이름(표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것&lt;/u&gt;을 의미한다.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
자원(resource)의 표현(representation)은&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
자원(resource) : 해당 소프트웨어가 관리하는 모든 것(문서, 그림, 데이터 등등)&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
표현(representation) : 자원을 표현하기 위한 이름(회원 정보가 자원이라면 &#39;member&#39;를 자원의 표현으로 정하는 것)&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
상태(정보) 전달은 데이터가 요청되는 시점에 자원의 상태(정보)를 전달한다.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
Json 혹은 XML로 데이터를 주고 받는다.&lt;/div&gt;
&lt;h3 id=&quot;id-01.RESTAPI의개념-RESTAPI는??&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;&quot;&gt;
REST API는??&lt;/h3&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
API(Application Programming Interface) : 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램 간 상호작용을 촉진하며, 서로 정보를 교환 가능하도록 하는 것을 말한다.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
그래서 REST API는 REST 기반으로 서비스 API를 구현한 것이다.&lt;/div&gt;
&lt;h3 id=&quot;id-01.RESTAPI의개념-RESTAPI설계규칙&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;&quot;&gt;
REST API 설계 규칙&lt;/h3&gt;
&lt;ol style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px;&quot;&gt;
&lt;li&gt;슬래시 구분자( / ) 는 계층 관계를 나타내는데 사용한다.&lt;br /&gt;예: http://sample.com/home/login&lt;/li&gt;
&lt;li&gt;URI 마지막 문자로 슬래시( / )를 포함하지 않는다.&lt;br /&gt;예: httpL//sample.com/home/login/ ( X )&lt;/li&gt;
&lt;li&gt;하이픈( - ) 은 URI 가독성을 높이는데 사용한다.&lt;/li&gt;
&lt;li&gt;밑줄( _ ) 은 URI에 사용하지 않는다.&lt;/li&gt;
&lt;li&gt;URI 경로에는 소문자&lt;/li&gt;
&lt;li&gt;파일확장자는 URI에 포함하지 않는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;id-01.RESTAPI의개념-그러면RESTfulAPI는뭐지???&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;&quot;&gt;
그러면 RESTful API는 뭐지???&lt;/h3&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
REST가 위에서 설명한 것과 같다면 RESTful은 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&#39;REST API&#39;를 제공하는 웹서비스를 &#39;RESTful&#39;하다고 할 수 있다. 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭한다.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 id=&quot;id-01.RESTAPI의개념-HTTPMethod&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;&quot;&gt;
HTTP Method&lt;/h3&gt;
&lt;div class=&quot;table-wrap&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px; overflow-x: auto; padding: 0px;&quot;&gt;
&lt;table class=&quot;confluenceTable tablesorter tablesorter-default stickyTableHeaders&quot; role=&quot;grid&quot; style=&quot;border-collapse: collapse; margin: 0px; overflow-x: auto; padding: 0px;&quot;&gt;&lt;colgroup&gt;&lt;col&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;thead class=&quot;tableFloatingHeaderOriginal&quot; style=&quot;left: 387px; margin-top: 0px; position: static; top: 92px; width: 773px; z-index: 3;&quot;&gt;
&lt;tr class=&quot;tablesorter-headerRow&quot; role=&quot;row&quot;&gt;&lt;th aria-disabled=&quot;false&quot; aria-label=&quot;HTTP Method: No sort applied, activate to apply an ascending sort&quot; aria-sort=&quot;none&quot; class=&quot;confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted&quot; data-column=&quot;0&quot; role=&quot;columnheader&quot; scope=&quot;col&quot; style=&quot;background: 100% 50% no-repeat rgb(240, 240, 240); border: 1px solid rgb(221, 221, 221); color: #333333; cursor: pointer; max-width: none; min-width: 8px; padding: 7px 15px 7px 10px; text-align: left; user-select: none; vertical-align: top;&quot; tabindex=&quot;0&quot; unselectable=&quot;on&quot;&gt;&lt;div class=&quot;tablesorter-header-inner&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
HTTP Method&lt;/div&gt;
&lt;/th&gt;&lt;th aria-disabled=&quot;false&quot; aria-label=&quot;전송 형태: No sort applied, activate to apply an ascending sort&quot; aria-sort=&quot;none&quot; class=&quot;confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted&quot; data-column=&quot;1&quot; role=&quot;columnheader&quot; scope=&quot;col&quot; style=&quot;background: 100% 50% no-repeat rgb(240, 240, 240); border: 1px solid rgb(221, 221, 221); color: #333333; cursor: pointer; max-width: none; min-width: 8px; padding: 7px 15px 7px 10px; text-align: left; user-select: none; vertical-align: top;&quot; tabindex=&quot;0&quot; unselectable=&quot;on&quot;&gt;&lt;div class=&quot;tablesorter-header-inner&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
전송 형태&lt;/div&gt;
&lt;/th&gt;&lt;th aria-disabled=&quot;false&quot; aria-label=&quot;설명: No sort applied, activate to apply an ascending sort&quot; aria-sort=&quot;none&quot; class=&quot;confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted&quot; data-column=&quot;2&quot; role=&quot;columnheader&quot; scope=&quot;col&quot; style=&quot;background: 100% 50% no-repeat rgb(240, 240, 240); border: 1px solid rgb(221, 221, 221); color: #333333; cursor: pointer; max-width: none; min-width: 8px; padding: 7px 15px 7px 10px; text-align: left; user-select: none; vertical-align: top;&quot; tabindex=&quot;0&quot; unselectable=&quot;on&quot;&gt;&lt;div class=&quot;tablesorter-header-inner&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
설명&lt;/div&gt;
&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody aria-live=&quot;polite&quot; aria-relevant=&quot;all&quot;&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;GET&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
GET [request-uri]?query_string HTTP/1.1&lt;br /&gt;
Host:[Hostname] 혹은 [IP]&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;요청받은 URI의 정보를 검색하여 응답&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;POST&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
POST [request-uri] HTTP/1.1&lt;br /&gt;
Host:[Hostname] 혹은 [IP]&lt;br /&gt;
Content-Lenght:[Length in Bytes]&lt;br /&gt;
Content-Type:[Content Type]&lt;br /&gt;
[데이터]&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;요청된 자원을 생성한다.&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;PUT&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
PUT [request-uri] HTTP/1.1&lt;br /&gt;
Host:[Hostname] 혹은 [IP]&lt;br /&gt;
Content-Lenght:[Length in Bytes]&lt;br /&gt;
Content-Type:[Content Type]&lt;br /&gt;
[데이터]&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;요청된 자원을 수정(UPDATE)한다.&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;DELETE&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
DELETE [request-uri] HTTP/1.1&lt;br /&gt;
Host:[Hostname] 혹은 [IP]&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;요청된 자원을 삭제할 것을 요청&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;PATCH&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
PATCH [request-uri] HTTP/1.1&lt;br /&gt;
Host:[Hostname] 혹은 [IP]&lt;br /&gt;
Content-Lenght:[Length in Bytes]&lt;br /&gt;
Content-Type:[Content Type]&lt;br /&gt;
[데이터]&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
PUT과 유사하게 요청된 자원을 수정(UPDATE)할 때 사용.&lt;br /&gt;
PUT의 경우 자원 전체를 갱신하는 의미지만,&lt;br /&gt;
PATCH는 해당 자원의 일부를 교체하는 의미로 사용&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;h3 id=&quot;id-01.RESTAPI의개념-Content-Type&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;&quot;&gt;
Content-Type&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
해당 개체에 포함되는 미디어 타입 정보를 말하며 응답 내에 있는 Content-Type 헤더는 클라이언트에게 반환된 컨텐츠의 컨텐츠 유형이 실제로 무엇인지를 알려준다.&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
컨텐츠의 타입(MIME 미디어 타입)과 문자 인코딩 방식(EUC-KR, UTF-8등)을 지정한다.&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;code panel pdl conf-macro output-block&quot; data-hasbody=&quot;true&quot; data-macro-name=&quot;code&quot; style=&quot;background-color: white; border-radius: 3px; border: 1px solid rgb(204, 204, 204); color: #333333; margin: 10px 0px; overflow: auto; padding: 0px;&quot;&gt;
&lt;div class=&quot;codeHeader panelHeader pdl&quot; style=&quot;background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;&quot;&gt;
&lt;b&gt;문법&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;codeContent panelContent pdl&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;div class=&quot;syntaxhighlighter sh-confluence nogutter java&quot; id=&quot;highlighter_252585&quot; style=&quot;font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1454px;&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 14px; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px; position: static; right: auto; top: auto; vertical-align: baseline; width: 1454px;&quot;&gt;&lt;tbody style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px; position: static; right: auto; top: auto; vertical-align: baseline; width: auto;&quot;&gt;
&lt;tr style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px; position: static; right: auto; top: auto; vertical-align: baseline; width: auto;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; right: auto; top: auto; vertical-align: baseline; width: 1439px;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; height: auto; left: auto; line-height: 20px; margin: 15px 0px 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; right: auto; top: auto; vertical-align: baseline; white-space: pre-wrap; width: auto;&quot; title=&quot;Hint: double-click to select code&quot;&gt;
&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; right: auto; top: auto; vertical-align: baseline; white-space: nowrap; width: auto;&quot;&gt;
&lt;code class=&quot;java plain&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px; position: static; right: auto; top: auto; vertical-align: baseline; width: auto;&quot;&gt;Content-Type: text/html; charset=utf-&lt;/code&gt;&lt;code class=&quot;java value&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px; position: static; right: auto; top: auto; vertical-align: baseline; width: auto;&quot;&gt;8&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; right: auto; top: auto; vertical-align: baseline; white-space: nowrap; width: auto;&quot;&gt;
&lt;code class=&quot;java plain&quot; style=&quot;background: 0px 50%; border-radius: 0px; border: 0px; bottom: auto; box-sizing: content-box; float: none; font-family: Consolas, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace; height: auto; left: auto; line-height: 20px; margin: 0px; min-height: inherit; outline: 0px; overflow: visible; padding: 0px; position: static; right: auto; top: auto; vertical-align: baseline; width: auto;&quot;&gt;Content-Type: multipart/form-data; boundary=somthing&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&quot;id-01.RESTAPI의개념-HTTPcode&quot; style=&quot;color: #333333; font-size: 16px; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;&quot;&gt;
HTTP code&lt;/h3&gt;
&lt;h3 id=&quot;id-01.RESTAPI의개념-HTTPcode&quot; style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 30px 0px 0px; padding: 0px;&quot;&gt;
&lt;div class=&quot;table-wrap&quot; style=&quot;margin: 10px 0px 0px; overflow-x: auto; padding: 0px;&quot;&gt;
&lt;table class=&quot;confluenceTable tablesorter tablesorter-default stickyTableHeaders&quot; role=&quot;grid&quot; style=&quot;border-collapse: collapse; margin: 0px; overflow-x: auto; padding: 0px;&quot;&gt;&lt;colgroup&gt;&lt;col&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;thead class=&quot;tableFloatingHeaderOriginal&quot; style=&quot;left: 387px; margin-top: 0px; position: static; top: 92px; width: 566px; z-index: 3;&quot;&gt;
&lt;tr class=&quot;tablesorter-headerRow&quot; role=&quot;row&quot;&gt;&lt;th aria-disabled=&quot;false&quot; aria-label=&quot;응답 대역: No sort applied, activate to apply an ascending sort&quot; aria-sort=&quot;none&quot; class=&quot;confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted&quot; data-column=&quot;0&quot; role=&quot;columnheader&quot; scope=&quot;col&quot; style=&quot;background: 100% 50% no-repeat rgb(240, 240, 240); border: 1px solid rgb(221, 221, 221); color: #333333; cursor: pointer; max-width: none; min-width: 8px; padding: 7px 15px 7px 10px; text-align: left; user-select: none; vertical-align: top;&quot; tabindex=&quot;0&quot; unselectable=&quot;on&quot;&gt;&lt;div class=&quot;tablesorter-header-inner&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
응답 대역&lt;/div&gt;
&lt;/th&gt;&lt;th aria-disabled=&quot;false&quot; aria-label=&quot;응답 코드: No sort applied, activate to apply an ascending sort&quot; aria-sort=&quot;none&quot; class=&quot;confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted&quot; data-column=&quot;1&quot; role=&quot;columnheader&quot; scope=&quot;col&quot; style=&quot;background: 100% 50% no-repeat rgb(240, 240, 240); border: 1px solid rgb(221, 221, 221); color: #333333; cursor: pointer; max-width: none; min-width: 8px; padding: 7px 15px 7px 10px; text-align: left; user-select: none; vertical-align: top;&quot; tabindex=&quot;0&quot; unselectable=&quot;on&quot;&gt;&lt;div class=&quot;tablesorter-header-inner&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
응답 코드&lt;/div&gt;
&lt;/th&gt;&lt;th aria-disabled=&quot;false&quot; aria-label=&quot;설명: No sort applied, activate to apply an ascending sort&quot; aria-sort=&quot;none&quot; class=&quot;confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted&quot; data-column=&quot;2&quot; role=&quot;columnheader&quot; scope=&quot;col&quot; style=&quot;background: 100% 50% no-repeat rgb(240, 240, 240); border: 1px solid rgb(221, 221, 221); color: #333333; cursor: pointer; max-width: none; min-width: 8px; padding: 7px 15px 7px 10px; text-align: left; user-select: none; vertical-align: top;&quot; tabindex=&quot;0&quot; unselectable=&quot;on&quot;&gt;&lt;div class=&quot;tablesorter-header-inner&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
설명&lt;/div&gt;
&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody aria-live=&quot;polite&quot; aria-relevant=&quot;all&quot;&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;성공&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;200&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;OK&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;201&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;Created&lt;br /&gt;PUT 메소드에 의해 원격지 서버에 파일 생성됨&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;203&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;서버가 클라이언트 요구 중 일부만 전송&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;204&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;No content&lt;br /&gt;요구한 데이터를 변경된 타 URL에 요청함 / Redirect된 경우&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;div style=&quot;padding: 0px;&quot;&gt;
클라이언트&lt;br /&gt;요청 에러&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;400&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;Bad Request&lt;br /&gt;사용자의 잘못된 요청을 처리할 수 없음&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;401&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;인증이 필요한 페이지를 요청한 경우&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;403&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;접근 금지&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;404&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;Not found&lt;br /&gt;요청한 페이지 없음&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;405&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;허용되지 않는 http method 사용함&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;408&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;요청 시간 초과&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;410&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;영구적으로 사용 금지&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;412&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;전체 조건 실패&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;414&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;요청URL길이가 긴 경우&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;서버에러&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;500&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;내부 서버 오류&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;501&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;웹 서버가 처리할 수 없음&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;503&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;서비스 제공 불가&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;504&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;Gateway timeout&lt;br /&gt;게이트웨이 시간 초과&lt;/td&gt;&lt;/tr&gt;
&lt;tr role=&quot;row&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;505&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;해당 http 버전 지원되지 않음&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;br style=&quot;font-family: Arial, sans-serif; font-size: 14px; font-weight: 400;&quot; /&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
URL과 URI의 의미&lt;/div&gt;
&lt;ol style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px;&quot;&gt;
&lt;li&gt;URL(Uniform Resource Locator) : 통합 자원 지시자&lt;ol style=&quot;list-style-type: lower-alpha; margin: 0px;&quot;&gt;
&lt;li&gt;예를 들어&amp;nbsp;&lt;a class=&quot;external-link&quot; href=&quot;http://test.com/work/test.pdf&quot; rel=&quot;nofollow&quot; style=&quot;color: #3572b0; text-decoration-line: none;&quot;&gt;http://test.com/work/test.pdf&lt;/a&gt;&amp;nbsp;는 test.com 서버에서 work 폴더 안의 test.pdf를 요청하는 URL을 의미한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;URI(Unitform Resource Identifier) : 통합 자원 식별자&lt;ol style=&quot;list-style-type: lower-alpha; margin: 0px;&quot;&gt;
&lt;li&gt;프로토콜 + : + // + 호스트이름 + 주소 →&amp;nbsp;&lt;a class=&quot;external-link&quot; href=&quot;http://test.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #3572b0; text-decoration-line: none;&quot;&gt;http://test.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;자원에 접근하기 위해 사용되는 절차&lt;/li&gt;
&lt;li&gt;어떤 자원을 가지고 있는 특정한 컴퓨터&lt;/li&gt;
&lt;li&gt;컴퓨터 상의 유니크한 자원의 이름(파일명)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;URN(Uniform Resource Name) : 리소스의 위치와 상관없이 리소스의 이름값을 이용하여 접근하는 방식&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;span face=&quot;&amp;quot;arial&amp;quot; , sans-serif&quot; style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;expand-container conf-macro output-block&quot; data-hasbody=&quot;true&quot; data-macro-name=&quot;expand&quot; id=&quot;expander-605519643&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;div class=&quot;expand-content&quot; id=&quot;expander-content-605519643&quot; style=&quot;margin: 0px 0px 10px 20px; opacity: 1; padding: 0px;&quot;&gt;
&lt;div class=&quot;table-wrap&quot; style=&quot;margin: 10px 0px 0px; overflow-x: auto; padding: 0px;&quot;&gt;
&lt;table class=&quot;confluenceTable&quot; style=&quot;border-collapse: collapse; margin: 0px; overflow-x: auto;&quot;&gt;&lt;colgroup&gt;&lt;col style=&quot;width: 29px;&quot;&gt;&lt;/col&gt;&lt;col style=&quot;width: 29px;&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th class=&quot;confluenceTh&quot; colspan=&quot;2&quot; style=&quot;background-color: #f0f0f0; border: 1px solid rgb(221, 221, 221); color: #333333; min-width: 8px; padding: 7px 10px; text-align: left; vertical-align: top;&quot;&gt;URI&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th class=&quot;confluenceTh&quot; style=&quot;background-color: #f0f0f0; border: 1px solid rgb(221, 221, 221); color: #333333; min-width: 8px; padding: 7px 10px; text-align: left; vertical-align: top;&quot;&gt;URN&lt;/th&gt;&lt;th class=&quot;confluenceTh&quot; style=&quot;background-color: #f0f0f0; border: 1px solid rgb(221, 221, 221); color: #333333; min-width: 8px; padding: 7px 10px; text-align: left; vertical-align: top;&quot;&gt;URL&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;test.com/test.html&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;https://test.com/test.html&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;test2.com/image.png&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; style=&quot;border: 1px solid rgb(221, 221, 221); min-width: 8px; padding: 7px 10px; vertical-align: top;&quot;&gt;ftp://test2.com.file.pdf&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;b&gt;URI &amp;gt;= URL, URN&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;br style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px;&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;

</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/2570497296153195522/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2019/11/rest-api.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/2570497296153195522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/2570497296153195522'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2019/11/rest-api.html' title='REST API의 개념'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-8939747261206484237</id><published>2019-10-02T16:39:00.001+09:00</published><updated>2019-10-02T16:39:52.855+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Jenkins"/><title type='text'>jenkins pre build, post build 시 execute shell 추가할 때 해당 부분이 문제가 있어 빌드 실패가 된다면?</title><content type='html'>&lt;br /&gt;
해당 execute shell 명령에서 문제가 생길 경우 build fail이 발생한다.&lt;br /&gt;
이를 해결하기 위해서는 아래와 같은 명령어를 추가한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;명령 실패 시 추가 실행을 중지하려면&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;command || exit 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;명령이 실패할 때 실행을 계속하려면&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;command || true&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/8939747261206484237/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2019/10/jenkins-pre-build-post-build-execute.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8939747261206484237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/8939747261206484237'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2019/10/jenkins-pre-build-post-build-execute.html' title='jenkins pre build, post build 시 execute shell 추가할 때 해당 부분이 문제가 있어 빌드 실패가 된다면?'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-5423373424532611443</id><published>2019-07-18T14:55:00.002+09:00</published><updated>2020-01-22T14:47:52.322+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API Test"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jenkins"/><title type='text'>API Test 진행 시 profile 선택 관련 정리 - Maven profile, yaml, lombok </title><content type='html'>&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;1. jenkins에서 profile 선택하여 빌드 및 테스트 수행&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i style=&quot;background-color: yellow;&quot;&gt;mvn clean test -P ${evn}&lt;/i&gt;&lt;br /&gt;
env : env는 jenkins의 string parameter나 choice parameter를 이용한다.&lt;br /&gt;
ex) evn = qa or release or stage&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;2. intelliJ에서는&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDCnYqrKCl8t42k0zFIJ139FIoPeRWI6dvTngM1yonhtjtIjF08nFzNdzjhHd_jqjlHs-nxtPmLtweD0pNfjdiRVMtcppgHmotNHo7aKFAuiNyh7yT6VDkhIoEpGVuSo0rrXSsuT5wRtxx/s1600/intelliJ_profiles_%25EC%2584%25A0%25ED%2583%259D.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;202&quot; data-original-width=&quot;635&quot; height=&quot;127&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDCnYqrKCl8t42k0zFIJ139FIoPeRWI6dvTngM1yonhtjtIjF08nFzNdzjhHd_jqjlHs-nxtPmLtweD0pNfjdiRVMtcppgHmotNHo7aKFAuiNyh7yT6VDkhIoEpGVuSo0rrXSsuT5wRtxx/s400/intelliJ_profiles_%25EC%2584%25A0%25ED%2583%259D.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;3. 프로파일별 테스트 데이터 관리는 yaml 파일로 관리한다.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;b&gt;&amp;nbsp;yaml file 위치&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0D3uxMi_HU8CJ60onXc4jWCSjDF5hwpm-NO0tNr3VrZTDptAGTxhYf1lCbF4PQEBuAKLQVYeo5C1DeO23Enyt4fUxcXFJsVg2hHokebhZY_yWqKU6Jib0gKZWmd2Jjik5xt8KwPZpmYfl/s1600/yaml+file+%25EC%259C%2584%25EC%25B9%2598.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;88&quot; data-original-width=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0D3uxMi_HU8CJ60onXc4jWCSjDF5hwpm-NO0tNr3VrZTDptAGTxhYf1lCbF4PQEBuAKLQVYeo5C1DeO23Enyt4fUxcXFJsVg2hHokebhZY_yWqKU6Jib0gKZWmd2Jjik5xt8KwPZpmYfl/s1600/yaml+file+%25EC%259C%2584%25EC%25B9%2598.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;testdata.yaml
&lt;/b&gt;&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;userId : test
password : qwe123
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;TestData.java
&lt;/b&gt;&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;TestData.java는 &lt;b&gt;lombok library&lt;/b&gt;를 이용하여 코드를 간결화 한다.&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;lombok.Getter&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;lombok.Setter&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;org.apache.commons.lang3.builder.ToStringBuilder&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;org.apache.commons.lang3.builder.ToStringStyle&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;org.yaml.snakeyaml.Yaml&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.io.InputStream&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Getter&lt;/span&gt; 
&lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Setter&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;TestData&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; String userId&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; String password&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

 &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
 &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; String &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; ToStringBuilder&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;reflectionToString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; ToStringStyle&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;DEFAULT_STYLE&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
 &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

 &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; TestData &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getTestData&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
  Yaml yaml &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; Yaml&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
  InputStream inputStream &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; TestData&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getResourceAsStream&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;/testdata.yaml&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; yaml&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;loadAs&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;inputStream&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; TestData&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
 &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;사용법
&lt;/b&gt;&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;TestData testData &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; TestData&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
testData &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; testData&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getTestData&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
RestAssured&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;baseURI&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; testData&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getTargetURL&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/5423373424532611443/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2019/07/api-test-profile_18.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/5423373424532611443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/5423373424532611443'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2019/07/api-test-profile_18.html' title='API Test 진행 시 profile 선택 관련 정리 - Maven profile, yaml, lombok '/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDCnYqrKCl8t42k0zFIJ139FIoPeRWI6dvTngM1yonhtjtIjF08nFzNdzjhHd_jqjlHs-nxtPmLtweD0pNfjdiRVMtcppgHmotNHo7aKFAuiNyh7yT6VDkhIoEpGVuSo0rrXSsuT5wRtxx/s72-c/intelliJ_profiles_%25EC%2584%25A0%25ED%2583%259D.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3545209391276110829.post-3967959513126873564</id><published>2019-07-08T19:00:00.005+09:00</published><updated>2020-11-17T09:26:18.694+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Selenium"/><category scheme="http://www.blogger.com/atom/ns#" term="TestNG"/><title type='text'>TestNG에 ExtentReport 적용하기</title><content type='html'>&lt;b&gt;1. pom.xml dependency 추가&lt;/b&gt;&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;    
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.aventstack&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;    
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;extentreports&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;    
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.1.5&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;2. ExtentManager 추가&lt;/b&gt;&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;ExtentManager&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; ExtentReports extent&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; ExtentReports &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;extent &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
            createInstance&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; extent&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #888888;&quot;&gt;//Create an extent report instance&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; ExtentReports &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;createInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        String reportFile &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; File&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;target/result.html&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getAbsolutePath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        ExtentHtmlReporter htmlReporter &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ExtentHtmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;reportFile&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setAppendExisting&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setTestViewChartLocation&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ChartLocation&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;BOTTOM&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setChartVisibilityOnOpen&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setTheme&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Theme&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;STANDARD&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setDocumentTitle&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;reportFile&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setEncoding&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setReportName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;reportFile&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        extent &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ExtentReports&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        extent&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;attachReporter&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;htmlReporter&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        extent&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setSystemInfo&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Environment&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;QA&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        TestData testData &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; TestData&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        extent&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setSystemInfo&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Host Name&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; testData&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getTestData&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getUri&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; extent&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;3. TestListener 추가&lt;/b&gt;&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;TestListner&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;implements&lt;/span&gt; ITestListener &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #888888;&quot;&gt;//Extent Report Declarations&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;final&lt;/span&gt; Logger logger &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; LoggerFactory&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getLogger&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;TestListner&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; ExtentReports extent &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; ExtentManager&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;createInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; ThreadLocal&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;ExtentTest&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; test &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ThreadLocal&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;synchronized&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;onStart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ITestContext context&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Test Suite started!&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;synchronized&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;onFinish&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ITestContext context&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Test Suite is finished!&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        extent&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;flush&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;synchronized&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;onTestStart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ITestResult result&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethod&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethodName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot; started!&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        ExtentTest extentTest &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; extent&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;createTest&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethod&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethodName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(),&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethod&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getDescription&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
        extentTest&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;assignCategory&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getTestClass&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRealClass&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getSimpleName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
        test&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;extentTest&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;synchronized&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;onTestSuccess&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ITestResult result&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethod&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethodName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot; passed!&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        test&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;pass&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Test passed&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;synchronized&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;onTestFailure&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ITestResult result&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethod&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethodName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot; failed!&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        test&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;fail&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getThrowable&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;synchronized&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;onTestSkipped&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ITestResult result&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethod&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethodName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot; skipped!&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        test&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;skip&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getThrowable&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;onTestFailedButWithinSuccessPercentage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ITestResult result&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;onTestFailedButWithinSuccessPercentage for &quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; result&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethod&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMethodName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;4. testng.xml에 추가
&lt;/b&gt;&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;suite&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;TestNG Suite Name&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;listeners&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;listener&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;class-name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;com.xxxx.utils.listners.TestListner&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;    
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/listeners&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;test&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;full_test&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
         &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;packages&amp;gt;&lt;/span&gt;
             &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;package&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;com.xxx.test.*&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
         &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/packages&amp;gt;&lt;/span&gt;
     &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/suite&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;left: 2px; position: absolute; top: 1472.13px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://twodulls.blogspot.com/feeds/3967959513126873564/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://twodulls.blogspot.com/2019/07/testng-extentreport.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3967959513126873564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3545209391276110829/posts/default/3967959513126873564'/><link rel='alternate' type='text/html' href='http://twodulls.blogspot.com/2019/07/testng-extentreport.html' title='TestNG에 ExtentReport 적용하기'/><author><name>투덜</name><uri>http://www.blogger.com/profile/00283577885944851494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>