로봇 프레임워크 기반의 자동화 시각 테스트

14207 단어 newstutorialtesting
자동화 테스트를 할 때 흔히 볼 수 있는 문제는 테스트는 이전의 상태와 시각적 비교를 해야 한다는 것이다.많은 테스트 작업을 수행해야 할 때, 이것은 시간이 많이 걸리는 작업일 수도 있습니다.하지만 지금은 아니야, 로봇 프레임 박사 도서관이 구해줘!

1. 머리말


로봇 프레임이 뭔지 몰라도 계속 읽을 만하다.DocTest 라이브러리는 테스트 시간을 많이 절약할 수 있지만 로봇 프레임워크에 대한 지식이 필요합니다.로봇 프레임이 무엇인지 모르면, 좋은 소개를 얻기 위해 이전의 댓글을 읽어 보세요.
  • Automated Acceptance Testing With Robot Framework
  • How to Write Data Driven Tests With Robot Framework
  • Create Custom Robot Framework Libraries
  • 자동화된 방식으로 프로그램을 테스트하려고 시도할 때, 일부 테스트는 자동화되지 않는다.주로 이런 테스트는 목시 검사가 필요하기 때문이다.프로그램이 정기적으로 업데이트가 필요한 지도를 사용하거나, 생성되고 검증이 필요한 보고서를 사용한다고 가정하십시오. 이 시각화 테스트는 시간이 많이 걸릴 수도 있고, 정확하게 검증될 수 없습니다.눈으로 보는 검사는 인간이 하고 인간은 실수를 한다.만약 당신이 자동으로 목시 검사를 할 수 있거나, 적어도 이전 버전에 비해 변경이 발생했을 때 알림을 받고, 테스트의 출력이 차이를 보일 수 있다면, 그것은 좋지 않습니까?이 모든 것은 현재 Robot Framework DocTest Library를 통해 실현할 수 있다.그것은 2021년 로봇 올림픽에서 전시된다.이 강연online은 사용 가능하며 30분만 시청할 수 있습니다.
    여기까지 소개하고 어떻게 일하는지 봅시다.이 글에서 사용된 정보의 출처는 GitHub를 통해 얻을 수 있다.

    2. 설치


    다음 설치 지침은 Ubuntu 20.04.2 LTS 릴리즈에서 수행됩니다.pip를 사용하면 설치가 간단합니다.
    $ pip install --upgrade robotframework-doctestlibrary
    
    DocTest는 다른 응용 프로그램을 사용하려면 해당 응용 프로그램을 설치해야 합니다. 그렇지 않으면 오류가 발생할 수 있습니다.
    $ apt-get install imagemagick
    $ apt-get install tesseract-ocr
    $ apt-get install ghostscript
    $ apt-get install libdmtx0b
    
    위의 응용 프로그램을 설치하지 않으면 DocTest 키워드Compare Images를 사용하면 다음 오류가 발생합니다.
    [ ERROR ] Error in file '/<path>/MyDocTestPlanet/visual_test.robot' on line 2: Importing library 'DocTest.VisualTest' failed: ImportError: Unable to find dmtx shared library
    
    PDF 파일을 비교하는 경우 ImageMagick이 라이브러리에서 다음과 같은 오류를 일으킬 수 있습니다.
    File could not be converted by ImageMagick to OpenCV Image: testdata/sample_1_page.pdf
    
    CLI에서 ImageMagick을 사용하여 PDF를 JPG 파일로 변환하려고 하면 더 큰 오류가 발생합니다.
    $ convert sample.pdf sample.jpg 
    convert-im6.q16: attempt to perform an operation not allowed by the security policy
    
    ImageMagick은 기본적으로 문제를 일으키는 다음 줄을 포함하는 policy.xml 파일을 사용합니다.
    <!-- disable ghostscript format types -->
    <policy domain="coder" rights="none" pattern="PS" />
    <policy domain="coder" rights="none" pattern="PS2" />
    <policy domain="coder" rights="none" pattern="PS3" />
    <policy domain="coder" rights="none" pattern="EPS" />
    <policy domain="coder" rights="none" pattern="PDF" />
    <policy domain="coder" rights="none" pattern="XPS" />
    
    DocTest 저장소의 루트 디렉토리에 policy.xml 파일이 있습니다./etc/ImageMagick-6/policy.xml 파일의 파일을 저장소의 파일로 대체합니다.이제 전환하면 될 것 같습니다.

    3. 실천 중


    이 절에서 이 라이브러리를 어떻게 사용하는지 배울 것입니다.이 라이브러리의 GitHub 저장소에는 라이브러리를 어떻게 사용하는지 보여주는 좋은 예도 있습니다.저장소를 복제하고 루트 디렉토리에서 테스트를 실행하려면 다음과 같이 하십시오.
    $ robot atest/Compare.robot
    
    단, 자신이 만든 프로젝트에 적용되는지 확인하는 것도 좋습니다.기본 이미지로 타임 스탬프를 포함하는 맵을 만들었습니다.모든 이미지는 images 디렉토리에 있습니다.원본 도면*.odg 파일이 있고 저장된 파일*.png은 예에서 사용됩니다.기본 이미지는 base-image.png입니다.

    3.1 작은 차이점 비교


    네가 해야 할 첫 번째 비교는 그 중의 삼각형base-image-with-triangle-difference.png이 조금 다르다는 것이다.이 점을 직관적으로 비교하고 싶을 때, 당신은 아주 작은 차이이기 때문에 차이를 찾기가 매우 어려울 것이다.그렇다면 우리는 어떻게 박사 도서관을 통해 이 점을 해낼 수 있을까?적절한 테스트는 다음과 같습니다.
    | *** Settings *** |
    | Library | DocTest.VisualTest
    
    | *** Test Cases *** |
    | 01 | [Documentation] | Compare Two Images With Triangle Difference
    |    | Compare Images  | images/base-image.png | images/base-image-with-triangle-difference.png
    
    라이브러리를 가져온 후 유일하게 해야 할 일은reference와canditate 이미지 실행 Compare Images 키워드입니다.테스트를 실행하려면 다음과 같이 하십시오.
    $ robot visual_test.robot
    
    차이가 존재하기 때문에 테스트는 분명히 실패했다.diff 이미지가 있는 디렉터리 screenshots 가 생성되었음을 알 수 있습니다.그러나 Robot 프레임워크 결과가 있는 log.html 파일을 여는 것이 더 쉽다.

    이 결과는 매우 유용해서, 당신은 즉시 차이점을 알아차릴 수 있을 것이다.예상한 바와 같이 삼각형은 차이를 나타내지만 시간 스탬프를 나타낸다.이 화면 캡처 옆에 조합 차분 이미지가 있습니다.결과는 GitHub 저장소에서 확인할 수 있습니다.

    3.2 타임 스탬프의 작은 차이 비교 무시


    그러나 앞의 비교에는 문제가 하나 있다.지도에 차이가 없고 캡처가 서로 다른 시간에 촬영할 때 비교는 두 장의 지도를 서로 다르게 표시한다.니가 원하는 게 아닐 수도 있어.이 라이브러리는 마스크를 통해 해결 방안을 제공합니다.JSON 파일에서 마스크를 정의할 수 있으며 비교 과정에서 무시해야 할 항목을 정의할 수 있습니다.이 예에서는 다음과 같이 masks/mask-date.json 파일을 생성합니다.
    [
        {
        "page": "all",
        "name": "Date Pattern",
        "type": "pattern",
        "pattern": ".*[0-9]{2}-[0-9]{2}-[0-9]{4}"
        }
    ]
    
    사용하는 모델은 간단한 정규 표현식이다.테스트 용례는 추가 placeholder_file 인자만 필요합니다.
    | 02 | [Documentation] | Compare Two Images With Triangle difference and Time Mask
    |    | Compare Images  | images/base-image.png | images/base-image-with-triangle-difference.png | placeholder_file=masks/masks-time.json
    
    현재 테스트를 실행할 때 삼각형에 차이가 있기 때문에 실패했습니다. 그러나 비교 화면 캡처에서 날짜는 파란색으로 표시됩니다. 이것은 비교 과정에서 무시된다는 것을 의미합니다.

    그림이 시간 외에 모두 동일할 때 성공했는지 확인해 봅시다.
    | 03 | [Documentation] | Compare Two Images With Time Mask
    |    | Compare Images  | images/base-image.png | images/base-image-with-time-difference.png | placeholder_file=masks/masks-time.json
    
    네, 그림의 시간은 다르지만 테스트는 성공했습니다.

    좋아, 너는 지금 네가 원하는 그림만 비교하고, 어쨌든 다른 항목은 무시할 수도 있어.

    3.3 무시 영역의 작은 차이 비교


    패턴 외에도 무시할 영역을 정의할 수 있습니다.다음을 포함하는 masks/mask-bottom.json 파일을 만듭니다.
    [
        {
            "page": "all",
            "name": "Header Area",
            "type": "area",
            "location": "bottom",
            "percent":  10
        }
    ]
    
    이번에는 아래쪽 영역과 백분율을 지정합니다.테스트 용례는 다음과 같습니다.
    | 04 | [Documentation] | Compare Two Images With Bottom Mask
    |    | Compare Images  | images/base-image.png | images/base-image-with-triangle-difference.png | placeholder_file=masks/masks-bottom.json
    
    이 테스트를 실행하면 그림의 밑부분이 무시됩니다.
    Alt Text

    3.4 작은 움직임과 비교


    물건 하나가 조금 움직일 때 차이를 발견하기 어렵다.예상과 실제 결과 이미지를 제외하고 로봇 프레임워크 로그는 우리에게 조합 결과를 보여 주었다.테스트:
    | 05 | [Documentation] | Compare Two Images With Small Move
    |    | Compare Images  | images/base-image.png | images/base-image-with-small-move.png
    
    종합적인 결과에서 너는 차이를 더욱 잘 볼 수 있다.

    이런 작은 움직임을 받아들이고 싶다면?한 항목이 조금 움직였을 때 테스트에 실패하고 싶지 않다는 얘기다.이 경우 move_tolerance 매개 변수를 추가하고 허용되는 픽셀 수를 지정할 수 있습니다.이전 테스트는 다음과 같습니다.
    | 06 | [Documentation] | Compare Two Images With Small Move And Move Tolerance
    |    | Compare Images  | images/base-image.png | images/base-image-with-small-move.png | move_tolerance=10
    
    현재 테스트가 성공적으로 통과되었는데, 그 결과 작은 동작이 발견되었다.

    3.5 PDF 비교


    그림처럼 PDF 파일을 비교할 수도 있습니다.비교 보고서가 필요할 때 유용합니다.리포트는 pdf/base-report.pdf에서 얻을 수 있습니다(원시 리포트base-report.odt도 얻을 수 있습니다).보고서pdf/base-report-with-small-difference.pdf에는 드라이버의 금액과 날짜가 포함되어 있습니다.테스트는 이미지와 유사합니다. 이번에 get_pdf_content 파라미터를 제공하여 true 로 설정합니다.
    | 07 | [Documentation] | Compare Two PDF Files With Small Difference
    |    | Compare Images  | pdf/base-report.pdf | pdf/base-report-with-small-difference.pdf | get_pdf_content=${true}
    
    
    마찬가지로 로그 파일은 차이점을 정확하게 보여 줍니다.

    마스크도 이런 비교에 적용된다.데이트 마스크팩을 발라봅시다.
    | 08 | [Documentation] | Compare Two PDF Files With Small Difference and Date Mask
    |    | Compare Images  | pdf/base-report.pdf | pdf/base-report-with-small-difference.pdf | placeholder_file=masks/masks-date.json | get_pdf_content=${true}
    
    예상한 대로 금액 차이만 표시하고 날짜는 파란색으로 표시해서 무시되었음을 표시합니다.

    4. 결론


    Robot Framework DocTest 라이브러리는 이미지와 보고서의 차이를 비교하는 데 매우 강력한 라이브러리입니다.그것은 사용이 간단하고 정상적이다.테스트 과정에서 그것을 적용할 때, 이것은 틀림없이 시간을 크게 절약할 뿐만 아니라, 테스트 오류의 기회도 줄일 것이다.

    좋은 웹페이지 즐겨찾기