mac을 쓰다보면, .DS_Store파일이 생기게 된다.
Mac의 메타정보를 저장하는 파일이라고 하는데 없어도 상관없고,
일일이 지우는 것도 귀찮으니, 아예 생성하지 않도록 설정할 수 있다.
터미널에서 아래와 같이 입력한 뒤, 재시작한다.
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
mac을 쓰다보면, .DS_Store파일이 생기게 된다.
Mac의 메타정보를 저장하는 파일이라고 하는데 없어도 상관없고,
일일이 지우는 것도 귀찮으니, 아예 생성하지 않도록 설정할 수 있다.
터미널에서 아래와 같이 입력한 뒤, 재시작한다.
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
1 2 3 4 | static void waitForLoad(WebDriver driver) { new WebDriverWait(driver, 30).until((ExpectedCondition<Boolean>) wd -> ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete")); } | cs |
JUnit에서 Fail된 Case를 재수행하기 (0) | 2018.02.21 |
---|---|
테스트 진행전 windows에서 chrome webdriver kill 하기 (0) | 2018.02.05 |
selenide에서 mobile emulation 방법 (0) | 2018.01.30 |
junit 4.x 에서 csv파일로 data driven test 구현하기 (0) | 2018.01.30 |
Rest-Assured를 활용한 API 테스트 자동화 (0) | 2018.01.28 |
명령어 |
설명 |
a\ |
현재 행에 하나 이상의 새로운 행 추가 |
c\ |
현재 행에 새로운 내용으로 교체 |
d |
행을 삭제 |
p |
행을 출력 |
n |
다음 입력행을 첫번째 명령어가 아닌 다음 명령어에서 처리 |
q |
sed 종료 |
r |
파일로부터 행을 읽어온다 |
s |
문자열을 치환 |
성능 테스트시 서버 모니터링 방법 정리 (1) | 2018.01.25 |
---|
Junit을 사용하여 테스트를 진행하고, 결과 중 fail된 case만 따로 다시 수행시켜보는 방법 보다는
fail된 case를 바로 더 돌리도록 해서 그 이후에 결과를 확인하는 것이 더 좋을 때가 있다.
이럴 때는 TestRule을 이용해서 JUnit Retry를 구현하는 방법을 사용한다.
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 | import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; public class JUnitRetry implements TestRule { private int retryCount; public JUnitRetry(int retryCount) { this.retryCount = retryCount; } @Override public Statement apply(Statement base, Description description) { return statement(base, description); } private Statement statement(final Statement base, final Description description) { return new Statement() { @Override public void evaluate() throws Throwable { Throwable caughtThrowable = null; // implement retry logic here for (int i = 0; i < retryCount; i++) { try { base.evaluate(); return; } catch (Throwable t) { caughtThrowable = t; System.err.println(description.getDisplayName() + ": run " + (i+1) + " failed"); } } System.err.println(description.getDisplayName() + ": giving up after " + retryCount + " failures"); throw caughtThrowable; } }; } } | cs |
위와 같이 JUnitRetry 클래스를 만들어 놓고, 테스트코드에서는 Rule을 사용하여 Retry 를 몇번 할지 횟수만 지정하고 사용하면 된다.
1 2 | @Rule public JUnitRetry retry = new JUnitRetry(2); | cs |
selenium javascript 로딩 완료될때 까지 wait 하기 (0) | 2018.07.19 |
---|---|
테스트 진행전 windows에서 chrome webdriver kill 하기 (0) | 2018.02.05 |
selenide에서 mobile emulation 방법 (0) | 2018.01.30 |
junit 4.x 에서 csv파일로 data driven test 구현하기 (0) | 2018.01.30 |
Rest-Assured를 활용한 API 테스트 자동화 (0) | 2018.01.28 |
판교에서 출퇴생활 벗어난지 1년이 넘었는데..
회의 때문에 다시 판교로 가야 된다 ㅠ.ㅠ
종로 방향으로 빠르게 퇴근하기 위해서는 9007번 버스 / 혹은 지하철을 이용해야 하는데,
9003번 버스도 있다.
매번 까먹어서 여기에다가 적어놓고 생각날 때마다 봐야겠다.
SK플래닛 건물 앞에서 승차!
Windows에서 Selenium으로 UI자동화 진행하다보면, chromedriver.exe가 남아있어서 브라우저가 기동이 안될 경우가 있다.
driver.quit()을 꼼꼼히 호출해도 남아있는 경우가 있는데,
jenkins 에서 pre-build 단계나, test진행 전 단계에 taskkill을 이용하는 것이 좋다.
taskkill /f /fi "pid gt 0" /im chromedriver.exe
Runtime.getRuntime().exec("taskkill /f /fi /im chromedriver.exe");
selenium javascript 로딩 완료될때 까지 wait 하기 (0) | 2018.07.19 |
---|---|
JUnit에서 Fail된 Case를 재수행하기 (0) | 2018.02.21 |
selenide에서 mobile emulation 방법 (0) | 2018.01.30 |
junit 4.x 에서 csv파일로 data driven test 구현하기 (0) | 2018.01.30 |
Rest-Assured를 활용한 API 테스트 자동화 (0) | 2018.01.28 |
vi /etc/httpd/conf/mod_jk.conf
<IfModule mod_jk.c> JkWorkersFile "/etc/httpd/conf/workers.properties" JkLogFile "/etc/httpd/logs/mod_jk.log" JkLogLevel info JkAutoAlias "/home/paralles/Dev/tomcat/webapps" JkMount /*.jsp worker1 JkUnMount /*.html worker1 JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" </IfModule>
vi /etc/httpd/conf/workers.properties
worker.list = worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009
selenide는 driver.close()나 wait() 등을 알아서 진행해주기 때문에 좀 더 스마트한 UI자동화 도구이다.
selenium은 사실 webdriver를 통한 브라우저 제어 도구에 좀 더 가깝다.
selenide에서 chrome webdriver를 세팅할때,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class SelenideMWChromeTest { @Before public void setUp() { Map<String, String> mobileEmulation = new HashMap<>(); mobileEmulation.put("deviceName", "Nexus 5"); ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation); WebDriver driver = new ChromeDriver(chromeOptions); WebDriverRunner.setWebDriver(driver); Configuration.browser = WebDriverRunner.class.getName(); } @After public void tearDown() throws Exception{ close(); } @Test public void testStep() throws Exception{ ... 중략 ... | cs |
JUnit에서 Fail된 Case를 재수행하기 (0) | 2018.02.21 |
---|---|
테스트 진행전 windows에서 chrome webdriver kill 하기 (0) | 2018.02.05 |
junit 4.x 에서 csv파일로 data driven test 구현하기 (0) | 2018.01.30 |
Rest-Assured를 활용한 API 테스트 자동화 (0) | 2018.01.28 |
SoapUI를 이용한 API 테스트 방법 정리 (0) | 2018.01.28 |
junit 4.x에서 csv 파일을 읽어서 data driven testing을 구현하는 방법.
junit 5에는 @CsvFileSource 라는게 이미 있지만, junit 4.x 에는 없어서 구현을 해야 한다.
근데, 구글링 해보니, JUnitParams라는 아주 편리한 라이브러리가 있네.
여긴 Sample소스 : https://github.com/Pragmatists/JUnitParams/blob/master/src/test/java/junitparams/usage/SamplesOfUsageTest.java
구현 방법도 쉽다.
우선 maven pom.xml에 dependancy 추가하고
<dependency> <groupId>pl.pragmatists</groupId> <artifactId>JUnitParams</artifactId> <version>1.1.1</version> <scope>test</scope> </dependency> | cs |
테스트 코드에는 아래와 같이 구현하면 끝.
간단하고 편하네.
1 2 3 4 5 6 7 8 9 10 | import junitparams.* @RunWith(JUnitParamsRunner.class) public class SamplesOfUsageTest { @Test @FileParameters("classpath:test.csv") public void loadParamsFromClasspath(int age, String name) { .. 테스트 코드 작성 .. } | cs |
csv 파일 말고, 다른 방법으로 하는 링크된 샘플코드에 많이 나와 있으니, 생략한다.
테스트 진행전 windows에서 chrome webdriver kill 하기 (0) | 2018.02.05 |
---|---|
selenide에서 mobile emulation 방법 (0) | 2018.01.30 |
Rest-Assured를 활용한 API 테스트 자동화 (0) | 2018.01.28 |
SoapUI를 이용한 API 테스트 방법 정리 (0) | 2018.01.28 |
API 테스트 방법 (0) | 2018.01.27 |
junit을 활용한 테스트 자동화에 익숙하다보니, api테스트 자동화 한다고 하면 request, response 동작을 위한 util 및 json / xml parser 등을 모두 구현해서 사용했었는데,
그동안 왜 그랬나 싶을 정도로,, Rest-Assured는 잘 만들어진 api 테스트 자동화 도구이다.
환경 구성이나, 손 쉬운 사용법은 위 링크의 User Guide 문서를 참고하면 사용할 수 있다.
그래도 자동화 하면, 쉬운 반복 수행 및 결과 리포팅이 중요하니, 아래와 같이 구성하자.
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>com.aventstack</groupId> <artifactId>extentreports</artifactId> <version>3.0.1</version> </dependency> </dependencies> | cs |
1 2 3 4 5 6 7 8 | given() .header("Cookie", "Cookie-Value") .contentType("application/x-www-form-urlencoded") .body("Body Message") .when() .post("http://www.naver.com/openapi/apitest?method=abcde") .then() .statusCode(200); | cs |
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
selenide에서 mobile emulation 방법 (0) | 2018.01.30 |
---|---|
junit 4.x 에서 csv파일로 data driven test 구현하기 (0) | 2018.01.30 |
SoapUI를 이용한 API 테스트 방법 정리 (0) | 2018.01.28 |
API 테스트 방법 (0) | 2018.01.27 |
자동화에 extent report 적용하기 (0) | 2018.01.22 |
지금은 API 테스트를 진행하라고 하면 rest-assured를 사용하기 때문에 다른 도구 사용할 일이 없지만
그래도 api testing 도구라고 하면 제일 많이 사용되는 도구가 뭐냐고 하면 SoapUI라고 말할 것 같다.
이전에 SoapUI를 업무에 잠시 활용했을 때 나름 정리해두었던 내용을 여기에 다시 게시한다.
기본적인 사용법은 여기저기에 더 잘 정리되어 있으니, 생략하고.. tip 위주로..
xml response의 namespace값을 꼭 사용해야 한다.
expression부분에 하기와 같이 작성한다. 하기 예제는 response message중 첫번째로 보이는 spotCode의 value값을 가져온다.
declare namespace ns1="http://www.naver.com";
//ns1:spotCode[1]
response message가 json형식일때를 예로 들어, code값이 4만에서 5만번 사이의 숫자가 포함되는 조건을 추가하기 원한다면,
Contains/Not Contains Assertion에 use token as Regular Expression 체크박스를 체크하고, Content박스에 하기의 예와 같이 입력한다.
(?s).*"code": "[4,5]\d{4}".*
(3) Script Assertion
(1) Property 수행 예제
(2) JavaScript 실행 예제
(3) Cookie 설정 예제
jenkins에 아래와 같은 plugin이 설치되어 있어야 한다.
junit attachments plugin
junit plugin
git plugin
jenkins가 구동되는 장비에 soapUI가 설치되어 있어야 한다.
execute shell을 선택
export JAVA_HOME=/app/jdk1.7.0_80; SOAPUI_HOME=/home/SoapUI-5.2.1; export SOAPUI_HOME; export PATH=$JAVA_HOME/bin:$PATH; export WORKSPACE=$WORKSPACE/MyWorkspace; rm -rf $WORKSPACE/report/JReport/*.xml; $SOAPUI_HOME/bin/testrunner.sh -a -j -I -f$WORKSPACE/report/JReport -PEndpoint=www.naver.com $WORKSPACE/test_api_project.xml
publish junit test result report 선택
Test report XMLs : MyWorkspace/report/JReport/*.xml
Additional test report features 체크박스 체크.
junit 4.x 에서 csv파일로 data driven test 구현하기 (0) | 2018.01.30 |
---|---|
Rest-Assured를 활용한 API 테스트 자동화 (0) | 2018.01.28 |
API 테스트 방법 (0) | 2018.01.27 |
자동화에 extent report 적용하기 (0) | 2018.01.22 |
Jenkins와 Sonar 연동하기 (0) | 2012.07.19 |
Rest-Assured를 활용한 API 테스트 자동화 (0) | 2018.01.28 |
---|---|
SoapUI를 이용한 API 테스트 방법 정리 (0) | 2018.01.28 |
자동화에 extent report 적용하기 (0) | 2018.01.22 |
Jenkins와 Sonar 연동하기 (0) | 2012.07.19 |
Ant 로 Sonar 수행하기. (0) | 2011.04.12 |
성능테스트 진행시 서버 자원 상태에 대해 모니터링이 필요한데,
이에 대한 기본적인 내용을 정리해봤다.
참고 : (도서) 실무로 배우는 시스템 성능 최적화 : 시스템 동작 분석부터 성능 개선까지 (권문수)
CPU |
|
---|---|
메모리 |
|
디스크 |
|
네트워크 |
|
프로세스 관련 항목
메소드 영역
자바 프로그램을 구성하고 있는 메소드와 클래스 변수(static으로 선언된 변수)를 저장하기 위한 공간이다.
JVM은 복수개의 스레드가 메소드를 정상적으로 사용하기 위한 동기화 기법을 제공
힙 영역
프로그램 상에서 데이터를 저장하기 위해 동적으로(실행시간에)할당하여 쓸 수 있는 메모리 영역
new 연산자를 통하여 개체를 동적으로 생성시
메소드 영역과 같이 모든 프로그램에 의해 공유되는 공간 -> 동기화 기법 이용
GC(GarbageCollection)으로 관리 되는 영역
Permanent Space : Class에 대한 Meta 정보를 저장하는 공간
New Generation
Eden : new로 생성된 모든 객체
Survivor1(From) : Minor GC에 의해서 Eden, Survivor 2영역의 객체 중 활성화 된 객체만 이동하여 위치, Old Space로 이동되기 전의 객체만 위치
Survivor2(To) : Minor GC에 의해서 Eden, Survivor 1영역의 객체 중 활성화된 객체만 이동하여 위치, Old Space로 이동되기 전의 객체만 위치
Old Generation : Survivor 1, Survivor 2 영역에서 이동해온 객체만 위치, Full GC의 대상이 되는 객체가 위치
프로그램이 natie 메소드를 호출시 native 메소드의 매개변수, 지역변수 등을 저장하기 위해 사용하는 공간 native 메소드는 자바 언어가 아닌 기존의 다른 언어에서 제공되는 메소드를 의미
성능 테스트시 주로 사용하는 Shell 명령어 사용법 (0) | 2018.03.05 |
---|
appium으로 사내 서비스 자동화를 진행하다가, junit report나 surefire report 포맷이 별로라서, 좀 더 새로운 html report를 찾다가 발견한 extent report.
좀 더 이쁘장하고, 결과에 따라 필터링도 된다.
다만, junit 결과를 자동으로 report로 변환하는게 아니라서, 테스트 이후 결과에 따른 로그를 직접 넣어야 된다.
selenium이나 appium 자동화에 사용하는 사례도 구글링하면 좀 나오는거 보니, 쓸만한 것 같아 적용하기로 했고,
실제 ui 자동화랑 api 자동화 업무에 해당 리포트를 사용하고 있다.
우선, maven 설정을 추가하고,
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.1.2</version>
</dependency>
우선 report 생성할때, 설정 내용을 반영하도록 해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private static ExtentReports createReport() throws Exception { if(extent != null) return extent; String reportFile= new File("target/result.html").getAbsolutePath(); htmlReporter = new ExtentHtmlReporter(reportFile); htmlReporter.setAppendExisting(true); htmlReporter.config().setChartVisibilityOnOpen(true); htmlReporter.config().setDocumentTitle("타이틀적용"); htmlReporter.config().setEncoding("UTF-8"); htmlReporter.config().setReportName("리포트제목"); extent = new ExtentReports(); extent.setSystemInfo("OS", "Windows 7"); extent.attachReporter(htmlReporter); return extent; } | cs |
테스트 시작시
1 2 3 4 5 | @BeforeClass public static void setUp() throws Exception { enableLoggingOfRequestAndResponseIfValidationFails(); extent = createReport(); } | cs |
케이스 실행 시작 시점
1 2 3 4 | @Before public void beforeMethod() throws Exception { test = extent.createTest(methodName); } | cs |
케이스 종료 시점
1 2 3 4 | @After public void afterMethod() throws Exception { extent.flush(); } | cs |
테스트 결과에 따라 리포트 로그를 남겨야 하기에 TestWatcher를 활용.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Rule public TestWatcher testWatcher = new TestWatcher() { @Override protected void failed(Throwable e, Description description) { test.log(Status.FAIL, e.toString()); } @Override protected void succeeded(Description description) { test.log(Status.PASS, "SUCCESS"); } @Override protected void skipped(AssumptionViolatedException e, Description description) { test.log(Status.SKIP, SKIP_MSG); } } | cs |
대충 이정도 구성해놓으면, 각 테스트케이스 @Test 단위에서는 기존과 같이 자동화 코드를 작성하면 된다.
덧붙여 좀 더 추가해서 신경쓸 부분이 있다면,
더 좋거나 쉬운 리포트 라이브러리가 있으면 찾아보겠지만, extent report만으로도 현재까지는 만족.
SoapUI를 이용한 API 테스트 방법 정리 (0) | 2018.01.28 |
---|---|
API 테스트 방법 (0) | 2018.01.27 |
Jenkins와 Sonar 연동하기 (0) | 2012.07.19 |
Ant 로 Sonar 수행하기. (0) | 2011.04.12 |
Sonar 소개 (0) | 2011.02.14 |
하도 오래전에 Jenkins와 Sonar를 연동해봤었는데,
요번에 BMS 프로젝트 진행하면서 Sonar한번 설치할래니 기억이 가물가물..;;
그래서 다시 이곳에 정리하기로 했다. 우선 Jenkins와 Sonar가 설치되어 있다는 가정하에 내용을 정리하겠다.
API 테스트 방법 (0) | 2018.01.27 |
---|---|
자동화에 extent report 적용하기 (0) | 2018.01.22 |
Ant 로 Sonar 수행하기. (0) | 2011.04.12 |
Sonar 소개 (0) | 2011.02.14 |
CI(Continuous Integration) 서버 구성안 (0) | 2011.02.14 |
/** The Username being used by JIRA logon */
define('BUG_TRACK_USERNAME', 'jirauser');
/** The Password being used by JIRA logon*/
define('BUG_TRACK_PASSWORD', 'jirapassword');
/** link of the web server for JIRA*/
define('BUG_TRACK_HREF',"http://192.168.1.22:8080/");
* The values here are relative to the BUG_TRACK_HREF property *
/** path of JIRA WSDL */
define('BUG_TRACK_SOAP_HREF', "rpc/soap/jirasoapservice-v2?wsdl");
/** link of the web server for jira ticket*/
define('BUG_TRACK_SHOW_BUG_HREF', "browse/");
/** link of the web server for creating new jira ticket*/
define('BUG_TRACK_ENTER_BUG_HREF',"secure/CreateIssue.jspa");
JIRA Plugin관리 (0) | 2011.03.24 |
---|---|
Confluence Plugin설치시 com.mysql.jdbc.PacketTooBigException 발생 (0) | 2011.02.07 |
mysql 기본 명령어 정리 (0) | 2011.03.30 |
---|
자동화에 extent report 적용하기 (0) | 2018.01.22 |
---|---|
Jenkins와 Sonar 연동하기 (0) | 2012.07.19 |
Sonar 소개 (0) | 2011.02.14 |
CI(Continuous Integration) 서버 구성안 (0) | 2011.02.14 |
Continuous Integration 관련 자료 - IBM DeveloperWorks (0) | 2011.01.04 |
mysql에서 tpc-e 테스트 하기 (0) | 2011.05.03 |
---|
Plugin 설치 방법 (UPM으로 설치 되지 않는 Plugins)
reference : https://studio.plugins.atlassian.com/wiki/display/SVN/Subversion+JIRA+plugin
reference : https://studio.plugins.atlassian.com/wiki/display/JLINK/Home
JIRA와 TestLink 연동하기 (0) | 2011.08.25 |
---|---|
Confluence Plugin설치시 com.mysql.jdbc.PacketTooBigException 발생 (0) | 2011.02.07 |
자동화에 extent report 적용하기 (0) | 2018.01.22 |
---|---|
Jenkins와 Sonar 연동하기 (0) | 2012.07.19 |
Ant 로 Sonar 수행하기. (0) | 2011.04.12 |
CI(Continuous Integration) 서버 구성안 (0) | 2011.02.14 |
Continuous Integration 관련 자료 - IBM DeveloperWorks (0) | 2011.01.04 |
|
|
|
|
|
|
직관적인 UI와 다양한 plugin을 제공 | |
|
|
||
|
|
||
|
|
컴파일된 바이너리(.class) 파일을 분석하여 결함을 찾는 도구 | |
| FindBugs는 클래스 파일을 분석하는 반면 PMD는 미리 정의한 룰셋을 기반으로 자바코드의 구분을 분석한다. | ||
|
|
branch 커버리지와 line커버리지를 제공 | |
|
|
||
|
|
| |
|
|
자동화에 extent report 적용하기 (0) | 2018.01.22 |
---|---|
Jenkins와 Sonar 연동하기 (0) | 2012.07.19 |
Ant 로 Sonar 수행하기. (0) | 2011.04.12 |
Sonar 소개 (0) | 2011.02.14 |
Continuous Integration 관련 자료 - IBM DeveloperWorks (0) | 2011.01.04 |
JIRA와 TestLink 연동하기 (0) | 2011.08.25 |
---|---|
JIRA Plugin관리 (0) | 2011.03.24 |
자동화에 extent report 적용하기 (0) | 2018.01.22 |
---|---|
Jenkins와 Sonar 연동하기 (0) | 2012.07.19 |
Ant 로 Sonar 수행하기. (0) | 2011.04.12 |
Sonar 소개 (0) | 2011.02.14 |
CI(Continuous Integration) 서버 구성안 (0) | 2011.02.14 |