ServiceNow 테스트 프레임워크를 쓰러뜨리다

개요



ServiceNow의 Automated Test Framework에서 Run Server Side Script의 테스트를 작성하면, 작성한 테스트 설정의 Test Script란에 코멘트로 상세한 테스트 방법이 기술되어 있는, 그 내용을 읽어내면서 실제로 시험해 본다.

주제



Jasmine과의 구분



// You can use this step to execute a variety of server-side javascript tests including
// jasmine tests and custom assertions

jasmine과 ServiceNow의 독자적인 테스트 프레임워크의 2종류를 사용할 수 있다.
ServiceNow 테스트 기능을 최대한 활용하려면 ServiceNow 테스트 기능을 사용하는 것이 좋습니다.

반환 값 정보


// Pass or fail a step: Override the step outcome to pass or fail. This is ignored 
//                      by jasmine tests
//
//  - Return true from the main function body to pass the step
//  - Return false from the main function body to fail the step

반환 값으로 true를 반환하면 테스트 성공 (pass)
반환 값으로 false를 반환하면 테스트 실패 (fail)
라고 판단된다.

이 반환 값에 의한 테스트는 jasmine 테스트의 경우 무시됩니다.

반환값을 시도해 보기



true를 반환


(function(outputs, steps, stepResult, assertEqual) {
    // add test script here
    return true;

})(outputs, steps, stepResult, assertEqual);



false 반환


(function(outputs, steps, stepResult, assertEqual) {
    // add test script here
    return false;

})(outputs, steps, stepResult, assertEqual);



outputs를 사용하여 테스트 단계간에 데이터 전달



// outputs:       Pre-defined Step config Output variables to set on this step during 
//                execution that are available to later steps
//
// steps(SYS_ID): A function to retrieve Output variable data from a step that executed
//                earlier in the test. The desired step's sys_id is required

outputs 오브젝트에 값을 설정하는 것으로, 이후의 테스트 스텝에 값을 건네주는 것이 가능.
이후의 테스트 스텝에서는, steps 함수에 의해 이전의 테스트의 outputs 오브젝트를 취득하는 것이 가능.

outputs를 사용해보십시오



첫 번째 테스트 단계
(function(outputs, steps, stepResult, assertEqual) {
    var salesRecord = new GlideRecord('x_211750_angular_a_sales');
    salesRecord.setValue('customername','test user');
    salesRecord.setValue('unitprice', 200);
    salesRecord.setValue('quantity',4);

    outputs.record_id = salesRecord.insert(); 

})(outputs, steps, stepResult, assertEqual);

두 번째 테스트 단계의이 테스트 단계의 sys_id가 필요하기 때문에,
Test Step 메뉴의 「Copy sys_id」로 sys_id를 클립보드에 복사해 둔다.



두 번째 테스트 단계
(function(outputs, steps, stepResult, assertEqual) {

    var previoudObject = steps('57ad9350dbe11b0004f171efbf96190d');
    gs.info('previoudObject.record_id = ' + previoudObject.record_id);
    var salesRecord = new GlideRecord('x_211750_angular_a_sales');

    salesRecord.get(previoudObject.record_id);

    var assertion = {
        name: "レコードがありました", 
        shouldbe: 'test user', 
        value: salesRecord.customername};

    assertEqual(assertion);

    return true;

})(outputs, steps, stepResult, assertEqual);

steps 함수에 대해 설명합니다.
var previoudObject = steps('57ad9350dbe11b0004f171efbf96190d');

steps 함수에 의해 이전 스텝의 outputs 오브젝트를 취득이 가능하다.
steps 함수의 인수는, outputs 오브젝트를 취득하고 싶은 테스트 스텝의 sys id이다.
테스트 단계의 sys_id는 첫 번째 테스트 단계를 만들 때 클릭 보드에 복사 한 것입니다.
테스트에서 이미 실행된 모든 테스트 단계의 출력을 얻을 수 있습니다.

실행 결과는 다음과 같습니다.



stepResult.setOutputMessage로 테스트 결과를 명시 적으로 출력합니다.


// stepResult.setOutputMessage: Log a message to step results after step executes.
//                              Can only be called once or will overwrite previous 
//                              message
//

Test Result에 테스트의 검증 결과를 테스트 스텝마다 출력이 가능.
하나의 테스트 단계에서 메시지는 한 번만 설정할 수 있으며 나중에 승리합니다.

stepResult.setOutputMessage를 사용해보기


(function(outputs, steps, stepResult, assertEqual) {
    stepResult.setOutputMessage('レコードの検証に成功しました。');

    return true;
})(outputs, steps, stepResult, assertEqual);

실행 결과는 다음과 같습니다.



describe나 it에 대하여


// Note: describe is only supported in Global scope.
// Use 'describe' to create a suite of test scripts and 'it' to define test expectations

describe나 it라는 것은 jasmine 테스트 프레임워크에서 사용하는 것으로,
it에서 테스트 케이스를 정의하고 describe에서 테스트 스위트를 정의하지만,
ServiceNow를 사용하는 경우 ServiceNow의 Test Suite 기능을 이용하므로 jasmine의 describe나 it는 통상은 이용하지 않을 것이다.

사용하는 경우는 Global 스코프에서만 사용 가능.
// make sure to uncomment jasmine.getEnv().execute(); outside the function body

또한 jasmine의 테스트 프레임 워크를 사용하려면 아래 줄의 주석 처리를 해제하고 활성화해야합니다.

jasmine.getEnv().execute();

assertEqual로 검증


// assertEqual: A function used to compare that assertion.shouldbe == assertion.value;
//              in case of failure it throws an Error and logs that the assertion by
//              name has failed

여기는 이미 시도했지만 값을 확인하는 데 사용됩니다.
다음과 같은 객체를 인수로 지정하여 실행한다.
   var assertion = {
        name: "レコードがありました", 
        shouldbe: 'test user', 
        value: salesRecord.customername};

   assertEqual(assertion);

outputs의 2번째 스텝의 코드로 이용하고 있으므로, 그쪽에서 확인해 주었으면 한다.
또한 객체의 속성은 다음과 같습니다.


이름
설명


이름
유효성 검증 설명 작성

shouldbe
예상 값

value
실제 값

좋은 웹페이지 즐겨찾기