mac을 쓰다보면, .DS_Store파일이 생기게 된다.

Mac의 메타정보를 저장하는 파일이라고 하는데 없어도 상관없고, 

일일이 지우는 것도 귀찮으니, 아예 생성하지 않도록 설정할 수 있다.

 

터미널에서 아래와 같이 입력한 뒤, 재시작한다.

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

 

참고 : https://support.apple.com/en-us/HT1629

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


awk

  • 특정 패턴의 문자들을 원하는 포맷으로 변경하는 명령어
  • 사용법
    • awk [-F 구분자] [-f 파일명] ["patten {action}"] [처리할 file명]
  • 사용예
    • awk -F : "{print $1, $6}" ./text.txt
      • text.txt 파일에서 ":" 구분자를 이용하여 1번째와 6번째 필드를 프린트하라.
    • free -k | grep Mem | awk "{print($2 $4 $6)}" 
      • free 명령어 수행 후 total, free, buff+cache 값을 출력하라

sed

  • grep 명령어와 같이 한 라인씩 표준 입력으로 읽고 치환 및 삭제를 하여 표준출력 해주는 명령어

 명령어

설명 

 a\

 현재 행에 하나 이상의 새로운 행 추가

 c\

 현재 행에 새로운 내용으로 교체 

 d

 행을 삭제 

 p

 행을 출력

 n

 다음 입력행을 첫번째 명령어가 아닌 다음 명령어에서 처리 

 q

 sed 종료

 r

 파일로부터 행을 읽어온다

 s

 문자열을 치환

sed 사용예

  • sed 's/old/new/' list.txt : list.txt파일의 old를 new로 치환하여 표준출력만 수행
  • sed 's/\t/\ /' list.txt : 탭 문자를 엔터로 치환
  • sed '/TD/d' list.txt : TD문자가 포함된 줄을 삭제하고 출력
  • sed '/Src/!d' list.txt : Src문자가 있는 줄만 지우지 않고 출력
  • sed '1,2d' list.txt : 1,2줄만 지우고 출력
  • sed '/^$/d' list.txt : 공백라인을 삭제
  • sed '1,3p' list.txt : 처음부터 3번째행까지 한번더 출력
  • sed '3,$d' list.txt : 3번째라인부터 마지막까지 삭제하고 출력

xargs

  • 명령어의 출력을 다른 명령어의 인자값으로 전달하는 명령어
  • 사용예
    • find . -name "*.log" -print | xargs rm -rf 
      • 현재 디렉토리부터 하위디렉토리까지 검색되어 나오는  .log로 끝나는 파일 모두를 rm -rf 명령어로 지워라.
    • find . -name "*.java" print | xargs cat | grep System.out.println
      • 모든 .java로 끝나는 파일을 cat으로 읽고 System.out.println 구문만 출력하라


'QA > Perfomance' 카테고리의 다른 글

성능 테스트시 서버 모니터링 방법 정리  (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


판교에서 출퇴생활 벗어난지 1년이 넘었는데..

회의 때문에 다시 판교로 가야 된다 ㅠ.ㅠ


종로 방향으로 빠르게 퇴근하기 위해서는 9007번 버스 / 혹은 지하철을 이용해야 하는데, 

9003번 버스도 있다. 

매번 까먹어서 여기에다가 적어놓고 생각날 때마다 봐야겠다.


9003번 퇴근버스 (무정차 직행)

SK플래닛 건물 앞에서 승차!

  • 18:15분
  • 18:45분
  • 19:05분
  • 19:35분 (최근 없어짐)

사람이 많이 타기 때문에, 빠르게 승차해야 앉아갈 수 있다 ㅠ.ㅠ


Windows에서 Selenium으로 UI자동화 진행하다보면, chromedriver.exe가 남아있어서 브라우저가 기동이 안될 경우가 있다.

driver.quit()을 꼼꼼히 호출해도 남아있는 경우가 있는데, 

jenkins 에서 pre-build 단계나, test진행 전 단계에 taskkill을 이용하는 것이 좋다.


windows batch command 수행 (jenkins pre-build)

taskkill /f /fi "pid gt 0" /im chromedriver.exe


Java code에서 (BeforeClass)

Runtime.getRuntime().exec("taskkill /f /fi /im chromedriver.exe");


apache + tomcat 연동방법

  • tomcat connector 설치
  • /etc/httpd/moduels/mod_jk.so 파일 생성 확인
  • vi /etc/httpd/conf/httpd.conf
    • LoadModule jk_module modules/mod_jk.so
    • Include conf/mod_jk.conf
  • 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를 세팅할때, 

  • selenide.browser 
  • webdriver.chrome.driver
위 두 프로퍼티를 설정하면, 알아서 UI브라우저 관리를 해주는데, 모바일 에뮬레이션을 하려고 할때는 아래와 같이 진행하면 된다.

단점은 모바일 에뮬레이션을 하면, 직접 browser(webdriver)를 close()를 해줘야 한다.

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<StringString> 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 4.x에서 csv 파일을 읽어서 data driven testing을 구현하는 방법.

junit 5에는 @CsvFileSource 라는게 이미 있지만, junit 4.x 에는 없어서 구현을 해야 한다.

근데, 구글링 해보니, JUnitParams라는 아주 편리한 라이브러리가 있네.


구현 방법도 쉽다.

우선 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 파일 말고, 다른 방법으로 하는 링크된 샘플코드에 많이 나와 있으니, 생략한다. 


junit을 활용한 테스트 자동화에 익숙하다보니, api테스트 자동화 한다고 하면 request, response 동작을 위한 util 및 json / xml parser 등을 모두 구현해서 사용했었는데, 

그동안 왜 그랬나 싶을 정도로,, Rest-Assured는 잘 만들어진 api 테스트 자동화 도구이다. 

링크 : http://rest-assured.io/


환경 구성이나, 손 쉬운 사용법은 위 링크의 User Guide 문서를 참고하면 사용할 수 있다.

그래도 자동화 하면, 쉬운 반복 수행 및 결과 리포팅이 중요하니, 아래와 같이 구성하자.


  • 빌드 도구 : maven (or gradle)
  • 테스트 도구 : junit + rest-assured
  • 리포트 : extent-report
  • 통합 : Jenkins

환경 구성 (maven)

  <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

Extent-Report 세팅

Jenkins 연동

  • Maven Project 생성 후  > Build Step에 mvn clean test 정도만 추가하면 완료
  • html publisher plugin설정 후, 생성된 extent report 파일을 설정해주면 끝
  • html report에 CSS가 jenkins 권한 등의 문제로 수행이 안된다면, 
    • 젠킨스 관리 > Script console 에서 아래 명령어를 넣어준다.
  • System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

api 테스트 자동화를 Java 환경에서 진행한다면, rest-assured는 진짜 적극 검토해볼만하다~  좋다~



+ Recent posts